aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Host/windows/win32.h6
-rw-r--r--lldb/source/Host/windows/Windows.cpp29
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