test: add windows-only snprintf() function
Should fix the build after 96f32a2 inadvertently broke it.
There is no snprintf() on Windows because, hey, it's a C99 addition
and the people from Redmond, WA are still firmly stuck in 1989.
This commit is contained in:
parent
35ea88cf6b
commit
fd082901f1
28
test/task.h
28
test/task.h
@ -153,4 +153,32 @@ enum test_status {
|
|||||||
return TEST_SKIP; \
|
return TEST_SKIP; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* Emulate snprintf() on Windows, _snprintf() doesn't zero-terminate the buffer
|
||||||
|
* on overflow...
|
||||||
|
*/
|
||||||
|
static int snprintf(char* buf, size_t len, const char* fmt, ...) {
|
||||||
|
va_list ap;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
n = _vsprintf_p(buf, len, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
/* It's a sad fact of life that no one ever checks the return value of
|
||||||
|
* snprintf(). Zero-terminating the buffer hopefully reduces the risk
|
||||||
|
* of gaping security holes.
|
||||||
|
*/
|
||||||
|
if (n < 0)
|
||||||
|
if (len > 0)
|
||||||
|
buf[0] = '\0';
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* TASK_H_ */
|
#endif /* TASK_H_ */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user