Skip to content

Commit

Permalink
Fix SQLite regressions caused by 3b086af
Browse files Browse the repository at this point in the history
  • Loading branch information
jart committed Oct 13, 2023
1 parent bdc453b commit 3851025
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 12 deletions.
2 changes: 1 addition & 1 deletion libc/calls/fcntl-nt.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ static textwindows bool OverlapsFileLock(struct FileLock *fl, int64_t off,
EndA = off + (len - 1);
BegB = fl->off;
EndB = fl->off + (fl->len - 1);
return MAX(BegA, BegB) < MIN(EndA, EndB);
return MAX(BegA, BegB) <= MIN(EndA, EndB);
}

static textwindows bool EncompassesFileLock(struct FileLock *fl, int64_t off,
Expand Down
4 changes: 3 additions & 1 deletion libc/calls/fstatat-nt.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ textwindows int sys_fstatat_nt(int dirfd, const char *path, struct stat *st,
dwDesiredAccess = kNtFileGenericRead;
TryAgain:
if ((fh = CreateFile(
path16, dwDesiredAccess, 0, 0, kNtOpenExisting,
path16, dwDesiredAccess,
kNtFileShareRead | kNtFileShareWrite | kNtFileShareDelete, 0,
kNtOpenExisting,
kNtFileAttributeNormal | kNtFileFlagBackupSemantics |
((flags & AT_SYMLINK_NOFOLLOW) ? kNtFileFlagOpenReparsePoint
: 0),
Expand Down
8 changes: 6 additions & 2 deletions libc/calls/pipe-nt.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "libc/nt/enum/accessmask.h"
#include "libc/nt/enum/creationdisposition.h"
#include "libc/nt/enum/fileflagandattributes.h"
#include "libc/nt/enum/filesharemode.h"
#include "libc/nt/ipc.h"
#include "libc/nt/runtime.h"
#include "libc/sysv/consts/limits.h"
Expand Down Expand Up @@ -57,8 +58,11 @@ static textwindows int sys_pipe_nt_impl(int pipefd[2], unsigned flags) {
mode, 1, PIPE_BUF, PIPE_BUF, 0, &kNtIsInheritable);
__fds_lock();
if (hin != -1) {
if ((hout = CreateFile(pipename, kNtGenericWrite, 0, &kNtIsInheritable,
kNtOpenExisting, kNtFileFlagOverlapped, 0)) != -1) {
if ((hout = CreateFile(
pipename, kNtGenericWrite,
kNtFileShareRead | kNtFileShareWrite | kNtFileShareDelete,
&kNtIsInheritable, kNtOpenExisting, kNtFileFlagOverlapped, 0)) !=
-1) {
g_fds.p[reader].kind = kFdFile;
g_fds.p[reader].flags = O_RDONLY | flags;
g_fds.p[reader].mode = 0010444;
Expand Down
6 changes: 4 additions & 2 deletions libc/calls/truncate-nt.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ textwindows int sys_truncate_nt(const char *path, uint64_t length) {
uint16_t path16[PATH_MAX];
if (__mkntpath(path, path16) == -1) return -1;
BLOCK_SIGNALS;
if ((fh = CreateFile(path16, kNtGenericWrite, kNtFileShareRead, NULL,
kNtOpenExisting, kNtFileAttributeNormal, 0)) != -1) {
if ((fh = CreateFile(
path16, kNtGenericWrite,
kNtFileShareRead | kNtFileShareWrite | kNtFileShareDelete, NULL,
kNtOpenExisting, kNtFileAttributeNormal, 0)) != -1) {
rc = sys_ftruncate_nt(fh, length);
CloseHandle(fh);
} else {
Expand Down
1 change: 0 additions & 1 deletion libc/intrin/kprintf.greg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1061,7 +1061,6 @@ privileged void kvprintf(const char *fmt, va_list v) {
#pragma GCC diagnostic ignored "-Walloca-larger-than="
long size = __get_safe_size(8000, 3000);
if (size < 80) {
asm("int3");
klog(STACK_ERROR, sizeof(STACK_ERROR) - 1);
return;
}
Expand Down
4 changes: 3 additions & 1 deletion libc/sock/socketpair-nt.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "libc/nt/enum/accessmask.h"
#include "libc/nt/enum/creationdisposition.h"
#include "libc/nt/enum/fileflagandattributes.h"
#include "libc/nt/enum/filesharemode.h"
#include "libc/nt/ipc.h"
#include "libc/nt/runtime.h"
#include "libc/sock/internal.h"
Expand Down Expand Up @@ -73,7 +74,8 @@ textwindows int sys_socketpair_nt(int family, int type, int proto, int sv[2]) {
return -1;
}

h1 = CreateFile(pipename, kNtGenericWrite | kNtGenericRead, 0,
h1 = CreateFile(pipename, kNtGenericWrite | kNtGenericRead,
kNtFileShareRead | kNtFileShareWrite | kNtFileShareDelete,
&kNtIsInheritable, kNtOpenExisting, kNtFileFlagOverlapped, 0);

__fds_lock();
Expand Down
12 changes: 8 additions & 4 deletions libc/stdio/dirstream.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "libc/nt/enum/accessmask.h"
#include "libc/nt/enum/creationdisposition.h"
#include "libc/nt/enum/fileflagandattributes.h"
#include "libc/nt/enum/filesharemode.h"
#include "libc/nt/enum/filetype.h"
#include "libc/nt/files.h"
#include "libc/nt/runtime.h"
Expand Down Expand Up @@ -229,10 +230,13 @@ static textwindows dontinline struct dirent *readdir_nt(DIR *dir) {

// get inode such that it's consistent with stat()
// it's important that we not follow symlinks here
int64_t fh = CreateFile(jp, kNtFileReadAttributes, 0, 0, kNtOpenExisting,
kNtFileAttributeNormal | kNtFileFlagBackupSemantics |
kNtFileFlagOpenReparsePoint,
0);
int64_t fh =
CreateFile(jp, kNtFileReadAttributes,
kNtFileShareRead | kNtFileShareWrite | kNtFileShareDelete, 0,
kNtOpenExisting,
kNtFileAttributeNormal | kNtFileFlagBackupSemantics |
kNtFileFlagOpenReparsePoint,
0);
if (fh != kNtInvalidHandleValue) {
struct NtByHandleFileInformation wst;
if (GetFileInformationByHandle(fh, &wst)) {
Expand Down

0 comments on commit 3851025

Please sign in to comment.