summaryrefslogtreecommitdiff
path: root/src/poison.hpp
blob: d4a6cd0453d467c5ee9a071397e37657101ce8d6 (plain) (blame)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef GENERATING_DEPENDENCIES

// impossible(*) to use safely
// removed in C11
#pragma GCC poison gets

// TODO fill in as they are removed from source code:
// double (use a fixed class)
#pragma GCC poison float

#pragma GCC poison dynamic_cast

// Local time is forbidden.
#pragma GCC poison timelocal // timegm
#pragma GCC poison mktime // timegm
#pragma GCC poison localtime // gmtime
#pragma GCC poison localtime_r // gmtime_r

#pragma GCC poison time // TimeT::now() or gettick()

// Avoid manual allocations.
// Use some sort of managed container, or at least dumb_ptr

// new is needed when resetting unique_ptr.
// No it isn't. It doesn't matter if it's a little more verbose; it's cleaner.
//#define really_new1 new
// delete is needed for unique_ptr's deleter.
#define really_delete1 delete

#pragma GCC poison new
#pragma GCC poison delete

#pragma GCC poison malloc
#pragma GCC poison calloc
#pragma GCC poison realloc
#pragma GCC poison free

#pragma GCC poison strdup
#pragma GCC poison strndup

// complete list of glibc whose results may need to be free()d
// not believed to be used
#pragma GCC poison posix_memalign
#pragma GCC poison aligned_alloc
#pragma GCC poison memalign
#pragma GCC poison valloc
#pragma GCC poison pvalloc

#pragma GCC poison asprintf
#pragma GCC poison vasprintf

#pragma GCC poison canonicalize_file_name

#pragma GCC poison cfree

#pragma GCC poison open_memstream
#pragma GCC poison open_wmemstream

// *scanf %ms is done very carefully.
//#pragma GCC poison scanf
//#pragma GCC poison fscanf
//#pragma GCC poison sscanf
//#pragma GCC poison vscanf
//#pragma GCC poison vsscanf
//#pragma GCC poison vfscanf

#pragma GCC poison getcwd
#pragma GCC poison get_current_dir_name

#pragma GCC poison malloc_get_state

#pragma GCC poison realpath

#pragma GCC poison tempnam

#pragma GCC poison wcsdup

#pragma GCC poison memcpy
#pragma GCC poison memmove
#pragma GCC poison memset
#pragma GCC poison memcmp
#pragma GCC poison strncpy // in favor of strzcpy

#pragma GCC poison string // in favor of FString, MString, etc.
#pragma GCC poison strcasecmp
#pragma GCC poison toupper
#pragma GCC poison tolower
#pragma GCC poison isupper
#pragma GCC poison islower

// in favor of io::ReadFile and io::WriteFile
// note that stdout and stderr are NOT poisoned (yet)
#pragma GCC poison FILE
#pragma GCC poison istream
#pragma GCC poison ostream
#pragma GCC poison iostream
#pragma GCC poison ifstream
#pragma GCC poison ofstream
#pragma GCC poison fstream

#endif // GENERATING_DEPENDENCIES