Index: lldb/trunk/include/lldb/Host/windows/win32.h =================================================================== --- lldb/trunk/include/lldb/Host/windows/win32.h +++ lldb/trunk/include/lldb/Host/windows/win32.h @@ -52,7 +52,7 @@ #ifdef LLDB_DISABLE_PYTHON typedef uint32_t pid_t; -#endif +#endif // LLDB_DISABLE_PYTHON int usleep(uint32_t useconds); @@ -63,6 +63,7 @@ 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 @@ #define S_IFDIR _S_IFDIR #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#define snprintf _snprintf -#endif +#endif // _MSC_VER // timespec struct timespec Index: lldb/trunk/source/Host/windows/Windows.cpp =================================================================== --- lldb/trunk/source/Host/windows/Windows.cpp +++ lldb/trunk/source/Host/windows/Windows.cpp @@ -198,8 +198,33 @@ 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