mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-04 08:50:27 +00:00
Support dirfd relative iops on Windows
We always favor calling functions like openat(), fstatat(), etc. because Linux, XNU, FreeBSD, and OpenBSD all elected to support them, while some systems like Android love them so much, that they stopped supporting the old interfaces. This change ensures that when dirfd is actually a dirfd and not AT_FDCWD we'll do the right thing on Windows NT. We use an API that's been around since Vista to accomplish that. This change also adds exponential backoff to chdir() on Windows since it seems almost as flaky on Windows 7 as the rmdir() function.
This commit is contained in:
parent
b8d26e2418
commit
417797d218
42 changed files with 361 additions and 241 deletions
|
@ -115,6 +115,7 @@ i32 execve$sysv(const char *, char *const[], char *const[]) hidden;
|
|||
i32 faccessat$sysv(i32, const char *, i32, u32) hidden;
|
||||
i32 fadvise$sysv(i32, i64, i64, i32) hidden;
|
||||
i32 fallocate$sysv(i64, i32, i64, i64) hidden;
|
||||
i32 fchdir$sysv(i32) hidden;
|
||||
i32 fchmod$sysv(i32, u32) hidden;
|
||||
i32 fchmodat$sysv(i32, const char *, u32, u32) hidden;
|
||||
i32 fchown$sysv(i64, u32, u32) hidden;
|
||||
|
@ -230,11 +231,13 @@ int dup$nt(int, int, int) hidden;
|
|||
int execve$nt(const char *, char *const[], char *const[]) hidden;
|
||||
int faccessat$nt(int, const char *, int, uint32_t) hidden;
|
||||
int fadvise$nt(int, u64, u64, int) hidden;
|
||||
int fchdir$nt(int) hidden;
|
||||
int fcntl$nt(int, int, unsigned) hidden;
|
||||
int fdatasync$nt(int) hidden;
|
||||
int flock$nt(int, int) hidden;
|
||||
int fork$nt(void) hidden;
|
||||
int fstat$nt(i64, struct stat *) hidden;
|
||||
int fstatat$nt(int, const char *, struct stat *, uint32_t) hidden;
|
||||
int ftruncate$nt(int, u64) hidden;
|
||||
int getpriority$nt(int) hidden;
|
||||
int getrusage$nt(int, struct rusage *) hidden;
|
||||
|
@ -243,23 +246,21 @@ int kill$nt(int, int) hidden;
|
|||
int link$nt(const char *, const char *) hidden;
|
||||
int lstat$nt(const char *, struct stat *) hidden;
|
||||
int madvise$nt(void *, size_t, int) hidden;
|
||||
int mkdir$nt(const char *, uint32_t) hidden;
|
||||
int mkdirat$nt(int, const char *, uint32_t) hidden;
|
||||
int msync$nt(void *, size_t, int) hidden;
|
||||
int nanosleep$nt(const struct timespec *, struct timespec *) hidden;
|
||||
int pipe$nt(int[hasatleast 2], unsigned) hidden;
|
||||
int rename$nt(const char *, const char *) hidden;
|
||||
int rmdir$nt(const char *) hidden;
|
||||
int renameat$nt(int, const char *, int, const char *) hidden;
|
||||
int sched_yield$nt(void) hidden;
|
||||
int setitimer$nt(int, const struct itimerval *, struct itimerval *) hidden;
|
||||
int setpriority$nt(int) hidden;
|
||||
int stat$nt(const char *, struct stat *) hidden;
|
||||
int symlink$nt(const char *, const char *) hidden;
|
||||
int symlinkat$nt(const char *, int, const char *) hidden;
|
||||
int sync$nt(void) hidden;
|
||||
int sysinfo$nt(struct sysinfo *) hidden;
|
||||
int truncate$nt(const char *, u64) hidden;
|
||||
int unlink$nt(const char *) hidden;
|
||||
int unlinkat$nt(int, const char *, int) hidden;
|
||||
int utimensat$nt(int, const char *, const struct timespec *, int) hidden;
|
||||
ssize_t open$nt(const char *, u32, i32) nodiscard hidden;
|
||||
ssize_t open$nt(int, const char *, u32, i32) nodiscard hidden;
|
||||
ssize_t read$nt(struct Fd *, const struct iovec *, size_t, ssize_t) hidden;
|
||||
ssize_t write$nt(struct Fd *, const struct iovec *, size_t, ssize_t) hidden;
|
||||
|
||||
|
@ -279,6 +280,7 @@ int ntaccesscheck(const char16_t *, u32) paramsnonnull() hidden;
|
|||
int64_t __winerr(void) nocallback privileged;
|
||||
int __mkntpath(const char *, char16_t[hasatleast PATH_MAX - 16]) hidden;
|
||||
int __mkntpath2(const char *, char16_t[hasatleast PATH_MAX - 16], int) hidden;
|
||||
int __mkntpathat(int, const char *, int, char16_t[PATH_MAX]) hidden;
|
||||
unsigned __wincrash$nt(struct NtExceptionPointers *);
|
||||
|
||||
/*───────────────────────────────────────────────────────────────────────────│─╗
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue