mirror of
				https://gitlab.com/libvirt/libvirt.git
				synced 2025-10-29 16:25:07 +03:00 
			
		
		
		
	build: fix getcwd portability problems
* bootstrap.conf (gnulib_modules): Add getcwd-lgpl. * tests/commandtest.c (checkoutput): Drop unused cwd. * tests/commandhelper.c (main): Let getcwd malloc. * tests/testutils.c (virTestMain): Likewise. * tools/virsh.c (cmdPwd): Likewise. (virshCmds): Expose cmdPwd and cmdCd on mingw.
This commit is contained in:
		| @@ -36,6 +36,7 @@ dirname-lgpl | ||||
| fcntl-h | ||||
| func | ||||
| getaddrinfo | ||||
| getcwd-lgpl | ||||
| gethostname | ||||
| getpass | ||||
| gettext-h | ||||
|   | ||||
| @@ -51,6 +51,7 @@ int main(int argc, char **argv) { | ||||
|     int i, n; | ||||
|     char **origenv; | ||||
|     char **newenv; | ||||
|     char *cwd; | ||||
|     FILE *log = fopen(abs_builddir "/commandhelper.log", "w"); | ||||
|  | ||||
|     if (!log) | ||||
| @@ -99,13 +100,13 @@ int main(int argc, char **argv) { | ||||
|     } | ||||
|  | ||||
|     fprintf(log, "DAEMON:%s\n", getpgrp() == getsid(0) ? "yes" : "no"); | ||||
|     char cwd[1024]; | ||||
|     if (!getcwd(cwd, sizeof(cwd))) | ||||
|     if (!(cwd = getcwd(NULL, 0))) | ||||
|         return EXIT_FAILURE; | ||||
|     if (strlen(cwd) > strlen("/commanddata") && | ||||
|     if (strlen(cwd) > strlen(".../commanddata") && | ||||
|         STREQ(cwd + strlen(cwd) - strlen("/commanddata"), "/commanddata")) | ||||
|         strcpy(cwd, ".../commanddata"); | ||||
|     fprintf(log, "CWD:%s\n", cwd); | ||||
|     VIR_FREE(cwd); | ||||
|  | ||||
|     VIR_FORCE_FCLOSE(log); | ||||
|  | ||||
|   | ||||
| @@ -49,15 +49,11 @@ mymain(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) | ||||
| static int checkoutput(const char *testname) | ||||
| { | ||||
|     int ret = -1; | ||||
|     char cwd[1024]; | ||||
|     char *expectname = NULL; | ||||
|     char *expectlog = NULL; | ||||
|     char *actualname = NULL; | ||||
|     char *actuallog = NULL; | ||||
|  | ||||
|     if (!getcwd(cwd, sizeof(cwd))) | ||||
|         return -1; | ||||
|  | ||||
|     if (virAsprintf(&expectname, "%s/commanddata/%s.log", abs_srcdir, | ||||
|                     testname) < 0) | ||||
|         goto cleanup; | ||||
|   | ||||
| @@ -478,7 +478,7 @@ int virtTestMain(int argc, | ||||
|                  int (*func)(void)) | ||||
| { | ||||
|     int ret; | ||||
|     char cwd[PATH_MAX]; | ||||
|     bool abs_srcdir_cleanup = false; | ||||
| #if TEST_OOM | ||||
|     int approxAlloc = 0; | ||||
|     int n; | ||||
| @@ -490,8 +490,10 @@ int virtTestMain(int argc, | ||||
| #endif | ||||
|  | ||||
|     abs_srcdir = getenv("abs_srcdir"); | ||||
|     if (!abs_srcdir) | ||||
|         abs_srcdir = getcwd(cwd, sizeof(cwd)); | ||||
|     if (!abs_srcdir) { | ||||
|         abs_srcdir = getcwd(NULL, 0); | ||||
|         abs_srcdir_cleanup = true; | ||||
|     } | ||||
|     if (!abs_srcdir) | ||||
|         exit(EXIT_AM_HARDFAIL); | ||||
|  | ||||
| @@ -624,6 +626,8 @@ cleanup: | ||||
|     ret = (func)(); | ||||
| #endif | ||||
|  | ||||
|     if (abs_srcdir_cleanup) | ||||
|         VIR_FREE(abs_srcdir); | ||||
|     virResetLastError(); | ||||
|     if (!virTestGetVerbose()) { | ||||
|         int i; | ||||
|   | ||||
| @@ -9893,7 +9893,6 @@ editReadBackFile (vshControl *ctl, const char *filename) | ||||
| } | ||||
|  | ||||
|  | ||||
| #ifndef WIN32 | ||||
| /* | ||||
|  * "cd" command | ||||
|  */ | ||||
| @@ -9936,9 +9935,6 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #ifndef WIN32 | ||||
| /* | ||||
|  * "pwd" command | ||||
|  */ | ||||
| @@ -9952,30 +9948,20 @@ static bool | ||||
| cmdPwd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) | ||||
| { | ||||
|     char *cwd; | ||||
|     size_t path_max; | ||||
|     bool err = true; | ||||
|     bool ret = true; | ||||
|  | ||||
|     path_max = (size_t) PATH_MAX + 2; | ||||
|     cwd = vshMalloc (ctl, path_max); | ||||
|     while (cwd) { | ||||
|         err = getcwd (cwd, path_max) == NULL; | ||||
|         if (!err || errno != ERANGE) | ||||
|             break; | ||||
|  | ||||
|         path_max *= 2; | ||||
|         cwd = vshRealloc (ctl, cwd, path_max); | ||||
|     } | ||||
|  | ||||
|     if (err) | ||||
|     cwd = getcwd(NULL, 0); | ||||
|     if (!cwd) { | ||||
|         vshError(ctl, _("pwd: cannot get current directory: %s"), | ||||
|                  strerror(errno)); | ||||
|     else | ||||
|         ret = false; | ||||
|     } else { | ||||
|         vshPrint (ctl, _("%s\n"), cwd); | ||||
|         VIR_FREE(cwd); | ||||
|     } | ||||
|  | ||||
|     VIR_FREE(cwd); | ||||
|     return !err; | ||||
|     return ret; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * "echo" command | ||||
| @@ -10862,15 +10848,11 @@ static const vshCmdDef secretCmds[] = { | ||||
| }; | ||||
|  | ||||
| static const vshCmdDef virshCmds[] = { | ||||
| #ifndef WIN32 | ||||
|     {"cd", cmdCd, opts_cd, info_cd}, | ||||
| #endif | ||||
|     {"echo", cmdEcho, opts_echo, info_echo}, | ||||
|     {"exit", cmdQuit, NULL, info_quit}, | ||||
|     {"help", cmdHelp, opts_help, info_help}, | ||||
| #ifndef WIN32 | ||||
|     {"pwd", cmdPwd, NULL, info_pwd}, | ||||
| #endif | ||||
|     {"quit", cmdQuit, NULL, info_quit}, | ||||
|     {NULL, NULL, NULL, NULL} | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user