Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d951c2c authored by Elliott Hughes's avatar Elliott Hughes Committed by Gerrit Code Review
Browse files

Merge "Remove execonce."

parents 3a4aedfc e2837a91
Loading
Loading
Loading
Loading
+0 −62
Original line number Diff line number Diff line
@@ -154,68 +154,6 @@ int do_exec(int nargs, char** args) {
    return 0;
}

// TODO: remove execonce when exec is available.
int do_execonce(int nargs, char **args)
{
    pid_t child;
    int child_status = 0;
    static int already_done;

    if (already_done) {
      return -1;
    }
    already_done = 1;
    if (!(child = fork())) {
        /*
         * Child process.
         */
        zap_stdio();
        char *exec_args[100];
        size_t num_process_args = nargs;

        memset(exec_args, 0, sizeof(exec_args));
        if (num_process_args > ARRAY_SIZE(exec_args) - 1) {
            ERROR("exec called with %zu args, limit is %zu", num_process_args,
                  ARRAY_SIZE(exec_args) - 1);
            _exit(1);
        }
        for (size_t i = 1; i < num_process_args; i++)
            exec_args[i - 1] = args[i];

        if (execv(exec_args[0], exec_args) == -1) {
            ERROR("Failed to execv '%s' (%s)", exec_args[0], strerror(errno));
            _exit(1);
        }
        ERROR("Returned from execv()!");
        _exit(1);
    }

    /*
     * Parent process.
     */
    if (child == -1) {
        ERROR("Fork failed\n");
        return -1;
    }

    if (TEMP_FAILURE_RETRY(waitpid(child, &child_status, 0)) == -1) {
        ERROR("waitpid(): failed (%s)\n", strerror(errno));
        return -1;
    }

    if (WIFSIGNALED(child_status)) {
        INFO("Child exited due to signal %d\n", WTERMSIG(child_status));
        return -1;
    } else if (WIFEXITED(child_status)) {
        INFO("Child exited normally (exit code %d)\n", WEXITSTATUS(child_status));
        return WEXITSTATUS(child_status);
    }

    ERROR("Abnormal child process exit\n");

    return -1;
}

int do_export(int nargs, char **args)
{
    return add_environment(args[1], args[2]);
+0 −1
Original line number Diff line number Diff line
@@ -138,7 +138,6 @@ static int lookup_keyword(const char *s)
    case 'e':
        if (!strcmp(s, "nable")) return K_enable;
        if (!strcmp(s, "xec")) return K_exec;
        if (!strcmp(s, "xeconce")) return K_execonce;
        if (!strcmp(s, "xport")) return K_export;
        break;
    case 'g':
+0 −2
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ int do_class_reset(int nargs, char **args);
int do_domainname(int nargs, char **args);
int do_enable(int nargs, char **args);
int do_exec(int nargs, char **args);
int do_execonce(int nargs, char **args);
int do_export(int nargs, char **args);
int do_hostname(int nargs, char **args);
int do_ifup(int nargs, char **args);
@@ -55,7 +54,6 @@ enum {
    KEYWORD(domainname,  COMMAND, 1, do_domainname)
    KEYWORD(enable,      COMMAND, 1, do_enable)
    KEYWORD(exec,        COMMAND, 1, do_exec)
    KEYWORD(execonce,    COMMAND, 1, do_execonce)
    KEYWORD(export,      COMMAND, 2, do_export)
    KEYWORD(group,       OPTION,  0, 0)
    KEYWORD(hostname,    COMMAND, 1, do_hostname)
+0 −4
Original line number Diff line number Diff line
@@ -182,10 +182,6 @@ exec [ <seclabel> [ <user> [ <group> ]* ] ] -- <command> [ <argument> ]*
   groups can be provided. No other commands will be run until this one
   finishes.

execonce <path> [ <argument> ]*
   Use exec instead. This command will be removed after existing callers have
   moved to exec.

export <name> <value>
   Set the environment variable <name> equal to <value> in the
   global environment (which will be inherited by all processes