]> xenbits.xensource.com Git - libvirt.git/commitdiff
build: fix getcwd portability problems
authorEric Blake <eblake@redhat.com>
Fri, 29 Apr 2011 17:14:23 +0000 (11:14 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 29 Apr 2011 18:08:26 +0000 (12:08 -0600)
* 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
tests/commandhelper.c
tests/commandtest.c
tests/testutils.c
tools/virsh.c

index 3b3a90fd5e02b624e6ca3786d2d51a8820f62444..fde00da18aa0ad9826a58adaec3e87d593341e8f 100644 (file)
@@ -36,6 +36,7 @@ dirname-lgpl
 fcntl-h
 func
 getaddrinfo
+getcwd-lgpl
 gethostname
 getpass
 gettext-h
index 46c00f4f90ef8f001f79a4fc5ce55c07ec0698eb..d60d50581be86dec4dfd53a3203b1a2ab7ac562f 100644 (file)
@@ -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);
 
index 509c88842336f333c366595dc095200f4ec03b29..fa0061cba1fc0335ee38f38126fd5a28ab9cf5c7 100644 (file)
@@ -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;
index 456a73540a613a1df8b0c5a5d7aac8da372d0b91..58b02752118a53b9d189f27d5f50db15e56ad070 100644 (file)
@@ -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;
index 0212b99739aa04589fa16ebc785c8028cb67717d..506572bb493960d65986d9641e95356bb72e8e21 100644 (file)
@@ -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;
-
-    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);
-    }
+    bool ret = true;
 
-    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}
 };