[Toybox] Moving to toys/posix and toys/lsb.

Roy Tam roytam at gmail.com
Sun Aug 26 18:54:10 PDT 2012


2012/8/26 Rob Landley <rob at landley.net>:
> I banged up a quick make/make.sh modification to handle commands in
> subdirectories, so menuconfig can show menus for "Posix", "LSB", and
> "Other". (Maybe Android at some point.)
>
> One technical limitation is that it's still more or less a flat
> namespace: having a toys/posix/command.c and toys/lsb/command.c with the
> same name would fight both at the .config level and in the final command
> list. Then again this never seemed to bother anyone elsewhere, so...
>
> It was getting a bit crowded.
>
> Rob

FYI: posix/sh.c CFG_TOYSH_* defines is not changed to CFG_SH_* after the move.
the following patch fixes it.

--- sh.c        2012-08-26 07:08:51.000000000 +0800
+++ sh.c       2012-08-27 09:51:53.000000000 +0800
@@ -219,11 +219,11 @@
 static char *parse_word(char *start, struct command **cmd)
 {
        char *end;

        // Detect end of line (and truncate line at comment)
-       if (CFG_TOYSH_PIPES && strchr("><&|(;", *start)) return 0;
+       if (CFG_SH_PIPES && strchr("><&|(;", *start)) return 0;

        // Grab next word.  (Add dequote and envvar logic here)
        end = start;
        while (*end && !isspace(*end)) end++;
        (*cmd)->argv[(*cmd)->argc++] = xstrndup(start, end-start);
@@ -245,20 +245,20 @@
        struct command **cmd = &(line->cmd);
        char *start = line->cmdline = cmdline;

        if (!cmdline) return 0;

-       if (CFG_TOYSH_JOBCTL) line->cmdline = cmdline;
+       if (CFG_SH_JOBCTL) line->cmdline = cmdline;

        // Parse command into argv[]
        for (;;) {
                char *end;

                // Skip leading whitespace and detect end of line.
                while (isspace(*start)) start++;
                if (!*start || *start=='#') {
-                       if (CFG_TOYSH_JOBCTL) line->cmdlinelen = start-cmdline;
+                       if (CFG_SH_JOBCTL) line->cmdlinelen = start-cmdline;
                        return 0;
                }

                // Allocate next command structure if necessary
                if (!*cmd) *cmd = xzalloc(sizeof(struct
command)+8*sizeof(char *));
@@ -266,11 +266,11 @@
                // Parse next argument and add the results to argv[]
                end = parse_word(start, cmd);

                // If we hit the end of this command, how did it end?
                if (!end) {
-                       if (CFG_TOYSH_PIPES && *start) {
+                       if (CFG_SH_PIPES && *start) {
                                if (*start==';') {
                                        start++;
                                        break;
                                }
                                // handle | & < > >> << || &&
@@ -278,11 +278,11 @@
                        break;
                }
                start = end;
        }

-       if (CFG_TOYSH_JOBCTL) line->cmdlinelen = start-cmdline;
+       if (CFG_SH_JOBCTL) line->cmdlinelen = start-cmdline;

        return start;
 }

 // Execute the commands in a pipeline
@@ -311,11 +311,11 @@

                cmd->pid = vfork();
                if (!cmd->pid) xexec(cmd->argv);
                else waitpid(cmd->pid, &status, 0);

-               if (CFG_TOYSH_FLOWCTL || CFG_TOYSH_PIPES) {
+               if (CFG_SH_FLOWCTL || CFG_SH_PIPES) {
                        if (WIFEXITED(status)) cmd->pid = WEXITSTATUS(status);
                        if (WIFSIGNALED(status)) cmd->pid = WTERMSIG(status);
                }
        }

@@ -368,11 +368,11 @@
 void sh_main(void)
 {
        FILE *f;

        // Set up signal handlers and grab control of this tty.
-       if (CFG_TOYSH_TTY) {
+       if (CFG_SH_TTY) {
                if (isatty(0)) toys.optflags |= 1;
        }
        f = *toys.optargs ? xfopen(*toys.optargs, "r") : NULL;
        if (TT.command) handle(TT.command);
        else {



More information about the Toybox mailing list