svn commit: trunk/busybox/shell

vda at busybox.net vda at busybox.net
Wed May 2 14:40:23 PDT 2007


Author: vda
Date: 2007-05-02 14:40:23 -0700 (Wed, 02 May 2007)
New Revision: 18543

Log:
hush: simplify debugging prints a little bit


Modified:
   trunk/busybox/shell/hush.c


Changeset:
Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c	2007-05-02 21:39:29 UTC (rev 18542)
+++ trunk/busybox/shell/hush.c	2007-05-02 21:40:23 UTC (rev 18543)
@@ -80,13 +80,38 @@
 #include "busybox.h"
 #include <glob.h>      /* glob, of course */
 #include <getopt.h>    /* should be pretty obvious */
-
 /* #include <dmalloc.h> */
-//#define DEBUG_SHELL
+
+
+/* If you comment out one of these below, it will be #defined later
+ * to perform debug printfs to stderr: */
+#define debug_printf(...)      do {} while (0)
 /* Finer-grained debug switch */
-//#define DEBUG_SHELL_JOBS
-//#define DEBUG_SHELL_EXECUTION
+#define debug_printf_jobs(...) do {} while (0)
+#define debug_printf_exec(...) do {} while (0)
 
+
+#ifndef debug_printf
+#define debug_printf(...) fprintf(stderr, __VA_ARGS__)
+/* broken, of course, but OK for testing */
+static const char *indenter(int i)
+{
+	static const char blanks[] = "                                    ";
+	return &blanks[sizeof(blanks) - i - 1];
+}
+#endif
+#define final_printf debug_printf
+
+#ifndef debug_printf_jobs
+#define debug_printf_jobs(...) fprintf(stderr, __VA_ARGS__)
+#define DEBUG_SHELL_JOBS 1
+#endif
+
+#ifndef debug_printf_exec
+#define debug_printf_exec(...) fprintf(stderr, __VA_ARGS__)
+#endif
+
+
 #if !ENABLE_HUSH_INTERACTIVE
 #undef ENABLE_FEATURE_EDITING
 #define ENABLE_FEATURE_EDITING 0
@@ -298,32 +323,6 @@
 	int (*function) (char **argv);  /* function ptr */
 };
 
