diff --git a/libc/calls/copy_file_range.c b/libc/calls/copy_file_range.c index af90ab52d..1a340710e 100644 --- a/libc/calls/copy_file_range.c +++ b/libc/calls/copy_file_range.c @@ -83,9 +83,11 @@ static void copy_file_range_init(void) { * @return number of bytes transferred, or -1 w/ errno * @raise EXDEV if source and destination are on different filesystems * @raise EBADF if `infd` or `outfd` aren't open files or append-only + * @raise EOPNOTSUPP if filesystem doesn't support this operation * @raise EPERM if `fdout` refers to an immutable file on Linux * @raise ECANCELED if thread was cancelled in masked mode * @raise EINVAL if ranges overlap or `flags` is non-zero + * @raise EINVAL on eCryptFs filesystems that have a bug * @raise EFBIG if `setrlimit(RLIMIT_FSIZE)` is exceeded * @raise EFAULT if one of the pointers memory is bad * @raise ERANGE if overflow happens computing ranges diff --git a/libc/calls/sig.c b/libc/calls/sig.c index 8db280e0c..d0556ed21 100644 --- a/libc/calls/sig.c +++ b/libc/calls/sig.c @@ -424,7 +424,6 @@ textwindows void __sig_generate(int sig, int sic) { (1ull << (sig - 1))) { return; } - BLOCK_SIGNALS; _pthread_lock(); for (e = dll_first(_pthread_list); e; e = dll_next(_pthread_list, e)) { pt = POSIXTHREAD_CONTAINER(e); @@ -462,7 +461,6 @@ textwindows void __sig_generate(int sig, int sic) { atomic_fetch_or_explicit(__sig.process, 1ull << (sig - 1), memory_order_relaxed); } - ALLOW_SIGNALS; } static textwindows char *__sig_stpcpy(char *d, const char *s) { diff --git a/libc/thread/pthread_tryjoin_np.c b/libc/thread/pthread_tryjoin_np.c index 248b26928..39929646e 100644 --- a/libc/thread/pthread_tryjoin_np.c +++ b/libc/thread/pthread_tryjoin_np.c @@ -32,6 +32,7 @@ * if the thread called pthread_exit(), or `PTHREAD_CANCELED` if * pthread_cancel() destroyed the thread instead * @return 0 on success, or errno on error + * @raise EBUSY if thread has not yet terminated * @raise ECANCELED if calling thread was cancelled in masked mode * @cancelationpoint * @returnserrno diff --git a/tool/build/ar.c b/tool/build/ar.c index 28cd53b8f..29f9abb32 100644 --- a/tool/build/ar.c +++ b/tool/build/ar.c @@ -298,6 +298,7 @@ static void CopyFileOrDie(const char *inpath, int infd, // if (got != -1) { exchanged = got; } else if (errno == EXDEV || // different partitions + errno == EINVAL || // possible w/ ecryptfs errno == ENOSYS || // not linux or freebsd errno == ENOTSUP || // probably a /zip file errno == EOPNOTSUPP) { // technically the same diff --git a/tool/build/compile.c b/tool/build/compile.c index 4f0f682d9..2ade1ce7b 100644 --- a/tool/build/compile.c +++ b/tool/build/compile.c @@ -798,7 +798,11 @@ bool MovePreservingDestinationInode(const char *from, const char *to) { rc = copy_file_range(fdin, 0, fdout, 0, remain, 0); if (rc != -1) { remain -= rc; - } else if (errno == EXDEV || errno == ENOSYS) { + } else if (errno == EXDEV || // different partitions + errno == EINVAL || // possible w/ ecryptfs + errno == ENOSYS || // not linux or freebsd + errno == ENOTSUP || // no fs support for it + errno == EOPNOTSUPP) { if (lseek(fdin, 0, SEEK_SET) == -1) { res = false; break;