unlink(), etc. */
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
-#define _CRT_SECURE_NO_WARNINGS /* for _open(), _wfopen(), _wopen(), fopen(),
- freopen(), getenv(), gmtime(), sprintf(),
+#define _CRT_SECURE_NO_WARNINGS /* for getenv(), gmtime(), sprintf(),
strcpy(),
- in tests: localtime(), open(), sscanf() */
+ in tests: localtime(), sscanf() */
#endif
#endif /* _MSC_VER */
#include "multibyte.h"
+#include <share.h> /* for _SH_DENYNO */
+
/* declare GetFullPathNameW for mingw-w64 UWP builds targeting old windows */
#if defined(CURL_WINDOWS_UWP) && defined(__MINGW32__) && \
(_WIN32_WINNT < _WIN32_WINNT_WIN10)
target = fixed;
else
target = filename_w;
- result = _wopen(target, oflag, pmode);
+ errno = _wsopen_s(&result, target, oflag, _SH_DENYNO, pmode);
curlx_unicodefree(filename_w);
}
else
target = fixed;
else
target = filename;
- result = _open(target, oflag, pmode);
+ errno = _sopen_s(&result, target, oflag, _SH_DENYNO, pmode);
#endif
(free)(fixed);
target = fixed;
else
target = filename_w;
- result = _wfopen(target, mode_w);
+ errno = _wfopen_s(&result, target, mode_w);
}
else
/* !checksrc! disable ERRNOVAR 1 */
target = fixed;
else
target = filename;
- /* !checksrc! disable BANNEDFUNC 1 */
- result = fopen(target, mode);
+ errno = fopen_s(&result, target, mode);
#endif
(free)(fixed);
return result;
}
+#if defined(__MINGW32__) && (__MINGW64_VERSION_MAJOR < 5)
+_CRTIMP errno_t __cdecl freopen_s(FILE **file, const char *filename,
+ const char *mode, FILE *stream);
+#endif
+
FILE *curlx_win32_freopen(const char *filename, const char *mode, FILE *fp)
{
FILE *result = NULL;
target = fixed;
else
target = filename_w;
- result = _wfreopen(target, mode_w, fp);
+ errno = _wfreopen_s(&result, target, mode_w, fp);
}
else
/* !checksrc! disable ERRNOVAR 1 */
target = fixed;
else
target = filename;
- /* !checksrc! disable BANNEDFUNC 1 */
- result = freopen(target, mode, fp);
+ errno = freopen_s(&result, target, mode, fp);
#endif
(free)(fixed);
#include <fcntl.h>
#endif
+#ifdef _WIN32
+#include <share.h>
+#endif
+
/* This function returns a pointer to STATIC memory. It converts the given
* binary lump to a hex formatted string usable for output in logs or
* whatever.
(void)!write(STDERR_FILENO, msg, sizeof(msg) - 1);
}
else {
+ int fd = -1;
#ifdef _WIN32
-#define OPENMODE S_IREAD | S_IWRITE
+ if(!_sopen_s(&fd, serverlogfile, O_WRONLY | O_CREAT | O_APPEND,
+ _SH_DENYNO, S_IREAD | S_IWRITE) &&
+ fd != -1) {
#else
-#define OPENMODE S_IRUSR | S_IWUSR
-#endif
- int fd = open(serverlogfile, O_WRONLY | O_CREAT | O_APPEND, OPENMODE);
+ /* !checksrc! disable BANNEDFUNC 1 */
+ fd = open(serverlogfile,
+ O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
if(fd != -1) {
+#endif
static const char msg[] = "exit_signal_handler: called\n";
(void)!write(fd, msg, sizeof(msg) - 1);
close(fd);