_FORTIFY_SOURCE: add memset / bzero support

Add _FORTIFY_SOURCE support for the following functions:

* memset
* bzero

Move the __BIONIC_FORTIFY_INLINE definition to cdefs.h so it
can be used from multiple header files.

Change-Id: Iead4d5e35de6ec97786d58ee12573f9b11135bb7
diff --git a/libc/include/string.h b/libc/include/string.h
index 12c9500..e1718e9 100644
--- a/libc/include/string.h
+++ b/libc/include/string.h
@@ -85,27 +85,21 @@
 extern int    strcoll(const char *, const char *) __purefunc;
 extern size_t strxfrm(char *, const char *, size_t);
 
-#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0
-
-#define __BIONIC_FORTIFY_INLINE \
-    extern inline \
-    __attribute__ ((always_inline)) \
-    __attribute__ ((gnu_inline)) \
-    __attribute__ ((artificial))
+#if defined(__BIONIC_FORTIFY_INLINE)
 
 __BIONIC_FORTIFY_INLINE
 void *memcpy (void *dest, const void *src, size_t len) {
-    return __builtin___memcpy_chk (dest, src, len, __builtin_object_size (dest, 0));
+    return __builtin___memcpy_chk(dest, src, len, __builtin_object_size (dest, 0));
 }
 
 __BIONIC_FORTIFY_INLINE
 void *memmove (void *dest, const void *src, size_t len) {
-    return __builtin___memmove_chk (dest, src, len, __builtin_object_size (dest, 0));
+    return __builtin___memmove_chk(dest, src, len, __builtin_object_size (dest, 0));
 }
 
 __BIONIC_FORTIFY_INLINE
 char *strcpy(char *dest, const char *src) {
-    return __builtin___strcpy_chk (dest, src, __builtin_object_size (dest, 0));
+    return __builtin___strcpy_chk(dest, src, __builtin_object_size (dest, 0));
 }
 
 __BIONIC_FORTIFY_INLINE
@@ -115,7 +109,7 @@
 
 __BIONIC_FORTIFY_INLINE
 char *strcat(char *dest, const char *src) {
-    return __builtin___strcat_chk (dest, src, __builtin_object_size (dest, 0));
+    return __builtin___strcat_chk(dest, src, __builtin_object_size (dest, 0));
 }
 
 __BIONIC_FORTIFY_INLINE
@@ -123,8 +117,12 @@
     return __builtin___strncat_chk(dest, src, n, __builtin_object_size (dest, 0));
 }
 
-#undef __BIONIC_FORTIFY_INLINE
-#endif
+__BIONIC_FORTIFY_INLINE
+void *memset (void *s, int c, size_t n) {
+    return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
+}
+
+#endif /* defined(__BIONIC_FORTIFY_INLINE) */
 
 __END_DECLS
 
diff --git a/libc/include/strings.h b/libc/include/strings.h
index fee7dc4..db2aa3a 100644
--- a/libc/include/strings.h
+++ b/libc/include/strings.h
@@ -51,6 +51,14 @@
 char	*rindex(const char *, int);
 int	 strcasecmp(const char *, const char *);
 int	 strncasecmp(const char *, const char *, size_t);
+
+#if defined(__BIONIC_FORTIFY_INLINE)
+__BIONIC_FORTIFY_INLINE
+void bzero (void *s, size_t n) {
+    __builtin___memset_chk(s, '\0', n, __builtin_object_size (s, 0));
+}
+#endif /* defined(__BIONIC_FORTIFY_INLINE) */
+
 __END_DECLS
 
 #endif /* !defined(_STRINGS_H_) */
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index 71b419c..1ba9100 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -501,4 +501,12 @@
 #define  __BIONIC__   1
 #include <android/api-level.h>
 
+#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0
+#define __BIONIC_FORTIFY_INLINE \
+    extern inline \
+    __attribute__ ((always_inline)) \
+    __attribute__ ((gnu_inline)) \
+    __attribute__ ((artificial))
+#endif
+
 #endif /* !_SYS_CDEFS_H_ */