Re: [Lldb-commits] [PATCH] D12206: Inline fake snprintf to avoid linkage issues on Windows.

2015-08-20 Thread Chaoren Lin via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL245610: Inline fake snprintf to avoid linkage issues on 
Windows. (authored by chaoren).

Changed prior to commit:
  http://reviews.llvm.org/D12206?vs=32722id=32740#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D12206

Files:
  lldb/trunk/include/lldb/Host/windows/win32.h
  lldb/trunk/source/Host/windows/Windows.cpp

Index: lldb/trunk/source/Host/windows/Windows.cpp
===
--- lldb/trunk/source/Host/windows/Windows.cpp
+++ lldb/trunk/source/Host/windows/Windows.cpp
@@ -203,18 +203,17 @@
 }
 
 #if _MSC_VER  1900
-int snprintf(char *buffer, size_t count, const char *format, ...)
+namespace lldb_private {
+int vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
 {
 int old_errno = errno;
-va_list argptr;
-va_start(argptr, format);
-int r = vsnprintf(buffer, count, format, argptr);
+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);
+int bytes_written = ::vfprintf(nul, format, argptr);
 fclose(nul);
 if (bytes_written  count)
 errno = new_errno;
@@ -224,9 +223,9 @@
 r = bytes_written;
 }
 }
-va_end(argptr);
 return r;
 }
+} // namespace lldb_private
 #endif
 
 #endif // _MSC_VER
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
@@ -65,8 +65,19 @@
 int strncasecmp(const char* s1, const char* s2, size_t n);
 
 #if _MSC_VER  1900
-int __declspec(dllexport)
-snprintf(char *buffer, size_t count, const char *format, ...);
+namespace lldb_private {
+int vsnprintf(char *buffer, size_t count, const char *format, va_list argptr);
+}
+
+// inline to avoid linkage conflicts
+int inline snprintf(char *buffer, size_t count, const char *format, ...)
+{
+va_list argptr;
+va_start(argptr, format);
+int r = lldb_private::vsnprintf(buffer, count, format, argptr);
+va_end(argptr);
+return r;
+}
 #endif
 
 #define STDIN_FILENO  0


Index: lldb/trunk/source/Host/windows/Windows.cpp
===
--- lldb/trunk/source/Host/windows/Windows.cpp
+++ lldb/trunk/source/Host/windows/Windows.cpp
@@ -203,18 +203,17 @@
 }
 
 #if _MSC_VER  1900
-int snprintf(char *buffer, size_t count, const char *format, ...)
+namespace lldb_private {
+int vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
 {
 int old_errno = errno;
-va_list argptr;
-va_start(argptr, format);
-int r = vsnprintf(buffer, count, format, argptr);
+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);
+int bytes_written = ::vfprintf(nul, format, argptr);
 fclose(nul);
 if (bytes_written  count)
 errno = new_errno;
@@ -224,9 +223,9 @@
 r = bytes_written;
 }
 }
-va_end(argptr);
 return r;
 }
+} // namespace lldb_private
 #endif
 
 #endif // _MSC_VER
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
@@ -65,8 +65,19 @@
 int strncasecmp(const char* s1, const char* s2, size_t n);
 
 #if _MSC_VER  1900
-int __declspec(dllexport)
-snprintf(char *buffer, size_t count, const char *format, ...);
+namespace lldb_private {
+int vsnprintf(char *buffer, size_t count, const char *format, va_list argptr);
+}
+
+// inline to avoid linkage conflicts
+int inline snprintf(char *buffer, size_t count, const char *format, ...)
+{
+va_list argptr;
+va_start(argptr, format);
+int r = lldb_private::vsnprintf(buffer, count, format, argptr);
+va_end(argptr);
+return r;
+}
 #endif
 
 #define STDIN_FILENO  0
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D12206: Inline fake snprintf to avoid linkage issues on Windows.

2015-08-20 Thread Zachary Turner via lldb-commits
looks good, can you add a comment to explain why it's inlined though.

On Thu, Aug 20, 2015 at 12:14 PM Chaoren Lin chaor...@google.com wrote:

 chaoren created this revision.
 chaoren added a reviewer: zturner.
 chaoren added a subscriber: lldb-commits.

 dllexport doesn't work if linking against a static library with its own
 copy of snprintf.

 http://reviews.llvm.org/D12206

 Files:
   include/lldb/Host/windows/win32.h
   source/Host/windows/Windows.cpp

 Index: source/Host/windows/Windows.cpp
 ===
 --- source/Host/windows/Windows.cpp
 +++ source/Host/windows/Windows.cpp
 @@ -203,18 +203,17 @@
  }

  #if _MSC_VER  1900
 -int snprintf(char *buffer, size_t count, const char *format, ...)
 +namespace lldb_private {
 +int vsnprintf(char *buffer, size_t count, const char *format, va_list
 argptr)
  {
  int old_errno = errno;
 -va_list argptr;
 -va_start(argptr, format);
 -int r = vsnprintf(buffer, count, format, argptr);
 +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);
 +int bytes_written = ::vfprintf(nul, format, argptr);
  fclose(nul);
  if (bytes_written  count)
  errno = new_errno;
 @@ -224,9 +223,9 @@
  r = bytes_written;
  }
  }
 -va_end(argptr);
  return r;
  }
 +} // namespace lldb_private
  #endif

  #endif // _MSC_VER
 Index: include/lldb/Host/windows/win32.h
 ===
 --- include/lldb/Host/windows/win32.h
 +++ include/lldb/Host/windows/win32.h
 @@ -65,8 +65,18 @@
  int strncasecmp(const char* s1, const char* s2, size_t n);

  #if _MSC_VER  1900
 -int __declspec(dllexport)
 -snprintf(char *buffer, size_t count, const char *format, ...);
 +namespace lldb_private {
 +int vsnprintf(char *buffer, size_t count, const char *format, va_list
 argptr);
 +}
 +
 +int inline snprintf(char *buffer, size_t count, const char *format, ...)
 +{
 +va_list argptr;
 +va_start(argptr, format);
 +int r = lldb_private::vsnprintf(buffer, count, format, argptr);
 +va_end(argptr);
 +return r;
 +}
  #endif

  #define STDIN_FILENO  0



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits