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 :(
This commit is contained in:
		@@ -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 \
 | 
			
		||||
 
 | 
			
		||||
@@ -214,13 +214,13 @@ config FBSPLASH
 | 
			
		||||
	    -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -394,7 +394,8 @@ int fbsplash_main(int argc ATTRIBUTE_UNUSED, char **argv)
 | 
			
		||||
 | 
			
		||||
	fb_drawimage();
 | 
			
		||||
 | 
			
		||||
	if (fifo_filename) {
 | 
			
		||||
	if (fifo_filename) while (1) {
 | 
			
		||||
		struct stat statbuf;
 | 
			
		||||
		unsigned num;
 | 
			
		||||
		char *num_buf;
 | 
			
		||||
 | 
			
		||||
@@ -402,11 +403,16 @@ int fbsplash_main(int argc ATTRIBUTE_UNUSED, char **argv)
 | 
			
		||||
		// 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 @@ int fbsplash_main(int argc ATTRIBUTE_UNUSED, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
			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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user