[Lldb-commits] [lldb] r238599 - Implement snprintf for MSVC with correct return value.
Chaoren Lin
chaorenl at google.com
Fri May 29 12:34:57 PDT 2015
Author: chaoren
Date: Fri May 29 14:34:57 2015
New Revision: 238599
URL: http://llvm.org/viewvc/llvm-project?rev=238599&view=rev
Log:
Implement snprintf for MSVC with correct return value.
Reviewers: zturner
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D10048
Modified:
lldb/trunk/include/lldb/Host/windows/win32.h
lldb/trunk/source/Host/windows/Windows.cpp
Modified: lldb/trunk/include/lldb/Host/windows/win32.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/windows/win32.h?rev=238599&r1=238598&r2=238599&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Host/windows/win32.h (original)
+++ lldb/trunk/include/lldb/Host/windows/win32.h Fri May 29 14:34:57 2015
@@ -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 ch
#define S_IFDIR _S_IFDIR
#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#define snprintf _snprintf
-#endif
+#endif // _MSC_VER
// timespec
struct timespec
Modified: lldb/trunk/source/Host/windows/Windows.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/windows/Windows.cpp?rev=238599&r1=238598&r2=238599&view=diff
==============================================================================
--- lldb/trunk/source/Host/windows/Windows.cpp (original)
+++ lldb/trunk/source/Host/windows/Windows.cpp Fri May 29 14:34:57 2015
@@ -198,8 +198,33 @@ int strncasecmp(const char* s1, const ch
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
More information about the lldb-commits
mailing list