summaryrefslogtreecommitdiff
path: root/include/string.h
diff options
context:
space:
mode:
authorsin2015-01-28 17:12:12 +0000
committersin2015-01-28 17:13:44 +0000
commitbcc398c14af23c2d640d6fbbc6330d64e5ffad58 (patch)
treea8abf7ae12f7c3cb3ba88fff6fe6a2475125e938 /include/string.h
parent5960e3364f54eebfbfe509abc6c629d26171734b (diff)
Simplify checks
Do not perform checks only when `n' is constant, most of the time it is not. The bos == (size_t)-1 check is redundant because n > bos with bos == -1 will always be false.
Diffstat (limited to 'include/string.h')
-rw-r--r--include/string.h38
1 files changed, 8 insertions, 30 deletions
diff --git a/include/string.h b/include/string.h
index c9a82b7..d1bbac2 100644
--- a/include/string.h
+++ b/include/string.h
@@ -10,9 +10,7 @@ void *__fortify_memcpy(void *__restrict dest, const void *__restrict src, size_t
10{ 10{
11 size_t bos = __builtin_object_size(dest, 0); 11 size_t bos = __builtin_object_size(dest, 0);
12 12
13 if (bos == (size_t)-1) 13 if (n > bos)
14 return memcpy(dest, src, n);
15 if (__builtin_constant_p(n) && n > bos)
16 __builtin_trap(); 14 __builtin_trap();
17 return memcpy(dest, src, n); 15 return memcpy(dest, src, n);
18} 16}
@@ -22,9 +20,7 @@ void *__fortify_memmove(void *__restrict dest, const void *__restrict src, size_
22{ 20{
23 size_t bos = __builtin_object_size(dest, 0); 21 size_t bos = __builtin_object_size(dest, 0);
24 22
25 if (bos == (size_t)-1) 23 if (n > bos)
26 return memmove(dest, src, n);
27 if (__builtin_constant_p(n) && n > bos)
28 __builtin_trap(); 24 __builtin_trap();
29 return memmove(dest, src, n); 25 return memmove(dest, src, n);
30} 26}
@@ -34,9 +30,7 @@ void *__fortify_memset(void *dest, int c, size_t n)
34{ 30{
35 size_t bos = __builtin_object_size(dest, 0); 31 size_t bos = __builtin_object_size(dest, 0);
36 32
37 if (bos == (size_t)-1) 33 if (n > bos)
38 return memset(dest, c, n);
39 if (__builtin_constant_p(n) && n > bos)
40 __builtin_trap(); 34 __builtin_trap();
41 return memset(dest, c, n); 35 return memset(dest, c, n);
42} 36}
@@ -46,8 +40,6 @@ char *__fortify_stpcpy(char *__restrict dest, const char *__restrict src)
46{ 40{
47 size_t bos = __builtin_object_size(dest, 0); 41 size_t bos = __builtin_object_size(dest, 0);
48 42
49 if (bos == (size_t)-1)
50 return stpcpy(dest, src);
51 if (strlen(src) + 1 > bos) 43 if (strlen(src) + 1 > bos)
52 __builtin_trap(); 44 __builtin_trap();
53 return stpcpy(dest, src); 45 return stpcpy(dest, src);
@@ -58,9 +50,7 @@ char *__fortify_stpncpy(char *__restrict dest, const char *__restrict src, size_
58{ 50{
59 size_t bos = __builtin_object_size(dest, 0); 51 size_t bos = __builtin_object_size(dest, 0);
60 52
61 if (bos == (size_t)-1) 53 if (n > bos)
62 return stpcpy(dest, src);
63 if (__builtin_constant_p(n) && n > bos)
64 __builtin_trap(); 54 __builtin_trap();
65 return stpncpy(dest, src, n); 55 return stpncpy(dest, src, n);
66} 56}
@@ -70,8 +60,6 @@ char *__fortify_strcat(char *__restrict dest, const char *__restrict src)
70{ 60{
71 size_t bos = __builtin_object_size(dest, 0); 61 size_t bos = __builtin_object_size(dest, 0);
72 62
73 if (bos == (size_t)-1)
74 return strcat(dest, src);
75 if (strlen(src) + strlen(dest) + 1 > bos) 63 if (strlen(src) + strlen(dest) + 1 > bos)
76 __builtin_trap(); 64 __builtin_trap();
77 return strcat(dest, src); 65 return strcat(dest, src);
@@ -82,8 +70,6 @@ char *__fortify_strcpy(char *__restrict dest, const char *__restrict src)
82{ 70{
83 size_t bos = __builtin_object_size(dest, 0); 71 size_t bos = __builtin_object_size(dest, 0);
84 72
85 if (bos == (size_t)-1)
86 return strcpy(dest, src);
87 if (strlen(src) + 1 > bos) 73 if (strlen(src) + 1 > bos)
88 __builtin_trap(); 74 __builtin_trap();
89 return strcpy(dest, src); 75 return strcpy(dest, src);
@@ -95,9 +81,7 @@ char *__fortify_strncat(char *__restrict dest, const char *__restrict src, size_
95 size_t bos = __builtin_object_size(dest, 0); 81 size_t bos = __builtin_object_size(dest, 0);
96 size_t slen, dlen; 82 size_t slen, dlen;
97 83
98 if (bos == (size_t)-1) 84 if (n > bos) {
99 return strncat(dest, src, n);
100 if (__builtin_constant_p(n) && n > bos) {
101 slen = strlen(src); 85 slen = strlen(src);
102 dlen = strlen(dest); 86 dlen = strlen(dest);
103 if (slen > n) 87 if (slen > n)
@@ -113,9 +97,7 @@ char *__fortify_strncpy(char *__restrict dest, const char *__restrict src, size_
113{ 97{
114 size_t bos = __builtin_object_size(dest, 0); 98 size_t bos = __builtin_object_size(dest, 0);
115 99
116 if (bos == (size_t)-1) 100 if (n > bos)
117 return strncpy(dest, src, n);
118 if (__builtin_constant_p(n) && n > bos)
119 __builtin_trap(); 101 __builtin_trap();
120 return strncpy(dest, src, n); 102 return strncpy(dest, src, n);
121} 103}
@@ -126,9 +108,7 @@ size_t __fortify_strlcat(char *__restrict dest, const char *__restrict src, size
126{ 108{
127 size_t bos = __builtin_object_size(dest, 0); 109 size_t bos = __builtin_object_size(dest, 0);
128 110
129 if (bos == (size_t)-1) 111 if (n > bos)
130 return strlcat(dest, src, n);
131 if (__builtin_constant_p(n) && n > bos)
132 __builtin_trap(); 112 __builtin_trap();
133 return strlcat(dest, src, n); 113 return strlcat(dest, src, n);
134} 114}
@@ -138,9 +118,7 @@ size_t __fortify_strlcpy(char *__restrict dest, const char *__restrict src, size
138{ 118{
139 size_t bos = __builtin_object_size(dest, 0); 119 size_t bos = __builtin_object_size(dest, 0);
140 120
141 if (bos == (size_t)-1) 121 if (n > bos)
142 return strlcpy(dest, src, n);
143 if (__builtin_constant_p(n) && n > bos)
144 __builtin_trap(); 122 __builtin_trap();
145 return strlcpy(dest, src, n); 123 return strlcpy(dest, src, n);
146} 124}