X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fsystem.c;h=345cc0732d6a836193e44cc2fb6b4c2855f91eaf;hb=cc40c57a37b1e443a5088fdda0fbb3687b1f4773;hp=ea884966ad78b8f2856ac61fb4671e211bc66cd6;hpb=0c6c288b5360fcdb7f9b5826d05c01ade33253f0;p=chaz%2Ftar diff --git a/src/system.c b/src/system.c index ea88496..345cc07 100644 --- a/src/system.c +++ b/src/system.c @@ -291,7 +291,7 @@ wait_for_grandchild (pid_t pid) { int wait_status; int exit_code = 0; - + while (waitpid (pid, &wait_status, 0) == -1) if (errno != EINTR) { @@ -303,7 +303,7 @@ wait_for_grandchild (pid_t pid) raise (WTERMSIG (wait_status)); else if (WEXITSTATUS (wait_status) != 0) exit_code = WEXITSTATUS (wait_status); - + exit (exit_code); } @@ -332,7 +332,7 @@ sys_child_open_for_compress (void) set_program_name (_("tar (child)")); signal (SIGPIPE, SIG_DFL); - + xdup2 (parent_pipe[PREAD], STDIN_FILENO); xclose (parent_pipe[PWRITE]); @@ -476,7 +476,7 @@ sys_child_open_for_uncompress (void) set_program_name (_("tar (child)")); signal (SIGPIPE, SIG_DFL); - + xdup2 (parent_pipe[PWRITE], STDOUT_FILENO); xclose (parent_pipe[PREAD]); @@ -575,7 +575,7 @@ sys_child_open_for_uncompress (void) static void -dec_to_env (char *envar, uintmax_t num) +dec_to_env (char const *envar, uintmax_t num) { char buf[UINTMAX_STRSIZE_BOUND]; char *numstr; @@ -586,7 +586,7 @@ dec_to_env (char *envar, uintmax_t num) } static void -time_to_env (char *envar, struct timespec t) +time_to_env (char const *envar, struct timespec t) { char buf[TIMESPEC_STRSIZE_BOUND]; if (setenv (envar, code_timespec (t, buf), 1) != 0) @@ -594,7 +594,7 @@ time_to_env (char *envar, struct timespec t) } static void -oct_to_env (char *envar, unsigned long num) +oct_to_env (char const *envar, unsigned long num) { char buf[1+1+(sizeof(unsigned long)*CHAR_BIT+2)/3]; @@ -604,7 +604,7 @@ oct_to_env (char *envar, unsigned long num) } static void -str_to_env (char *envar, char const *str) +str_to_env (char const *envar, char const *str) { if (str) { @@ -616,7 +616,7 @@ str_to_env (char *envar, char const *str) } static void -chr_to_env (char *envar, char c) +chr_to_env (char const *envar, char c) { char buf[2]; buf[0] = c; @@ -629,6 +629,12 @@ static void stat_to_env (char *name, char type, struct tar_stat_info *st) { str_to_env ("TAR_VERSION", PACKAGE_VERSION); + str_to_env ("TAR_ARCHIVE", *archive_name_cursor); + dec_to_env ("TAR_VOLUME", archive_name_cursor - archive_name_array + 1); + dec_to_env ("TAR_BLOCKING_FACTOR", blocking_factor); + str_to_env ("TAR_FORMAT", + archive_format_string (current_format == DEFAULT_FORMAT ? + archive_format : current_format)); chr_to_env ("TAR_FILETYPE", type); oct_to_env ("TAR_MODE", st->stat.st_mode); str_to_env ("TAR_FILENAME", name); @@ -744,7 +750,7 @@ sys_exec_info_script (const char **archive_name, int volume_number) char uintbuf[UINTMAX_STRSIZE_BOUND]; int p[2]; static RETSIGTYPE (*saved_handler) (int sig); - + xpipe (p); saved_handler = signal (SIGPIPE, SIG_IGN); @@ -777,7 +783,7 @@ sys_exec_info_script (const char **archive_name, int volume_number) } signal (SIGPIPE, saved_handler); - + if (WIFEXITED (status)) { if (WEXITSTATUS (status) == 0 && rc > 0) @@ -807,7 +813,7 @@ sys_exec_info_script (const char **archive_name, int volume_number) argv[0] = "/bin/sh"; argv[1] = "-c"; - argv[2] = (char*) info_script_option; + argv[2] = (char *) info_script_option; argv[3] = NULL; execv (argv[0], argv); @@ -854,7 +860,7 @@ sys_exec_checkpoint_script (const char *script_name, archive_format : current_format), 1); argv[0] = "/bin/sh"; argv[1] = "-c"; - argv[2] = (char*) script_name; + argv[2] = (char *) script_name; argv[3] = NULL; execv (argv[0], argv);