X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwin32_replacements.c;h=3082255033b3123cec78f70d965df4cb16e9c39c;hb=9ca5c20853d3be06378fb985aa75c75df280d1e2;hp=5b3017a33af07437d178b1215dadef2c94b52241;hpb=ca0419160ac10e3bb3836a01d53a9960105dc608;p=wimlib diff --git a/src/win32_replacements.c b/src/win32_replacements.c index 5b3017a3..30822550 100644 --- a/src/win32_replacements.c +++ b/src/win32_replacements.c @@ -31,6 +31,7 @@ #include #include #include /* for _get_osfhandle() */ +#include #include "wimlib/win32_common.h" @@ -372,4 +373,33 @@ globfree(glob_t *pglob) FREE(pglob->gl_pathv); } +/* Replacement for fopen(path, "a") that doesn't prevent other processes from + * reading the file */ +FILE * +win32_open_logfile(const wchar_t *path) +{ + HANDLE h; + int fd; + FILE *fp; + + h = CreateFile(path, FILE_APPEND_DATA, FILE_SHARE_VALID_FLAGS, + NULL, OPEN_ALWAYS, 0, NULL); + if (h == INVALID_HANDLE_VALUE) + return NULL; + + fd = _open_osfhandle((intptr_t)h, O_APPEND); + if (fd < 0) { + CloseHandle(h); + return NULL; + } + + fp = fdopen(fd, "a"); + if (!fp) { + close(fd); + return NULL; + } + + return fp; +} + #endif /* __WIN32__ */