diff options
Diffstat (limited to 'tools/lib/subcmd/run-command.c')
| -rw-r--r-- | tools/lib/subcmd/run-command.c | 15 | 
1 files changed, 13 insertions, 2 deletions
| diff --git a/tools/lib/subcmd/run-command.c b/tools/lib/subcmd/run-command.c index 0a764c25c384..b7510f83209a 100644 --- a/tools/lib/subcmd/run-command.c +++ b/tools/lib/subcmd/run-command.c @@ -5,6 +5,7 @@  #include <ctype.h>  #include <fcntl.h>  #include <string.h> +#include <linux/compiler.h>  #include <linux/string.h>  #include <errno.h>  #include <sys/wait.h> @@ -216,10 +217,20 @@ static int wait_or_whine(struct child_process *cmd, bool block)  	return result;  } +/* + * Conservative estimate of number of characaters needed to hold an a decoded + * integer, assume each 3 bits needs a character byte and plus a possible sign + * character. + */ +#ifndef is_signed_type +#define is_signed_type(type) (((type)(-1)) < (type)1) +#endif +#define MAX_STRLEN_TYPE(type) (sizeof(type) * 8 / 3 + (is_signed_type(type) ? 1 : 0)) +  int check_if_command_finished(struct child_process *cmd)  {  #ifdef __linux__ -	char filename[FILENAME_MAX + 12]; +	char filename[6 + MAX_STRLEN_TYPE(typeof(cmd->pid)) + 7 + 1];  	char status_line[256];  	FILE *status_file; @@ -227,7 +238,7 @@ int check_if_command_finished(struct child_process *cmd)  	 * Check by reading /proc/<pid>/status as calling waitpid causes  	 * stdout/stderr to be closed and data lost.  	 */ -	sprintf(filename, "/proc/%d/status", cmd->pid); +	sprintf(filename, "/proc/%u/status", cmd->pid);  	status_file = fopen(filename, "r");  	if (status_file == NULL) {  		/* Open failed assume finish_command was called. */ | 
