diff options
-rw-r--r-- | lldb/include/lldb/Host/windows/win32.h | 6 | ||||
-rw-r--r-- | lldb/source/Host/windows/Windows.cpp | 29 |
2 files changed, 30 insertions, 5 deletions
diff --git a/lldb/include/lldb/Host/windows/win32.h b/lldb/include/lldb/Host/windows/win32.h index 698e427..fb8c7ea 100644 --- a/lldb/include/lldb/Host/windows/win32.h +++ b/lldb/include/lldb/Host/windows/win32.h @@ -52,7 +52,7 @@ typedef unsigned short mode_t; #ifdef LLDB_DISABLE_PYTHON typedef uint32_t pid_t; -#endif +#endif // LLDB_DISABLE_PYTHON int usleep(uint32_t useconds); @@ -63,6 +63,7 @@ char *dirname(char *path); int strcasecmp(const char* s1, const char* s2); int strncasecmp(const char* s1, const char* s2, size_t n); +int snprintf(char *buffer, size_t count, const char *format, ...); #define STDIN_FILENO 0 #define STDOUT_FILENO 1 @@ -73,8 +74,7 @@ int strncasecmp(const char* s1, const char* s2, size_t n); #define S_IFDIR _S_IFDIR #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#define snprintf _snprintf -#endif +#endif // _MSC_VER // timespec struct timespec diff --git a/lldb/source/Host/windows/Windows.cpp b/lldb/source/Host/windows/Windows.cpp index b8ee8b2..f5d3143 100644 --- a/lldb/source/Host/windows/Windows.cpp +++ b/lldb/source/Host/windows/Windows.cpp @@ -198,8 +198,33 @@ int strncasecmp(const char* s1, const char* s2, size_t n) int usleep(uint32_t useconds) { - Sleep(useconds / 1000); - return 0; + Sleep(useconds / 1000); + return 0; +} + +int snprintf(char *buffer, size_t count, const char *format, ...) +{ + int old_errno = errno; + va_list argptr; + va_start(argptr, format); + int r = vsnprintf(buffer, count, format, argptr); + int new_errno = errno; + buffer[count-1] = '\0'; + if (r == -1 || r == count) + { + FILE *nul = fopen("nul", "w"); + int bytes_written = vfprintf(nul, format, argptr); + fclose(nul); + if (bytes_written < count) + errno = new_errno; + else + { + errno = old_errno; + r = bytes_written; + } + } + va_end(argptr); + return r; } #endif // _MSC_VER |