]> git.eshelyaron.com Git - emacs.git/commitdiff
Revert "Don’t assume openat"
authorEli Zaretskii <eliz@gnu.org>
Sun, 17 Apr 2022 19:03:52 +0000 (22:03 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 17 Apr 2022 19:03:52 +0000 (22:03 +0300)
This reverts commit 3cccf0a9107d585173e527550bbc45253624ca2e.

This is a change with far-reaching effects on MS-Windows at the least,
where file-related APIs are shadowed to support transparent support
for UTF-8 encoded file names.  Making such changes on a stable branch
for the benefit of a proprietary platform with a 13-year old OS is a
tail wagging the dog.  Please don't do that without discussing first.

lib-src/emacsclient.c
src/sysdep.c

index 217a38bc07f0d07a3a9b9ae6ebe78476e283fa70..57a5eff3bf62a684aef80dcb1ec37cf61ebef5fc 100644 (file)
@@ -1412,7 +1412,8 @@ local_sockname (int s, char sockname[socknamesize], int tmpdirlen,
   char *emacsdirend = sockname + tmpdirlen + suffixlen -
     strlen(server_name) - 1;
   *emacsdirend = '\0';
-  int dir = open (sockname, O_PATH | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
+  int dir = openat (AT_FDCWD, sockname,
+                   O_PATH | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
   *emacsdirend = '/';
   if (dir < 0)
     return errno;
index f6d139421af725e3ec0959bc76323b3adb58607e..72be25f661041f575e4a45fa33b933aeac500089 100644 (file)
@@ -2302,20 +2302,6 @@ emacs_fstatat (int dirfd, char const *filename, void *st, int flags)
   return r;
 }
 
-static int
-sys_openat (int dirfd, char const *file, int oflags, int mode)
-{
-#ifdef O_PATH
-  return openat (dirfd, file, oflags, mode);
-#else
-  /* On platforms without O_PATH, emacs_openat's callers arrange for
-     DIRFD to be AT_FDCWD, so it should be safe to just call 'open'.
-     This ports to old platforms like OS X 10.9 that lack openat.  */
-  eassert (dirfd == AT_FDCWD);
-  return open (file, oflags, mode);
-#endif
-}
-
 /* Assuming the directory DIRFD, open FILE for Emacs use,
    using open flags OFLAGS and mode MODE.
    Use binary I/O on systems that care about text vs binary I/O.
@@ -2331,7 +2317,7 @@ emacs_openat (int dirfd, char const *file, int oflags, int mode)
   if (! (oflags & O_TEXT))
     oflags |= O_BINARY;
   oflags |= O_CLOEXEC;
-  while ((fd = sys_openat (dirfd, file, oflags, mode)) < 0 && errno == EINTR)
+  while ((fd = openat (dirfd, file, oflags, mode)) < 0 && errno == EINTR)
     maybe_quit ();
   return fd;
 }
@@ -2344,19 +2330,26 @@ emacs_open (char const *file, int oflags, int mode)
 
 /* Same as above, but doesn't allow the user to quit.  */
 
-int
-emacs_open_noquit (char const *file, int oflags, int mode)
+static int
+emacs_openat_noquit (int dirfd, const char *file, int oflags,
+                     int mode)
 {
   int fd;
   if (! (oflags & O_TEXT))
     oflags |= O_BINARY;
   oflags |= O_CLOEXEC;
   do
-    fd = open (file, oflags, mode);
+    fd = openat (dirfd, file, oflags, mode);
   while (fd < 0 && errno == EINTR);
   return fd;
 }
 
+int
+emacs_open_noquit (char const *file, int oflags, int mode)
+{
+  return emacs_openat_noquit (AT_FDCWD, file, oflags, mode);
+}
+
 /* Open FILE as a stream for Emacs use, with mode MODE.
    Act like emacs_open with respect to threads, signals, and quits.  */