summaryrefslogtreecommitdiff
path: root/include/stdio.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/stdio.h')
-rw-r--r--include/stdio.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/stdio.h b/include/stdio.h
index 3e24044..8486804 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -18,6 +18,26 @@ __fortify_fgets(char *s, int n, FILE *fp)
18 18
19static inline 19static inline
20__attribute__ ((always_inline)) 20__attribute__ ((always_inline))
21__attribute__ ((__format__ (printf, 2, 0)))
22__attribute__ ((__nonnull__ (2)))
23int
24__fortify_vsprintf(char *s, const char *fmt, __builtin_va_list ap)
25{
26 size_t bos = __builtin_object_size(s, 0);
27 int r;
28
29 if (bos != -1) {
30 r = vsnprintf(s, bos, fmt, ap);
31 if (r == -1 || (size_t)r >= bos)
32 __builtin_trap();
33 } else {
34 r = vsprintf(s, fmt, ap);
35 }
36 return r;
37}
38
39static inline
40__attribute__ ((always_inline))
21__attribute__ ((__format__ (printf, 3, 0))) 41__attribute__ ((__format__ (printf, 3, 0)))
22__attribute__ ((__nonnull__ (3))) 42__attribute__ ((__nonnull__ (3)))
23int 43int
@@ -32,6 +52,8 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap)
32 52
33#undef fgets 53#undef fgets
34#define fgets(s, n, fp) __fortify_fgets(s, n, fp) 54#define fgets(s, n, fp) __fortify_fgets(s, n, fp)
55#undef vsprintf
56#define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap)
35#undef vsnprintf 57#undef vsnprintf
36#define vsnprintf(s, n, fmt, ap) __fortify_vsnprintf(s, n, fmt, ap) 58#define vsnprintf(s, n, fmt, ap) __fortify_vsnprintf(s, n, fmt, ap)
37 59