time: implement -a, -o FILE
function old new delta time_main 1052 1076 +24 packed_usage 31571 31577 +6 Signed-off-by: Tommi Rantala <tommi.t.rantala@nokia.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							854174f7dd
						
					
				
				
					commit
					5fe5be210c
				
			@@ -21,11 +21,13 @@
 | 
			
		||||
//kbuild:lib-$(CONFIG_TIME) += time.o
 | 
			
		||||
 | 
			
		||||
//usage:#define time_trivial_usage
 | 
			
		||||
//usage:       "[-vp] PROG ARGS"
 | 
			
		||||
//usage:       "[-vpa] [-o FILE] PROG ARGS"
 | 
			
		||||
//usage:#define time_full_usage "\n\n"
 | 
			
		||||
//usage:       "Run PROG, display resource usage when it exits\n"
 | 
			
		||||
//usage:     "\n	-v	Verbose"
 | 
			
		||||
//usage:     "\n	-p	POSIX output format"
 | 
			
		||||
//usage:     "\n	-o FILE	Write result to FILE"
 | 
			
		||||
//usage:     "\n	-a	Append (else overwrite)"
 | 
			
		||||
 | 
			
		||||
#include "libbb.h"
 | 
			
		||||
#include <sys/resource.h> /* getrusage */
 | 
			
		||||
@@ -414,28 +416,47 @@ int time_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	resource_t res;
 | 
			
		||||
	const char *output_format = default_format;
 | 
			
		||||
	char *output_filename;
 | 
			
		||||
	int output_fd;
 | 
			
		||||
	int opt;
 | 
			
		||||
	int ex;
 | 
			
		||||
	enum {
 | 
			
		||||
		OPT_v = (1 << 0),
 | 
			
		||||
		OPT_p = (1 << 1),
 | 
			
		||||
		OPT_a = (1 << 2),
 | 
			
		||||
		OPT_o = (1 << 3),
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	opt_complementary = "-1"; /* at least one arg */
 | 
			
		||||
	/* "+": stop on first non-option */
 | 
			
		||||
	opt = getopt32(argv, "+vp");
 | 
			
		||||
	opt = getopt32(argv, "+vpao:", &output_filename);
 | 
			
		||||
	argv += optind;
 | 
			
		||||
	if (opt & 1)
 | 
			
		||||
	if (opt & OPT_v)
 | 
			
		||||
		output_format = long_format;
 | 
			
		||||
	if (opt & 2)
 | 
			
		||||
	if (opt & OPT_p)
 | 
			
		||||
		output_format = posix_format;
 | 
			
		||||
	output_fd = STDERR_FILENO;
 | 
			
		||||
	if (opt & OPT_o) {
 | 
			
		||||
		output_fd = xopen(output_filename,
 | 
			
		||||
			(opt & OPT_a) /* append? */
 | 
			
		||||
			? (O_CREAT | O_WRONLY | O_CLOEXEC | O_APPEND)
 | 
			
		||||
			: (O_CREAT | O_WRONLY | O_CLOEXEC | O_TRUNC)
 | 
			
		||||
		);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	run_command(argv, &res);
 | 
			
		||||
 | 
			
		||||
	/* Cheat. printf's are shorter :) */
 | 
			
		||||
	xdup2(STDERR_FILENO, STDOUT_FILENO);
 | 
			
		||||
	xdup2(output_fd, STDOUT_FILENO);
 | 
			
		||||
	summarize(output_format, argv, &res);
 | 
			
		||||
 | 
			
		||||
	ex = WEXITSTATUS(res.waitstatus);
 | 
			
		||||
	/* Impossible: we do not use WUNTRACED flag in wait()...
 | 
			
		||||
	if (WIFSTOPPED(res.waitstatus))
 | 
			
		||||
		return WSTOPSIG(res.waitstatus);
 | 
			
		||||
		ex = WSTOPSIG(res.waitstatus);
 | 
			
		||||
	*/
 | 
			
		||||
	if (WIFSIGNALED(res.waitstatus))
 | 
			
		||||
		return WTERMSIG(res.waitstatus);
 | 
			
		||||
	if (WIFEXITED(res.waitstatus))
 | 
			
		||||
		return WEXITSTATUS(res.waitstatus);
 | 
			
		||||
	fflush_stdout_and_exit(EXIT_SUCCESS);
 | 
			
		||||
		ex = WTERMSIG(res.waitstatus);
 | 
			
		||||
 | 
			
		||||
	fflush_stdout_and_exit(ex);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user