summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDenis Vlasenko2007-04-09 21:32:30 +0000
committerDenis Vlasenko2007-04-09 21:32:30 +0000
commitcd7001f7055c3fc2d6298ab9e3befe91e951c652 (patch)
treeb9509ed21e0a7af26128b796a66a3294ae4dc5b0 /include
parent1b4b2cb20e5291c319ce0c7721e64445e2749b10 (diff)
downloadbusybox-cd7001f7055c3fc2d6298ab9e3befe91e951c652.zip
busybox-cd7001f7055c3fc2d6298ab9e3befe91e951c652.tar.gz
factor out NOFORK/NOEXEC code from find. Use it for xargs too.
Diffstat (limited to 'include')
-rw-r--r--include/libbb.h35
1 files changed, 20 insertions, 15 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 4fc5d18..cec31a7 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -269,17 +269,6 @@ char *xrealloc_getcwd_or_warn(char *cwd);
char *xmalloc_readlink_or_warn(const char *path);
char *xmalloc_realpath(const char *path);
-/* Unlike waitpid, waits ONLY for one process,
- * It's safe to pass negative 'pids' from failed [v]fork -
- * wait4pid will return -1 and ECHILD in errno.
- * IOW: rc = wait4pid(spawn(argv));
- * if (rc < 0) bb_perror_msg("%s", argv[0]);
- * if (rc > 0) bb_error_msg("exit code: %d", rc);
- */
-extern int wait4pid(int pid);
-extern int wait_pid(int *wstat, int pid);
-extern int wait_nohang(int *wstat);
-//TODO: signal(sid, f) is the same? then why?
extern void sig_catch(int,void (*)(int));
//#define sig_ignore(s) (sig_catch((s), SIG_IGN))
//#define sig_uncatch(s) (sig_catch((s), SIG_DFL))
@@ -288,10 +277,6 @@ extern void sig_unblock(int);
/* UNUSED: extern void sig_blocknone(void); */
extern void sig_pause(void);
-#define wait_crashed(w) ((w) & 127)
-#define wait_exitcode(w) ((w) >> 8)
-#define wait_stopsig(w) ((w) >> 8)
-#define wait_stopped(w) (((w) & 127) == 127)
void xsetgid(gid_t gid);
@@ -528,6 +513,25 @@ int bb_execvp(const char *file, char *const argv[]);
/* NOMMU friendy fork+exec */
pid_t spawn(char **argv);
pid_t xspawn(char **argv);
+
+/* Unlike waitpid, waits ONLY for one process,
+ * It's safe to pass negative 'pids' from failed [v]fork -
+ * wait4pid will return -1 and ECHILD in errno.
+ * IOW: rc = wait4pid(spawn(argv));
+ * if (rc < 0) bb_perror_msg("%s", argv[0]);
+ * if (rc > 0) bb_error_msg("exit code: %d", rc);
+ */
+int wait_pid(int *wstat, int pid);
+int wait_nohang(int *wstat);
+int wait4pid(int pid);
+//TODO: signal(sid, f) is the same? then why?
+#define wait_crashed(w) ((w) & 127)
+#define wait_exitcode(w) ((w) >> 8)
+#define wait_stopsig(w) ((w) >> 8)
+#define wait_stopped(w) (((w) & 127) == 127)
+/* wait4pid(spawn(argv)) + NOFORK/NOEXEC (if configured) */
+int spawn_and_wait(char **argv);
+
/* Helpers for daemonization.
*
* bb_daemonize(flags) = daemonize, does not compile on NOMMU
@@ -573,6 +577,7 @@ void bb_daemonize_or_rexec(int flags, char **argv);
void bb_sanitize_stdio(void);
+// TODO: always error out?
enum { BB_GETOPT_ERROR = 0x80000000 };
extern const char *opt_complementary;
#if ENABLE_GETOPT_LONG