mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-02 02:38:04 +00:00
Inline fake snprintf to avoid linkage issues on Windows.
Summary: dllexport doesn't work if linking against a static library with its own copy of snprintf. Reviewers: zturner Subscribers: zturner, lldb-commits Differential Revision: http://reviews.llvm.org/D12206 llvm-svn: 245610
This commit is contained in:
parent
419bb33b0b
commit
ee3c206021
@ -65,8 +65,19 @@ int strcasecmp(const char* s1, const char* s2);
|
||||
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
|
||||
|
@ -203,18 +203,17 @@ int usleep(uint32_t useconds)
|
||||
}
|
||||
|
||||
#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 @@ int snprintf(char *buffer, size_t count, const char *format, ...)
|
||||
r = bytes_written;
|
||||
}
|
||||
}
|
||||
va_end(argptr);
|
||||
return r;
|
||||
}
|
||||
} // namespace lldb_private
|
||||
#endif
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
Loading…
Reference in New Issue
Block a user