From: Paul Eggert Date: Fri, 1 Nov 2024 16:40:36 +0000 (-0700) Subject: Check for setenv failures when running scripts X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6f5718a35f2be669848c624e99f862b1adacda16;p=thirdparty%2Ftar.git Check for setenv failures when running scripts * src/system.c (dec_to_env): Use umaxtostr for speed, since convenience isn’t needed here. (sys_exec_info_script, sys_exec_checkpoint_script): Check for setenv failure. --- diff --git a/src/system.c b/src/system.c index 7bebd355..0c668a9f 100644 --- a/src/system.c +++ b/src/system.c @@ -650,8 +650,7 @@ static void dec_to_env (char const *envar, uintmax_t num) { char numstr[UINTMAX_STRSIZE_BOUND]; - sprintf (numstr, "%ju", num); - if (setenv (envar, numstr, 1) != 0) + if (setenv (envar, umaxtostr (num, numstr), 1) != 0) xalloc_die (); } @@ -863,19 +862,15 @@ sys_exec_info_script (const char **archive_name, int volume_number) } /* Child */ - setenv ("TAR_VERSION", PACKAGE_VERSION, 1); - setenv ("TAR_ARCHIVE", *archive_name, 1); - char intbuf[INT_BUFSIZE_BOUND (intmax_t)]; - sprintf (intbuf, "%d", volume_number); - setenv ("TAR_VOLUME", intbuf, 1); - sprintf (intbuf, "%jd", blocking_factor); - setenv ("TAR_BLOCKING_FACTOR", intbuf, 1); + str_to_env ("TAR_VERSION", PACKAGE_VERSION); + str_to_env ("TAR_ARCHIVE", *archive_name); + dec_to_env ("TAR_VOLUME", volume_number); + dec_to_env ("TAR_BLOCKING_FACTOR", blocking_factor); setenv ("TAR_SUBCOMMAND", subcommand_string (subcommand_option), 1); setenv ("TAR_FORMAT", archive_format_string (current_format == DEFAULT_FORMAT ? archive_format : current_format), 1); - sprintf (intbuf, "%d", p[PWRITE]); - setenv ("TAR_FD", intbuf, 1); + dec_to_env ("TAR_FD", p[PWRITE]); xclose (p[PREAD]); @@ -907,17 +902,14 @@ sys_exec_checkpoint_script (const char *script_name, } /* Child */ - setenv ("TAR_VERSION", PACKAGE_VERSION, 1); - setenv ("TAR_ARCHIVE", archive_name, 1); - char intbuf[INT_BUFSIZE_BOUND (intmax_t)]; - sprintf (intbuf, "%jd", checkpoint_number); - setenv ("TAR_CHECKPOINT", intbuf, 1); - sprintf (intbuf, "%td", blocking_factor); - setenv ("TAR_BLOCKING_FACTOR", intbuf, 1); - setenv ("TAR_SUBCOMMAND", subcommand_string (subcommand_option), 1); - setenv ("TAR_FORMAT", - archive_format_string (current_format == DEFAULT_FORMAT ? - archive_format : current_format), 1); + str_to_env ("TAR_VERSION", PACKAGE_VERSION); + str_to_env ("TAR_ARCHIVE", archive_name); + dec_to_env ("TAR_CHECKPOINT", checkpoint_number); + dec_to_env ("TAR_BLOCKING_FACTOR", blocking_factor); + str_to_env ("TAR_SUBCOMMAND", subcommand_string (subcommand_option)); + str_to_env ("TAR_FORMAT", + archive_format_string (current_format == DEFAULT_FORMAT + ? archive_format : current_format)); priv_set_restore_linkdir (); xexec (script_name); }