diff options
author | andri lim <jangko128@gmail.com> | 2018-08-07 14:07:18 +0700 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-08-07 09:07:18 +0200 |
commit | c3d5ec8eadf3aa887f34231c2d7b5818923818d4 (patch) | |
tree | 281055a93fc5f6fbc429c78a7e4b6b7624afe2d4 /compiler | |
parent | be4816f5097ce72e124e5e087ffa4d386fa17d4d (diff) | |
download | Nim-c3d5ec8eadf3aa887f34231c2d7b5818923818d4.tar.gz |
fixes #8421, fixes #7968, Nim compiler compiles with MSVC C89 version (#8556)
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/rodutils.nim | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/compiler/rodutils.nim b/compiler/rodutils.nim index 66d7f63c2..a774cdba7 100644 --- a/compiler/rodutils.nim +++ b/compiler/rodutils.nim @@ -10,6 +10,27 @@ ## Serialization utilities for the compiler. import strutils, math +# MSVC prior to 2013 doesn't have C99 functions +when defined(windows) and (defined(vcc) or defined(bcc)): + {.emit: """#if defined(_MSC_VER) && _MSC_VER < 1900 + #include <stdarg.h> + static int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) { + int count = -1; + if (size != 0) count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); + if (count == -1) count = _vscprintf(format, ap); + return count; + } + int snprintf(char *outBuf, size_t size, const char *format, ...) { + int count; + va_list ap; + va_start(ap, format); + count = c99_vsnprintf(outBuf, size, format, ap); + va_end(ap); + return count; + } + #endif + """.} + proc c_snprintf(s: cstring; n:uint; frmt: cstring): cint {.importc: "snprintf", header: "<stdio.h>", nodecl, varargs.} proc toStrMaxPrecision*(f: BiggestFloat, literalPostfix = ""): string = |