-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfakessp.c
58 lines (48 loc) · 1.78 KB
/
fakessp.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#define UNPACK(...) __VA_ARGS__
#define BASIC_ALIAS(ret, name, actual, args, topass) \
ret name args { return actual topass; }
#define UNDERSCORE_ALIAS(ret, name, ...) \
BASIC_ALIAS(ret, __##name, name, __VA_ARGS__)
#define CHECK_ALIAS(ret, name, ...) \
BASIC_ALIAS(ret, __##name##_chk, name, __VA_ARGS__)
#define VA_ALIAS(ret, name, actual, args, topass, last) \
ret name(UNPACK args, ...) {\
va_list va;\
ret r; \
va_start(va, last); \
r = actual(UNPACK topass, last, va); \
va_end(va); \
return r; \
}
#define VA_CHECK_ALIAS(ret, name, ...) \
VA_ALIAS(ret, __##name##_chk, name, __VA_ARGS__)
CHECK_ALIAS(void*, memcpy,
(void* dst, const void* src, size_t len, size_t destlen),
(dst, src, len))
CHECK_ALIAS(void*, memset,
(void* dst, int value, size_t len, size_t destlen),
(dst, value, len))
CHECK_ALIAS(char*, strcpy,
(void* dst, const char* src, size_t dstlen),
(dst, src))
CHECK_ALIAS(int, vsnprintf,
(char* str, size_t len, int flags, size_t strlen,
const char* format, va_list va),
(str, len, format, va))
CHECK_ALIAS(int, vfprintf,
(FILE* fp, int flags, const char* format, va_list va),
(fp, format, va))
UNDERSCORE_ALIAS(int, isinf, (double value), (value))
UNDERSCORE_ALIAS(int, isnan, (double value), (value))
VA_CHECK_ALIAS(int, fprintf,
(FILE* file, int flag, const char* format),
(file), format)
VA_CHECK_ALIAS(int, snprintf,
(char* str, size_t len, int flags, size_t strlen,
const char* format),
(str, len), format)