diff options
Diffstat (limited to 'contrib/libarchive/test_utils')
| -rw-r--r-- | contrib/libarchive/test_utils/test_common.h | 10 | ||||
| -rw-r--r-- | contrib/libarchive/test_utils/test_main.c | 156 | 
2 files changed, 44 insertions, 122 deletions
| diff --git a/contrib/libarchive/test_utils/test_common.h b/contrib/libarchive/test_utils/test_common.h index 064f0a6ec241..a9df300e3be8 100644 --- a/contrib/libarchive/test_utils/test_common.h +++ b/contrib/libarchive/test_utils/test_common.h @@ -340,8 +340,14 @@ int canGrzip(void);  /* Return true if this platform can run the "gzip" program. */  int canGzip(void); -/* Return true if this platform can run the specified command. */ -int canRunCommand(const char *); +/* Return true if this platform can run the specified command. + * + * Result can be optionally cached with `*tested`: + *   - 0 if not tested yet + *   - <0 if already tested negative + *   - >0 if already tested positive + */ +int canRunCommand(const char *cmd, int *tested);  /* Return true if this platform can run the "lrzip" program. */  int canLrzip(void); diff --git a/contrib/libarchive/test_utils/test_main.c b/contrib/libarchive/test_utils/test_main.c index fe330e5a052e..f4d443060d88 100644 --- a/contrib/libarchive/test_utils/test_main.c +++ b/contrib/libarchive/test_utils/test_main.c @@ -2523,167 +2523,77 @@ static const char *redirectArgs = ">NUL 2>NUL"; /* Win32 cmd.exe */  #else  static const char *redirectArgs = ">/dev/null 2>/dev/null"; /* POSIX 'sh' */  #endif +  /* - * Can this platform run the bzip2 program? + * Can this platform run the specified command?   */  int -canBzip2(void) +canRunCommand(const char *cmd, int *tested)  { -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("bzip2 --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); +  int value = tested ? *tested : 0; +  if (!value) { +    value = systemf("%s %s", cmd, redirectArgs) ? -1 : +1; +    if (tested) +      *tested = value; +  } +  return (value > 0);  } +#define CAN_RUN_FUNC(Program, Command) \ +    int can##Program(void) { \ +            static int tested = 0; \ +            return canRunCommand((Command), &tested); \ +    } + +/* + * Can this platform run the bzip2 program? + */ +CAN_RUN_FUNC(Bzip2, "bzip2 --help") +  /*   * Can this platform run the grzip program?   */ -int -canGrzip(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("grzip -V %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Grzip, "grzip -V")  /*   * Can this platform run the gzip program?   */ -int -canGzip(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("gzip --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Gzip, "gzip --help")  /*   * Can this platform run the lrzip program?   */ -int -canRunCommand(const char *cmd) -{ -  static int tested = 0, value = 0; -  if (!tested) { -    tested = 1; -    if (systemf("%s %s", cmd, redirectArgs) == 0) -      value = 1; -  } -  return (value); -} - -int -canLrzip(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("lrzip -V %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Lrzip, "lrzip -V")  /*   * Can this platform run the lz4 program?   */ -int -canLz4(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("lz4 --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Lz4, "lz4 --help")  /*   * Can this platform run the zstd program?   */ -int -canZstd(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("zstd --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Zstd, "zstd --help")  /*   * Can this platform run the lzip program?   */ -int -canLzip(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("lzip --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Lzip, "lzip --help")  /*   * Can this platform run the lzma program?   */ -int -canLzma(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("lzma --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Lzma, "lzma --help")  /*   * Can this platform run the lzop program?   */ -int -canLzop(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("lzop --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Lzop, "lzop --help")  /*   * Can this platform run the xz program?   */ -int -canXz(void) -{ -	static int tested = 0, value = 0; -	if (!tested) { -		tested = 1; -		if (systemf("xz --help %s", redirectArgs) == 0) -			value = 1; -	} -	return (value); -} +CAN_RUN_FUNC(Xz, "xz --help")  /*   * Can this filesystem handle nodump flags. @@ -4184,6 +4094,9 @@ main(int argc, char **argv)  	if (testprogfile == NULL)  	{  		tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1; +#if defined(_WIN32) && !defined(__CYGWIN__) +		tmp2_len += 4; +#endif  		if ((tmp2 = malloc(tmp2_len)) == NULL)  		{  			fprintf(stderr, "ERROR: Out of memory."); @@ -4192,6 +4105,9 @@ main(int argc, char **argv)  		strncpy(tmp2, testprogdir, tmp2_len);  		strncat(tmp2, "/", tmp2_len);  		strncat(tmp2, PROGRAM, tmp2_len); +#if defined(_WIN32) && !defined(__CYGWIN__) +		strncat(tmp2, ".exe", tmp2_len); +#endif  		testprogfile = tmp2;  	} | 
