bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
* link: Improve trailing slash handling on native Windows
@ 2021-01-05  4:25 Bruno Haible
  0 siblings, 0 replies; only message in thread
From: Bruno Haible @ 2021-01-05  4:25 UTC (permalink / raw)
  To: bug-gnulib

On native Windows (but not on Linux!), when stat() fails with error
EOVERFLOW, you know that the file is a regular file of size >= 4 GiB.
This allows to improve the errno value here:


2021-01-04  Bruno Haible  <bruno@clisp.org>

	link: Improve trailing slash handling on native Windows.
	* lib/link.c (link): If stat() fails, provide a better errno.

diff --git a/lib/link.c b/lib/link.c
index 87dae40..21c7f7a 100644
--- a/lib/link.c
+++ b/lib/link.c
@@ -85,16 +85,24 @@ link (const char *file1, const char *file2)
       errno = EPERM;
       return -1;
     }
-  /* Reject trailing slashes on non-directories; mingw does not
+  /* Reject trailing slashes on non-directories; native Windows does not
      support hard-linking directories.  */
   if ((len1 && (file1[len1 - 1] == '/' || file1[len1 - 1] == '\\'))
       || (len2 && (file2[len2 - 1] == '/' || file2[len2 - 1] == '\\')))
     {
+      /* If stat() fails, then link() should fail for the same reason.  */
       struct stat st;
-      if (stat (file1, &st) == 0 && S_ISDIR (st.st_mode))
-        errno = EPERM;
-      else
+      if (stat (file1, &st))
+        {
+          if (errno == EOVERFLOW)
+            /* It's surely a file, not a directory (see stat-w32.c).  */
+            errno = ENOTDIR;
+          return -1;
+        }
+      if (!S_ISDIR (st.st_mode))
         errno = ENOTDIR;
+      else
+        errno = EPERM;
       return -1;
     }
   /* CreateHardLink("b/.","a",NULL) creates file "b", so we must check



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-01-05  4:25 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-05  4:25 link: Improve trailing slash handling on native Windows Bruno Haible

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).