| |
| #include "upb/port_def.inc" |
| |
| #ifdef UPB_MSVC_VSNPRINTF |
| /* Visual C++ earlier than 2015 doesn't have standard C99 snprintf and |
| * vsnprintf. To support them, missing functions are manually implemented |
| * using the existing secure functions. */ |
| int msvc_vsnprintf(char* s, size_t n, const char* format, va_list arg) { |
| if (!s) { |
| return _vscprintf(format, arg); |
| } |
| int ret = _vsnprintf_s(s, n, _TRUNCATE, format, arg); |
| if (ret < 0) { |
| ret = _vscprintf(format, arg); |
| } |
| return ret; |
| } |
| |
| int msvc_snprintf(char* s, size_t n, const char* format, ...) { |
| va_list arg; |
| va_start(arg, format); |
| int ret = msvc_vsnprintf(s, n, format, arg); |
| va_end(arg); |
| return ret; |
| } |
| #endif |