]> git.eshelyaron.com Git - emacs.git/commitdiff
Unbreak the MS-Windows build
authorEli Zaretskii <eliz@gnu.org>
Mon, 20 Jan 2020 16:21:09 +0000 (18:21 +0200)
committerEli Zaretskii <eliz@gnu.org>
Mon, 20 Jan 2020 16:21:09 +0000 (18:21 +0200)
* src/w32.c (openat): New function.
* src/w32.h (openat): Add prototype.

src/w32.c
src/w32.h

index 62c53fd77115ff73e9fc45f6d12c49c7e1f2ae64..a3b9a5683adb4a100e24b79a64c980f4da44e2fe 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -4591,6 +4591,27 @@ sys_open (const char * path, int oflag, int mode)
   return res;
 }
 
+int
+openat (int fd, const char * path, int oflag, int mode)
+{
+  /* Rely on a hack: an open directory is modeled as file descriptor 0,
+     as in fstatat.  FIXME: Add proper support for openat.  */
+  char fullname[MAX_UTF8_PATH];
+
+  if (fd != AT_FDCWD)
+    {
+      if (_snprintf (fullname, sizeof fullname, "%s/%s", dir_pathname, path)
+         < 0)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+      path = fullname;
+    }
+
+  return sys_open (path, oflag, mode);
+}
+
 int
 fchmod (int fd, mode_t mode)
 {
index b8655ec788cf71e1a3f89b798ef557a4142b612f..f301b3836ca56c132d327902c0d2d928603ae47e 100644 (file)
--- a/src/w32.h
+++ b/src/w32.h
@@ -221,6 +221,7 @@ extern void register_child (pid_t, int);
 
 extern void sys_sleep (int);
 extern int sys_link (const char *, const char *);
+extern int openat (int, const char *, int, int);
 
 /* Return total and free memory info.  */
 extern int w32_memory_info (unsigned long long *, unsigned long long *,