]> Savannah Git Hosting - gnulib.git/commitdiff
getcwd: fix test failures on mingw
authorEric Blake <eblake@redhat.com>
Wed, 17 Aug 2011 23:51:47 +0000 (17:51 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 17 Aug 2011 23:49:17 +0000 (17:49 -0600)
The GPL getcwd replacement now kicks in for mingw thanks to the
signature check, but does not have to do anything.  However,
because the code was not taking an early exit for ERANGE when
a buffer size was given, it instead tried to second-guess
mingw's cwd algorithm, which doesn't work.  After fixing that,
the tests still failed, even though mingw getcwd doesn't have
any problems with long paths (since they can't be created in
the first place).

* lib/getcwd.c (__getcwd): Early exit for ERANGE.
* tests/test-getcwd.c (test_abort_bug, test_long_name): Don't fail
test if long directory cannot be created, and allow mingw errno.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/getcwd.c
tests/test-getcwd.c

index 465a31f816d7861e16e1053d0fb72dd6c945c787..6d9ab92c274165f4980e5d39b8cda3bc61276a00 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2011-08-17  Eric Blake  <eblake@redhat.com>
 
+       getcwd: fix test failures on mingw
+       * lib/getcwd.c (__getcwd): Early exit for ERANGE.
+       * tests/test-getcwd.c (test_abort_bug, test_long_name): Don't fail
+       test if long directory cannot be created, and allow mingw errno.
+
        getcwd-lgpl: fix m4 to match relaxed test for BSD
        * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Relax probe.
        (gl_FUNC_GETCWD_SIGNATURE): New macro.
index f09fc3e8dd7cef69f6b168c3021d016682d27f19..cf155214a5568d4519c50b814c2e258eb8ecf832 100644 (file)
@@ -146,7 +146,7 @@ __getcwd (char *buf, size_t size)
 
 # undef getcwd
   dir = getcwd (buf, size);
-  if (dir)
+  if (dir || (size && errno == ERANGE))
     return dir;
 
   /* Solaris getcwd (NULL, 0) fails with errno == EINVAL, but it has
index 6e8e67adeeacac2a3498fac871e65149c749f3a7..e9832f0ea6a975be3b5c8d45c3fddb1ed9bfbd95 100644 (file)
@@ -68,7 +68,8 @@ test_abort_bug (void)
     {
       if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0)
         {
-          fail = 3; /* Unable to construct deep hierarchy.  */
+          if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT))
+            fail = 3; /* Unable to construct deep hierarchy.  */
           break;
         }
     }
@@ -77,7 +78,8 @@ test_abort_bug (void)
      results in a failed assertion.  */
   cwd = getcwd (NULL, 0);
   if (cwd == NULL)
-    fail = 4; /* getcwd failed.  This is ok, and expected.  */
+    fail = 4; /* getcwd didn't assert, but it failed for a long name
+                 where the answer could have been learned.  */
   free (cwd);
 
   /* Call rmdir first, in case the above chdir failed.  */
@@ -149,7 +151,7 @@ test_long_name (void)
          errors, be pessimistic and consider that as a failure, too.  */
       if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0)
         {
-          if (! (errno == ERANGE || errno == ENAMETOOLONG))
+          if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT))
             fail = 20;
           break;
         }