From 87c7e0f2868e6b3debfaa0c2cb57eee857e8fea3 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 4 May 2023 05:01:20 +0300 Subject: [PATCH] If filename is invalid, fopen should return NULL --- libc/src/std/io/file.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/libc/src/std/io/file.c b/libc/src/std/io/file.c index ac95aae..fb5478c 100644 --- a/libc/src/std/io/file.c +++ b/libc/src/std/io/file.c @@ -9,8 +9,12 @@ FILE *stderr; FILE *fopen(const char *filename, const char *mode) { + void *KPrivate = (void *)syscall2(_FileOpen, (uint64_t)filename, (uint64_t)mode); + if (IsSyscallError(KPrivate)) + return NULL; + FILE *FilePtr = malloc(sizeof(FILE)); - FilePtr->KernelPrivate = (void *)syscall2(_FileOpen, (uint64_t)filename, (uint64_t)mode); + FilePtr->KernelPrivate = KPrivate; return FilePtr; } @@ -24,6 +28,13 @@ size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) return syscall4(_FileWrite, (uint64_t)stream->KernelPrivate, stream->offset, (uint64_t)ptr, size * nmemb); } +int fclose(FILE *fp) +{ + void *KP = fp->KernelPrivate; + free(fp); + return syscall1(_FileClose, (uint64_t)KP); +} + int fseek(FILE *stream, long offset, int whence) { switch (whence) @@ -47,13 +58,6 @@ long ftell(FILE *stream) return stream->offset; } -int fclose(FILE *fp) -{ - void *KP = fp->KernelPrivate; - free(fp); - return syscall1(_FileClose, (uint64_t)KP); -} - int fflush(FILE *stream) { return 0;