summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2022-04-17 22:03:52 +0300
committerEli Zaretskii <eliz@gnu.org>2022-04-17 22:03:52 +0300
commitc2f94f32b5e8f57e2b4e723c9799cf0e5f5e5bcc (patch)
tree656aa67a529748a6ad1b5282c5c7794adfda98c7
parent3cccf0a9107d585173e527550bbc45253624ca2e (diff)
downloademacs-c2f94f32b5e8f57e2b4e723c9799cf0e5f5e5bcc.tar.gz
emacs-c2f94f32b5e8f57e2b4e723c9799cf0e5f5e5bcc.tar.bz2
emacs-c2f94f32b5e8f57e2b4e723c9799cf0e5f5e5bcc.zip
Revert "Don’t assume openat"
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.
-rw-r--r--lib-src/emacsclient.c3
-rw-r--r--src/sysdep.c29
2 files changed, 13 insertions, 19 deletions
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 217a38bc07f..57a5eff3bf6 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -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;
diff --git a/src/sysdep.c b/src/sysdep.c
index f6d139421af..72be25f6610 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -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. */