diff options
author | Eli Zaretskii <eliz@gnu.org> | 2022-04-17 22:03:52 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-04-17 22:03:52 +0300 |
commit | c2f94f32b5e8f57e2b4e723c9799cf0e5f5e5bcc (patch) | |
tree | 656aa67a529748a6ad1b5282c5c7794adfda98c7 | |
parent | 3cccf0a9107d585173e527550bbc45253624ca2e (diff) | |
download | emacs-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.c | 3 | ||||
-rw-r--r-- | src/sysdep.c | 29 |
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. */ |