-#ifdef DEBUG_SHELL
-#define debug_printf(...) fprintf(stderr, __VA_ARGS__)
-/* broken, of course, but OK for testing */
-static char *indenter(int i)
-{
-	static char blanks[] = "                                    ";
-	return &blanks[sizeof(blanks) - i - 1];
-}
-#else
-#define debug_printf(...) do {} while (0)
-#endif
-
-#ifdef DEBUG_SHELL_JOBS
-#define debug_jobs_printf(...) fprintf(stderr, __VA_ARGS__)
-#else
-#define debug_jobs_printf(...) do {} while (0)
-#endif
-
-#ifdef DEBUG_SHELL_EXECUTION
-#define debug_exec_printf(...) fprintf(stderr, __VA_ARGS__)
-#else
-#define debug_exec_printf(...) do {} while (0)
-#endif
-
-#define final_printf debug_printf
-
 static void __syntax(int line)
 {
 	bb_error_msg("syntax error hush.c:%d", line);
@@ -514,7 +513,7 @@
 
 static void handler_ctrl_c(int sig)
 {
-	debug_jobs_printf("got sig %d\n", sig);
+	debug_printf_jobs("got sig %d\n", sig);
 // as usual we can have all kinds of nasty problems with leaked malloc data here
 	siglongjmp(nofork_jb, 1);
 }
@@ -523,20 +522,20 @@
 {
 	pid_t pid;
 
-	debug_jobs_printf("got tty sig %d\n", sig);
+	debug_printf_jobs("got tty sig %d\n", sig);
 	pid = fork();
 	if (pid < 0) /* can't fork. Pretend there were no Ctrl-Z */
 		return;
-	debug_jobs_printf("bg'ing nofork\n");
+	debug_printf_jobs("bg'ing nofork\n");
 	nofork_save.saved = 0; /* flag the fact that Ctrl-Z was handled */
 	nofork_pipe->running_progs = 1;
 	nofork_pipe->stopped_progs = 0;
 	if (!pid) { /* child */
-		debug_jobs_printf("setting pgrp for child\n");
+		debug_printf_jobs("setting pgrp for child\n");
 		setpgrp();
 		set_every_sighandler(SIG_DFL);
 		raise(SIGTSTP); /* resend TSTP so that child will be stopped */
-		debug_jobs_printf("returning to child\n");
+		debug_printf_jobs("returning to child\n");
 		/* return to nofork, it will eventually exit now,
 		 * not return back to shell */
 		return;
@@ -766,9 +765,9 @@
 	}
 
 	/* Restart the processes in the job */
-	debug_jobs_printf("reviving %d procs, pgrp %d\n", pi->num_progs, pi->pgrp);
+	debug_printf_jobs("reviving %d procs, pgrp %d\n", pi->num_progs, pi->pgrp);
 	for (i = 0; i < pi->num_progs; i++) {
-		debug_jobs_printf("reviving pid %d\n", pi->progs[i].pid);
+		debug_printf_jobs("reviving pid %d\n", pi->progs[i].pid);
 		pi->progs[i].is_stopped = 0;
 	}
 	pi->stopped_progs = 0;
@@ -1333,7 +1332,7 @@
 #if ENABLE_HUSH_INTERACTIVE
 		interactive_fd = 0;    /* crucial!!!! */
 #endif
-		debug_exec_printf("pseudo_exec: run_list_real\n");
+		debug_printf_exec("pseudo_exec: run_list_real\n");
 		rcode = run_list_real(child->group);
 		/* OK to leak memory by not calling free_pipe_list,
 		 * since this process is about to exit */
@@ -1478,20 +1477,20 @@
 
 #ifdef DEBUG_SHELL_JOBS
 		if (WIFSTOPPED(status))
-			debug_jobs_printf("pid %d stopped by sig %d (exitcode %d)\n",
+			debug_printf_jobs("pid %d stopped by sig %d (exitcode %d)\n",
 					childpid, WSTOPSIG(status), WEXITSTATUS(status));
 		if (WIFSIGNALED(status))
-			debug_jobs_printf("pid %d killed by sig %d (exitcode %d)\n",
+			debug_printf_jobs("pid %d killed by sig %d (exitcode %d)\n",
 					childpid, WTERMSIG(status), WEXITSTATUS(status));
 		if (WIFEXITED(status))
-			debug_jobs_printf("pid %d exited, exitcode %d\n",
+			debug_printf_jobs("pid %d exited, exitcode %d\n",
 					childpid, WEXITSTATUS(status));
 #endif
 		/* Were we asked to wait for fg pipe? */
 		if (fg_pipe) {
 			int i;
 			for (i = 0; i < fg_pipe->num_progs; i++) {
-				debug_jobs_printf("check pid %d\n", fg_pipe->progs[i].pid);
+				debug_printf_jobs("check pid %d\n", fg_pipe->progs[i].pid);
 				if (fg_pipe->progs[i].pid == childpid) {
 					/* printf("process %d exit %d\n", i, WEXITSTATUS(status)); */
 					if (dead) {
@@ -1504,7 +1503,7 @@
 						fg_pipe->progs[i].is_stopped = 1;
 						fg_pipe->stopped_progs++;
 					}
-					debug_jobs_printf("fg_pipe: running_progs %d stopped_progs %d\n",
+					debug_printf_jobs("fg_pipe: running_progs %d stopped_progs %d\n",
 							fg_pipe->running_progs, fg_pipe->stopped_progs);
 					if (fg_pipe->running_progs - fg_pipe->stopped_progs <= 0) {
 						/* All processes in fg pipe have exited/stopped */
@@ -1606,7 +1605,7 @@
 	 * Sighandler has longjmped us here */
 	signal(SIGINT, SIG_IGN);
 	signal(SIGTSTP, SIG_IGN);
-	debug_jobs_printf("Exiting nofork early\n");
+	debug_printf_jobs("Exiting nofork early\n");
 	restore_nofork_data(&nofork_save);
 	if (nofork_save.saved == 0) /* Ctrl-Z, not Ctrl-C */
 		insert_bg_job(pi);
@@ -1648,7 +1647,7 @@
 	int rcode;
 	const int single_fg = (pi->num_progs == 1 && pi->followup != PIPE_BG);
 
-	debug_exec_printf("run_pipe_real start:\n");
+	debug_printf_exec("run_pipe_real start:\n");
 
 	nextin = 0;
 #if ENABLE_HUSH_JOB
@@ -1667,10 +1666,10 @@
 		setup_redirects(child, squirrel);
 		/* XXX could we merge code with following builtin case,
 		 * by creating a pseudo builtin that calls run_list_real? */
-		debug_exec_printf(": run_list_real\n");
+		debug_printf_exec(": run_list_real\n");
 		rcode = run_list_real(child->group);
 		restore_redirects(squirrel);
-		debug_exec_printf("run_pipe_real return %d\n", rcode);
+		debug_printf_exec("run_pipe_real return %d\n", rcode);
 		return rcode;
 	}
 
@@ -1718,10 +1717,10 @@
 			char *str;
 
 			str = make_string(argv + i);
-			debug_exec_printf(": parse_string_outer '%s'\n", str);
+			debug_printf_exec(": parse_string_outer '%s'\n", str);
 			parse_string_outer(str, FLAG_EXIT_FROM_LOOP | FLAG_REPARSING);
 			free(str);
-			debug_exec_printf("run_pipe_real return %d\n", last_return_code);
+			debug_printf_exec("run_pipe_real return %d\n", last_return_code);
 			return last_return_code;
 		}
 		for (x = bltins; x->cmd; x++) {
@@ -1738,10 +1737,10 @@
 				 * things seem to work with glibc. */
 // TODO: fflush(NULL)?
 				setup_redirects(child, squirrel);
-				debug_exec_printf(": builtin '%s' '%s'...\n", x->cmd, argv[i+1]);
+				debug_printf_exec(": builtin '%s' '%s'...\n", x->cmd, argv[i+1]);
 				rcode = x->function(argv + i);
 				restore_redirects(squirrel);
-				debug_exec_printf("run_pipe_real return %d\n", rcode);
+				debug_printf_exec("run_pipe_real return %d\n", rcode);
 				return rcode;
 			}
 		}
@@ -1750,10 +1749,10 @@
 			const struct bb_applet *a = find_applet_by_name(argv[i]);
 			if (a && a->nofork) {
 				setup_redirects(child, squirrel);
-				debug_exec_printf(": run_single_fg_nofork '%s' '%s'...\n", argv[i], argv[i+1]);
+				debug_printf_exec(": run_single_fg_nofork '%s' '%s'...\n", argv[i], argv[i+1]);
 				rcode = run_single_fg_nofork(pi, a, argv + i);
 				restore_redirects(squirrel);
-				debug_exec_printf("run_pipe_real return %d\n", rcode);
+				debug_printf_exec("run_pipe_real return %d\n", rcode);
 				return rcode;
 			}
 		}
@@ -1768,7 +1767,7 @@
 
 	for (i = 0; i < pi->num_progs; i++) {
 		child = &(pi->progs[i]);
-		debug_exec_printf(": pipe member '%s' '%s'...\n", child->argv[0], child->argv[1]);
+		debug_printf_exec(": pipe member '%s' '%s'...\n", child->argv[0], child->argv[1]);
 
 		/* pipes are inserted between pairs of commands */
 		if ((i + 1) < pi->num_progs) {
@@ -1849,7 +1848,7 @@
 		   but it doesn't matter */
 		nextin = pipefds[0];
 	}
-	debug_exec_printf("run_pipe_real return -1\n");
+	debug_printf_exec("run_pipe_real return -1\n");
 	return -1;
 }
 
@@ -1866,7 +1865,7 @@
 	int if_code = 0, next_if_code = 0;  /* need double-buffer to handle elif */
 	reserved_style rmode, skip_more_in_this_rmode = RES_XXXX;
 
-	debug_exec_printf("run_list_real start:\n");
+	debug_printf_exec("run_list_real start:\n");
 
 	/* check syntax for "for" */
 	for (rpipe = pi; rpipe; rpipe = rpipe->next) {
@@ -1874,14 +1873,14 @@
 		 && (rpipe->next == NULL)
 		) {
 			syntax();
-			debug_exec_printf("run_list_real return 1\n");
+			debug_printf_exec("run_list_real return 1\n");
 			return 1;
 		}
 		if ((rpipe->r_mode == RES_IN &&	rpipe->next->r_mode == RES_IN && rpipe->next->progs->argv != NULL)
 		 || (rpipe->r_mode == RES_FOR && rpipe->next->r_mode != RES_IN)
 		) {
 			syntax();
-			debug_exec_printf("run_list_real return 1\n");
+			debug_printf_exec("run_list_real return 1\n");
 			return 1;
 		}
 	}
@@ -1957,7 +1956,7 @@
 		if (pi->num_progs == 0)
 			continue;
 		save_num_progs = pi->num_progs; /* save number of programs */
-		debug_exec_printf(": run_pipe_real with %d members\n", pi->num_progs);
+		debug_printf_exec(": run_pipe_real with %d members\n", pi->num_progs);
 		rcode = run_pipe_real(pi);
 		if (rcode != -1) {
 			/* We only ran a builtin: rcode was set by the return value
@@ -1996,7 +1995,7 @@
 		}
 		checkjobs(NULL);
 	}
-	debug_exec_printf("run_list_real return %d\n", rcode);
+	debug_printf_exec("run_list_real return %d\n", rcode);
 	return rcode;
 }
 
@@ -2072,7 +2071,7 @@
 {
 	int rcode = 0;
 	if (fake_mode == 0) {
-		debug_exec_printf("run_list: run_list_real with %d members\n", pi->num_progs);
+		debug_printf_exec("run_list: run_list_real with %d members\n", pi->num_progs);
 		rcode = run_list_real(pi);
 	}
 	/* free_pipe_list has the side effect of clearing memory
@@ -3132,7 +3131,7 @@
 		if (rcode != 1 && ctx.old_flag == 0) {
 			done_word(&temp, &ctx);
 			done_pipe(&ctx, PIPE_SEQ);
-			debug_exec_printf("parse_stream_outer: run_list\n");
+			debug_printf_exec("parse_stream_outer: run_list\n");
 			run_list(ctx.list_head);
 		} else {
 			if (ctx.old_flag != 0) {



More information about the busybox-cvs mailing list