svn commit: trunk/busybox: include miscutils

vda at busybox.net vda at busybox.net
Thu Mar 27 13:14:29 UTC 2008


Author: vda
Date: 2008-03-27 06:14:29 -0700 (Thu, 27 Mar 2008)
New Revision: 21515

Log:
fbsplash: support this usage:

mkfifo cmd_pipe
fbsplash -f cmd_pipe .... &
...
echo 33 >cmd_pipe
...
echo 66 >cmd_pipe

Code size: fbsplash_main +116 bytes :(



Modified:
   trunk/busybox/include/usage.h
   trunk/busybox/miscutils/Config.in
   trunk/busybox/miscutils/fbsplash.c


Changeset:
Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2008-03-27 13:00:31 UTC (rev 21514)
+++ trunk/busybox/include/usage.h	2008-03-27 13:14:29 UTC (rev 21515)
@@ -133,8 +133,6 @@
      "\n	-f	Control pipe (else exit after drawing image)" \
      "\n			commands: 'NN' (% for progress bar) or 'exit'" \
 
-
-
 #define brctl_trivial_usage \
        "COMMAND [BRIDGE [INTERFACE]]"
 #define brctl_full_usage \

Modified: trunk/busybox/miscutils/Config.in
===================================================================
--- trunk/busybox/miscutils/Config.in	2008-03-27 13:00:31 UTC (rev 21514)
+++ trunk/busybox/miscutils/Config.in	2008-03-27 13:14:29 UTC (rev 21515)
@@ -214,13 +214,13 @@
 	    -c: hide cursor
 	    -d /dev/fbN: framebuffer device (if not /dev/fb0)
 	    -s path_to_image_file (can be "-" for stdin)
-	    -i path_to_cfg_file
+	    -i path_to_cfg_file (can be "-" for stdin)
 	    -f path_to_fifo (can be "-" for stdin)
 	  - if you want to run it only in presence of kernel parameter:
 	    grep -q "fbsplash=on" </proc/cmdline && setsid fbsplash [params] &
 	  - commands for fifo:
 	    "NN" (ASCII decimal number) - percentage to show on progress bar
-	    "exit" (or just close fifo) - well you guessed it
+	    "exit" - well you guessed it
 
 config LAST
 	bool "last"

Modified: trunk/busybox/miscutils/fbsplash.c
===================================================================
--- trunk/busybox/miscutils/fbsplash.c	2008-03-27 13:00:31 UTC (rev 21514)
+++ trunk/busybox/miscutils/fbsplash.c	2008-03-27 13:14:29 UTC (rev 21515)
@@ -394,7 +394,8 @@
 
 	fb_drawimage();
 
-	if (fifo_filename) {
+	if (fifo_filename) while (1) {
+		struct stat statbuf;
 		unsigned num;
 		char *num_buf;
 
@@ -402,11 +403,16 @@
 		// Block on read, waiting for some input.
 		// Use of <stdio.h> style I/O allows to correctly
 		// handle a case when we have many buffered lines
-		// already in the pipe.
+		// already in the pipe
 		while ((num_buf = xmalloc_fgetline(fp)) != NULL) {
 			if (strncmp(num_buf, "exit", 4) == 0) {
 				DEBUG_MESSAGE("exit");
-				break;
+ exit_cmd:
+				if (bCursorOff) {
+					// restore cursor
+					full_write(STDOUT_FILENO, "\x1b" "[?25h", 6);
+				}
+				return EXIT_SUCCESS;
 			}
 			num = atoi(num_buf);
 			if (isdigit(num_buf[0]) && (num <= 100)) {
@@ -419,13 +425,28 @@
 			}
 			free(num_buf);
 		}
-		if (bCursorOff) {
-			// restore cursor
-			full_write(STDOUT_FILENO, "\x1b" "[?25h", 6);
+		// We got EOF/error on fp
+		if (ferror(fp))
+			goto exit_cmd;
+		fclose(fp);
+		if (LONE_DASH(fifo_filename)
+		 || stat(fifo_filename, &statbuf) != 0
+		 || !S_ISFIFO(statbuf.st_mode)
+		) {
+			goto exit_cmd;
 		}
-		if (ENABLE_FEATURE_CLEAN_UP)
-			fclose(fp);
-	}
+		// It's really a named pipe!
+		// For named pipes, we want to support this:
+		//  mkfifo cmd_pipe
+		//  fbsplash -f cmd_pipe .... &
+		//  ...
+		//  echo 33 >cmd_pipe
+		//  ...
+		//  echo 66 >cmd_pipe
+		// This means that on EOF, we need to close/open cmd_pipe
+		// (just reading again works too, but it hogs CPU)
+		fp = xfopen_stdin(fifo_filename); // blocks on open
+	} // end of while (1)
 
 	return EXIT_SUCCESS;
 }




More information about the busybox-cvs mailing list