# HG changeset patch # User Rob Landley # Date 1420083059 21600 # Node ID 5fac2769a159b66df19a33f804267fc4d177d4e2 # Parent 556d8cbfeb087d69e1858813de81771f1e787a1f Redo option parsing infrastructure so #define FORCE_FLAGS can unzero flag macros for a disabled command (needed when multiple commands share infrastructure with a common set of flags). This means the flag space is no longer packed, but leaves gaps where the zeroes go. (Actual flag bit positions are the same for all configs.) Since the option parsing needs to know where the holes are, the OPTSTR values are now generated as part of flags.h with ascii 1 values for the disabled values. (So generated/oldflags.h went away.) This also means that the option string argument for OLDTOY() went away, it now uses the same arguments as the NEWTOY() it references. diff -r 556d8cbfeb08 -r 5fac2769a159 lib/help.c --- a/lib/help.c Wed Dec 31 21:23:37 2014 -0600 +++ b/lib/help.c Wed Dec 31 21:30:59 2014 -0600 @@ -10,7 +10,7 @@ #undef NEWTOY #undef OLDTOY #define NEWTOY(name,opt,flags) help_##name "\0" -#define OLDTOY(name,oldname,opts,flags) "\xff" #oldname "\0" +#define OLDTOY(name,oldname,flags) "\xff" #oldname "\0" static char *help_data = #include "generated/newtoys.h" ; diff -r 556d8cbfeb08 -r 5fac2769a159 main.c --- a/main.c Wed Dec 31 21:23:37 2014 -0600 +++ b/main.c Wed Dec 31 21:30:59 2014 -0600 @@ -10,7 +10,8 @@ #undef NEWTOY #undef OLDTOY #define NEWTOY(name, opts, flags) {#name, name##_main, opts, flags}, -#define OLDTOY(name, oldname, opts, flags) {#name, oldname##_main, opts, flags}, +#define OLDTOY(name, oldname, flags) \ + {#name, oldname##_main, OPTSTR_##oldname, flags}, struct toy_list toy_list[] = { #include "generated/newtoys.h" @@ -57,7 +58,7 @@ #undef NEWTOY #undef OLDTOY #define NEWTOY(name, opts, flags) opts || -#define OLDTOY(name, oldname, opts, flags) opts || +#define OLDTOY(name, oldname, flags) OPTSTR_##oldname || static const int NEED_OPTIONS = #include "generated/newtoys.h" 0; // Ends the opts || opts || opts... diff -r 556d8cbfeb08 -r 5fac2769a159 scripts/make.sh --- a/scripts/make.sh Wed Dec 31 21:23:37 2014 -0600 +++ b/scripts/make.sh Wed Dec 31 21:30:59 2014 -0600 @@ -50,9 +50,7 @@ echo "USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT))" > generated/newtoys.h sed -n -e 's/^USE_[A-Z0-9_]*(/&/p' toys/*/*.c \ | sed 's/\(.*TOY(\)\([^,]*\),\(.*\)/\2 \1\2,\3/' | sort -s -k 1,1 \ - | sed 's/[^ ]* //' >> generated/newtoys.h && - sed -n -e 's/.*(NEWTOY(\([^,]*\), *\(\("[^"]*"[^,]*\)*\),.*/#define OPTSTR_\1\t\2/p' \ - generated/newtoys.h > generated/oldtoys.h || exit 1 + | sed 's/[^ ]* //' >> generated/newtoys.h || exit 1 fi [ ! -z "$V" ] && echo "Which C files to build..." diff -r 556d8cbfeb08 -r 5fac2769a159 scripts/mkflags.c --- a/scripts/mkflags.c Wed Dec 31 21:23:37 2014 -0600 +++ b/scripts/mkflags.c Wed Dec 31 21:30:59 2014 -0600 @@ -17,11 +17,42 @@ struct flag *lopt; }; +// replace chopped out USE_BLAH() sections with low-ascii characters +// showing how many flags got skipped + +char *mark_gaps(char *flags, char *all) +{ + char *n, *new, c; + + // Shell feeds in " " for blank args, leading space not meaningful. + while (isspace(*flags)) flags++; + while (isspace(*all)) all++; + + n = new = strdup(all); + while (*all) { + if (*flags == *all) { + *(new++) = *(all++); + *flags++; + continue; + } + + c = *(all++); + if (strchr("?&^-:#|@*; ", c)); + else if (strchr("=<>", c)) while (isdigit(*all)) all++; + else if (c == '(') while(*(all++) != ')'); + else *(new++) = 1; + } + *new = 0; + + return n; +} + // Break down a command string into struct flag list. struct flag *digest(char *string) { struct flag *list = NULL; + char *err = string; while (*string) { // Groups must be at end. @@ -52,6 +83,10 @@ if (strchr("?&^-:#|@*; ", *string)) string++; else if (strchr("=<>", *string)) { + if (!isdigit(string[1])) { + fprintf(stderr, "%c without number in '%s'", *string, err); + exit(1); + } while (isdigit(*++string)) { if (!list) { string++; @@ -79,8 +114,12 @@ // See "intentionally crappy", above. if (!(out = outbuf)) return 1; + printf("#ifdef FORCE_FLAGS\n#define FORCED_FLAG 1\n" + "#else\n#define FORCED_FLAG 0\n#endif\n\n"); + for (;;) { struct flag *flist, *aflist, *offlist; + char *gaps, *mgaps, c; unsigned bit; *command = 0; @@ -95,6 +134,16 @@ bit = 0; printf("// %s %s %s\n", command, flags, allflags); + mgaps = mark_gaps(flags, allflags); + for (gaps = mgaps; *gaps == 1; gaps++); + if (*gaps) c = '"'; + else { + c = ' '; + gaps = "0"; + } + printf("#undef OPTSTR_%s\n#define OPTSTR_%s %c%s%c\n", + command, command, c, gaps, c); + free(mgaps); flist = digest(flags); offlist = aflist = digest(allflags); @@ -124,29 +173,28 @@ { sprintf(out, "#define FLAG_%s (1<<%d)\n", flist->lopt->command, bit); flist->lopt = flist->lopt->next; - } else sprintf(out, "#define FLAG_%s 0\n", aflist->lopt->command); + } else sprintf(out, "#define FLAG_%s (FORCED_FLAG<<%d)\n", + aflist->lopt->command, bit); aflist->lopt = aflist->lopt->next; if (!aflist->command) { aflist = aflist->next; - if (flist) { - flist = flist->next; - bit++; - } + bit++; + if (flist) flist = flist->next; } } else if (aflist->command) { if (flist && (!aflist->command || *aflist->command == *flist->command)) { if (aflist->command) sprintf(out, "#define FLAG_%c (1<<%d)\n", *aflist->command, bit); - bit++; flist = flist->next; - } else sprintf(out, "#define FLAG_%c 0\n", *aflist->command); + } else sprintf(out, "#define FLAG_%c (FORCED_FLAG<<%d)\n", + *aflist->command, bit); + bit++; aflist = aflist->next; } out += strlen(out); } - sprintf(out, "#endif\n\n"); - out += strlen(out); + out = stpcpy(out, "#endif\n\n"); } if (fflush(0) && ferror(stdout)) return 1; diff -r 556d8cbfeb08 -r 5fac2769a159 toys.h --- a/toys.h Wed Dec 31 21:23:37 2014 -0600 +++ b/toys.h Wed Dec 31 21:30:59 2014 -0600 @@ -73,9 +73,8 @@ // Get list of function prototypes for all enabled command_main() functions. #define NEWTOY(name, opts, flags) void name##_main(void); -#define OLDTOY(name, oldname, opts, flags) void oldname##_main(void); +#define OLDTOY(name, oldname, flags) void oldname##_main(void); #include "generated/newtoys.h" -#include "generated/oldtoys.h" #include "generated/flags.h" #include "generated/globals.h" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/other/dos2unix.c --- a/toys/other/dos2unix.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/other/dos2unix.c Wed Dec 31 21:30:59 2014 -0600 @@ -3,7 +3,7 @@ * Copyright 2012 Rob Landley USE_DOS2UNIX(NEWTOY(dos2unix, NULL, TOYFLAG_BIN)) -USE_DOS2UNIX(OLDTOY(unix2dos, dos2unix, NULL, TOYFLAG_BIN)) +USE_DOS2UNIX(OLDTOY(unix2dos, dos2unix, TOYFLAG_BIN)) config DOS2UNIX bool "dos2unix/unix2dos" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/other/nbd_client.c --- a/toys/other/nbd_client.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/other/nbd_client.c Wed Dec 31 21:30:59 2014 -0600 @@ -8,7 +8,7 @@ // things like prototype "nbd-client_main" which isn't a valid symbol. So // we hide the underscore name and OLDTOY the name we want. USE_NBD_CLIENT(NEWTOY(nbd_client, "<3>3ns", 0)) -USE_NBD_CLIENT(OLDTOY(nbd-client, nbd_client, OPTSTR_nbd_client, TOYFLAG_USR|TOYFLAG_BIN)) +USE_NBD_CLIENT(OLDTOY(nbd-client, nbd_client, TOYFLAG_USR|TOYFLAG_BIN)) config NBD_CLIENT bool "nbd-client" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/other/netcat.c --- a/toys/other/netcat.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/other/netcat.c Wed Dec 31 21:30:59 2014 -0600 @@ -4,7 +4,7 @@ * * TODO: udp, ipv6, genericize for telnet/microcom/tail-f -USE_NETCAT(OLDTOY(nc, netcat, USE_NETCAT_LISTEN("tl^L^")"w#p#s:q#f:", TOYFLAG_BIN)) +USE_NETCAT(OLDTOY(nc, netcat, TOYFLAG_BIN)) USE_NETCAT(NEWTOY(netcat, USE_NETCAT_LISTEN("tl^L^")"w#p#s:q#f:", TOYFLAG_BIN)) config NETCAT diff -r 556d8cbfeb08 -r 5fac2769a159 toys/other/reboot.c --- a/toys/other/reboot.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/other/reboot.c Wed Dec 31 21:30:59 2014 -0600 @@ -3,8 +3,8 @@ * Copyright 2013 Elie De Brauwer USE_REBOOT(NEWTOY(reboot, "n", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) -USE_REBOOT(OLDTOY(halt, reboot, "n", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) -USE_REBOOT(OLDTOY(poweroff, reboot, "n", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_BIN|TOYFLAG_NEEDROOT)) config REBOOT bool "reboot" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/ftpget.c --- a/toys/pending/ftpget.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/ftpget.c Wed Dec 31 21:30:59 2014 -0600 @@ -6,7 +6,7 @@ * No Standard. * USE_FTPGET(NEWTOY(ftpget, "<2cvu:p:P#<0=21>65535", TOYFLAG_BIN)) -USE_FTPGET(OLDTOY(ftpput,ftpget, "<2vu:p:P#<0=21>65535", TOYFLAG_BIN)) +USE_FTPGET(OLDTOY(ftpput, ftpget, TOYFLAG_BIN)) config FTPGET bool "ftpget/ftpput" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/groupadd.c --- a/toys/pending/groupadd.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/groupadd.c Wed Dec 31 21:30:59 2014 -0600 @@ -6,7 +6,7 @@ * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/groupadd.html USE_GROUPADD(NEWTOY(groupadd, "<1>2g#<0S", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) -USE_GROUPADD(OLDTOY(addgroup, groupadd, OPTSTR_groupadd, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPADD(OLDTOY(addgroup, groupadd, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) config GROUPADD bool "groupadd" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/groupdel.c --- a/toys/pending/groupdel.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/groupdel.c Wed Dec 31 21:30:59 2014 -0600 @@ -6,7 +6,7 @@ * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/groupdel.html USE_GROUPDEL(NEWTOY(groupdel, "<1>2", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) -USE_GROUPDEL(OLDTOY(delgroup, groupdel, OPTSTR_groupdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPDEL(OLDTOY(delgroup, groupdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) config GROUPDEL bool "groupdel" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/ip.c --- a/toys/pending/ip.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/ip.c Wed Dec 31 21:30:59 2014 -0600 @@ -8,11 +8,11 @@ * No Standard. * USE_IP(NEWTOY(ip, NULL, TOYFLAG_SBIN)) -USE_IP(OLDTOY(ipaddr, ip, NULL, TOYFLAG_SBIN)) -USE_IP(OLDTOY(iplink, ip, NULL, TOYFLAG_SBIN)) -USE_IP(OLDTOY(iproute, ip, NULL, TOYFLAG_SBIN)) -USE_IP(OLDTOY(iprule, ip, NULL, TOYFLAG_SBIN)) -USE_IP(OLDTOY(iptunnel, ip, NULL, TOYFLAG_SBIN)) +USE_IP(OLDTOY(ipaddr, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iplink, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iproute, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iprule, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iptunnel, ip, TOYFLAG_SBIN)) config IP bool "ip" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/pgrep.c --- a/toys/pending/pgrep.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/pgrep.c Wed Dec 31 21:30:59 2014 -0600 @@ -5,7 +5,7 @@ * USE_PGREP(NEWTOY(pgrep, "?P# s# xvonlf[!sP]", TOYFLAG_USR|TOYFLAG_BIN)) -USE_PGREP(OLDTOY(pkill, pgrep, OPTSTR_pgrep, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PGREP(OLDTOY(pkill, pgrep, TOYFLAG_USR|TOYFLAG_BIN)) config PGREP bool "pgrep" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/sh.c --- a/toys/pending/sh.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/sh.c Wed Dec 31 21:30:59 2014 -0600 @@ -25,7 +25,7 @@ USE_SH(NEWTOY(exit, NULL, TOYFLAG_NOFORK)) USE_SH(NEWTOY(sh, "c:"USE_SH_INTERACTIVE("i"), TOYFLAG_BIN)) -USE_SH(OLDTOY(toysh, sh, OPTSTR_sh, TOYFLAG_BIN)) +USE_SH(OLDTOY(toysh, sh, TOYFLAG_BIN)) config SH bool "sh (toysh)" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/tcpsvd.c --- a/toys/pending/tcpsvd.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/tcpsvd.c Wed Dec 31 21:30:59 2014 -0600 @@ -7,7 +7,7 @@ * No Standard. USE_TCPSVD(NEWTOY(tcpsvd, "^<3c#=30<1C:b#=20<0u:l:hEv", TOYFLAG_USR|TOYFLAG_BIN)) -USE_TCPSVD(OLDTOY(udpsvd, tcpsvd, OPTSTR_tcpsvd, TOYFLAG_USR|TOYFLAG_BIN)) +USE_TCPSVD(OLDTOY(udpsvd, tcpsvd, TOYFLAG_USR|TOYFLAG_BIN)) config TCPSVD bool "tcpsvd" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/traceroute.c --- a/toys/pending/traceroute.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/traceroute.c Wed Dec 31 21:30:59 2014 -0600 @@ -8,7 +8,7 @@ * No Standard USE_TRACEROUTE(NEWTOY(traceroute, "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) -USE_TRACEROUTE(OLDTOY(traceroute6,traceroute, OPTSTR_traceroute, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(OLDTOY(traceroute6,traceroute, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) config TRACEROUTE bool "traceroute" default n diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/useradd.c --- a/toys/pending/useradd.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/useradd.c Wed Dec 31 21:30:59 2014 -0600 @@ -6,7 +6,7 @@ * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/useradd.html USE_USERADD(NEWTOY(useradd, "<1>2u#<0G:s:g:h:SDH", TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) -USE_USERADD(OLDTOY(adduser, useradd, OPTSTR_useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_USERADD(OLDTOY(adduser, useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) config USERADD bool "useradd" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/pending/userdel.c --- a/toys/pending/userdel.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/pending/userdel.c Wed Dec 31 21:30:59 2014 -0600 @@ -5,7 +5,7 @@ * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/userdel.html USE_USERDEL(NEWTOY(userdel, "<1>1r", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) -USE_USERDEL(OLDTOY(deluser, userdel, OPTSTR_userdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERDEL(OLDTOY(deluser, userdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) config USERDEL bool "userdel" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/posix/chgrp.c --- a/toys/posix/chgrp.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/posix/chgrp.c Wed Dec 31 21:30:59 2014 -0600 @@ -8,7 +8,7 @@ * TODO: group only one of [HLP] USE_CHGRP(NEWTOY(chgrp, "<2hPLHRfv", TOYFLAG_BIN)) -USE_CHGRP(OLDTOY(chown, chgrp, OPTSTR_chgrp, TOYFLAG_BIN)) +USE_CHGRP(OLDTOY(chown, chgrp, TOYFLAG_BIN)) config CHGRP bool "chgrp/chown" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/posix/grep.c --- a/toys/posix/grep.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/posix/grep.c Wed Dec 31 21:30:59 2014 -0600 @@ -5,8 +5,8 @@ * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html USE_GREP(NEWTOY(grep, "ZzEFHabhinorsvwclqe*f*m#x[!wx][!EFw]", TOYFLAG_BIN)) -USE_GREP(OLDTOY(egrep, grep, OPTSTR_grep, TOYFLAG_BIN)) -USE_GREP(OLDTOY(fgrep, grep, OPTSTR_grep, TOYFLAG_BIN)) +USE_GREP(OLDTOY(egrep, grep, TOYFLAG_BIN)) +USE_GREP(OLDTOY(fgrep, grep, TOYFLAG_BIN)) config GREP bool "grep" diff -r 556d8cbfeb08 -r 5fac2769a159 toys/posix/id.c --- a/toys/posix/id.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/posix/id.c Wed Dec 31 21:30:59 2014 -0600 @@ -7,9 +7,9 @@ * See http://opengroup.org/onlinepubs/9699919799/utilities/id.html USE_ID(NEWTOY(id, ">1nGgru[!Ggu]", TOYFLAG_BIN)) -USE_GROUPS(OLDTOY(groups, id, NULL, TOYFLAG_USR|TOYFLAG_BIN)) -USE_LOGNAME(OLDTOY(logname, id, ">0", TOYFLAG_BIN)) -USE_WHOAMI(OLDTOY(whoami, id, ">0", TOYFLAG_BIN)) +USE_GROUPS(NEWTOY(groups, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_BIN)) +USE_WHOAMI(OLDTOY(whoami, logname, TOYFLAG_BIN)) config ID bool "id" @@ -133,15 +133,23 @@ void id_main(void) { // FLAG macros can be 0 if "id" command not enabled, so snapshot them here. - if (FLAG_u) TT.do_u = toys.optflags & FLAG_u; - if (FLAG_n) TT.do_n = toys.optflags & FLAG_n; - if (FLAG_G) TT.do_G = toys.optflags & FLAG_G; - - // And set the variables for non-id commands. - TT.is_groups = toys.which->name[0] == 'g'; - if (TT.is_groups) TT.do_G = TT.do_n = 1; - else if (toys.which->name[0] != 'i') TT.do_u = TT.do_n = 1; + if (FLAG_u) TT.do_u |= toys.optflags & FLAG_u; + if (FLAG_n) TT.do_n |= toys.optflags & FLAG_n; + if (FLAG_G) TT.do_G |= toys.optflags & FLAG_G; if (toys.optc) while(*toys.optargs) do_id(*toys.optargs++); else do_id(NULL); } + +void groups_main(void) +{ + TT.is_groups = 1; + TT.do_G = TT.do_n = 1; + id_main(); +} + +void logname_main(void) +{ + TT.do_u = TT.do_n = 1; + id_main(); +} diff -r 556d8cbfeb08 -r 5fac2769a159 toys/posix/true.c --- a/toys/posix/true.c Wed Dec 31 21:23:37 2014 -0600 +++ b/toys/posix/true.c Wed Dec 31 21:30:59 2014 -0600 @@ -5,7 +5,7 @@ * See http://opengroup.org/onlinepubs/9699919799/utilities/true.html USE_TRUE(NEWTOY(true, NULL, TOYFLAG_BIN)) -USE_TRUE(OLDTOY(:, true, 0, TOYFLAG_NOFORK)) +USE_TRUE(OLDTOY(:, true, TOYFLAG_NOFORK)) config TRUE bool "true"