Skip to content

Commit b7835ab

Browse files
saperam11
authored andcommitted
Use C99 snprintf() for VS2013 or older
1 parent 91777f1 commit b7835ab

File tree

3 files changed

+67
-27
lines changed

3 files changed

+67
-27
lines changed

src/c99func.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
Copyright (C) 2011 Joseph A. Adams ([email protected])
3+
All rights reserved.
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in
13+
all copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21+
THE SOFTWARE.
22+
*/
23+
24+
#ifdef _MSC_VER
25+
#define _CRT_SECURE_NO_WARNINGS
26+
#define _CRT_NONSTDC_NO_DEPRECATE
27+
#endif
28+
29+
#include <stdio.h>
30+
#include <stdlib.h>
31+
#include <stdarg.h>
32+
33+
#ifdef snprintf
34+
#undef snprintf
35+
#endif
36+
37+
static int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap)
38+
{
39+
int count = -1;
40+
41+
if (size != 0)
42+
count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
43+
if (count == -1)
44+
count = _vscprintf(format, ap);
45+
46+
return count;
47+
}
48+
49+
int snprintf(char* str, size_t size, const char* format, ...)
50+
{
51+
int count;
52+
va_list ap;
53+
54+
va_start(ap, format);
55+
count = c99_vsnprintf(str, size, format, ap);
56+
va_end(ap);
57+
58+
return count;
59+
}

src/json.cpp

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,34 +35,12 @@
3535
#include <string.h>
3636

3737
#if defined(_MSC_VER) && _MSC_VER < 1900
38-
3938
#include <stdarg.h>
40-
#define snprintf c99_snprintf
41-
42-
inline int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap)
43-
{
44-
int count = -1;
45-
46-
if (size != 0)
47-
count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
48-
if (count == -1)
49-
count = _vscprintf(format, ap);
50-
51-
return count;
52-
}
53-
54-
inline int c99_snprintf(char* str, size_t size, const char* format, ...)
55-
{
56-
int count;
57-
va_list ap;
58-
59-
va_start(ap, format);
60-
count = c99_vsnprintf(str, size, format, ap);
61-
va_end(ap);
62-
63-
return count;
64-
}
65-
#endif // _MSC_VER
39+
#ifdef snprintf
40+
#undef snprintf
41+
#endif
42+
extern "C" int snprintf(char *, size_t, const char *, ...);
43+
#endif
6644

6745
#define out_of_memory() do { \
6846
fprintf(stderr, "Out of memory.\n"); \

win/libsass.vcxproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@
238238
<ClCompile Include="..\src\values.cpp" />
239239
<ClCompile Include="..\sassc\sassc.c" />
240240
</ItemGroup>
241+
<ItemGroup Condition="$(VisualStudioVersion) &lt; 14.0">
242+
<ClCompile Include="..\src\c99func.c" />
243+
</ItemGroup>
241244
<ItemGroup>
242245
<ClInclude Include="..\src\ast.hpp" />
243246
<ClInclude Include="..\src\ast_def_macros.hpp" />

0 commit comments

Comments
 (0)