From e39c46a5fd2d1607b30757b64a7b8638f186420a Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Fri, 29 Apr 2011 11:14:23 -0600 Subject: [PATCH] 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. --- bootstrap.conf | 1 + tests/commandhelper.c | 7 ++++--- tests/commandtest.c | 4 ---- tests/testutils.c | 10 +++++++--- tools/virsh.c | 34 ++++++++-------------------------- 5 files changed, 20 insertions(+), 36 deletions(-) diff --git a/bootstrap.conf b/bootstrap.conf index 3b3a90fd5e..fde00da18a 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -36,6 +36,7 @@ dirname-lgpl fcntl-h func getaddrinfo +getcwd-lgpl gethostname getpass gettext-h diff --git a/tests/commandhelper.c b/tests/commandhelper.c index 46c00f4f90..d60d50581b 100644 --- a/tests/commandhelper.c +++ b/tests/commandhelper.c @@ -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); diff --git a/tests/commandtest.c b/tests/commandtest.c index 509c888423..fa0061cba1 100644 --- a/tests/commandtest.c +++ b/tests/commandtest.c @@ -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; diff --git a/tests/testutils.c b/tests/testutils.c index 456a73540a..58b0275211 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -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; diff --git a/tools/virsh.c b/tools/virsh.c index 0212b99739..506572bb49 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -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} };