From 60dd7c8a794ed9f460d8ae9d3a6bba8e32494325 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sun, 4 Aug 2019 16:17:37 -0500 Subject: Add TOYFLAG_MAYFORK and annotate a couple commands. A TOYFLAG_NOFORK command must run in the context of toysh, but a MAYFORK can either run standalone or run in the toysh process. MAYFORK means it cleans up after itself: no leaked resources (malloc, mmap, filehandles, etc), even in error_exit() paths that would longjmp() back to the shell. It also doesn't discard anything we need to retain (don't close stdout, change toys.optargs[] so we can't free it, etc)... --- lib/toyflags.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/toyflags.h b/lib/toyflags.h index 408c3ec6..b158ba88 100644 --- a/lib/toyflags.h +++ b/lib/toyflags.h @@ -15,21 +15,22 @@ // This is a shell built-in function, running in the same process context. #define TOYFLAG_NOFORK (1<<4) +#define TOYFLAG_MAYFORK (1<<5) // Start command with a umask of 0 (saves old umask in this.old_umask) -#define TOYFLAG_UMASK (1<<5) +#define TOYFLAG_UMASK (1<<6) // This command runs as root. -#define TOYFLAG_STAYROOT (1<<6) // Don't drop suid root before running cmd_main -#define TOYFLAG_NEEDROOT (1<<7) // Refuse to run if real uid != 0 +#define TOYFLAG_STAYROOT (1<<7) // Don't drop suid root before running cmd_main +#define TOYFLAG_NEEDROOT (1<<8) // Refuse to run if real uid != 0 #define TOYFLAG_ROOTONLY (TOYFLAG_STAYROOT|TOYFLAG_NEEDROOT) // Call setlocale to listen to environment variables. // This invalidates sprintf("%.*s", size, string) as a valid length constraint. -#define TOYFLAG_LOCALE (1<<8) +#define TOYFLAG_LOCALE (1<<9) // Suppress default --help processing -#define TOYFLAG_NOHELP (1<<9) +#define TOYFLAG_NOHELP (1<<10) // Error code to return if argument parsing fails (default 1) #define TOYFLAG_ARGFAIL(x) (x<<24) -- cgit v1.2.3