diff --git a/libc/include/bits/fortify/string.h b/libc/include/bits/fortify/string.h
index 9be2b1a..5fdbe2a 100644
--- a/libc/include/bits/fortify/string.h
+++ b/libc/include/bits/fortify/string.h
@@ -77,33 +77,34 @@
     return __builtin___mempcpy_chk(dst, src, copy_amount, bos_dst);
 }
 #endif /* __ANDROID_API__ >= __ANDROID_API_R__ */
-#endif
+#endif /* __USE_GNU */
 
-#if __ANDROID_API__ >= __ANDROID_API_L__
 __BIONIC_FORTIFY_INLINE
 char* stpcpy(char* const dst __pass_object_size, const char* src)
         __overloadable
         __clang_error_if(__bos_unevaluated_le(__bos(dst), __builtin_strlen(src)),
                          "'stpcpy' called with string bigger than buffer") {
+#if __ANDROID_API__ >= __ANDROID_API_L__
     size_t bos_dst = __bos(dst);
-    if (__bos_trivially_not_le(bos_dst, __builtin_strlen(src))) {
-        return __builtin_stpcpy(dst, src);
+    if (!__bos_trivially_gt(bos_dst, __builtin_strlen(src))) {
+        return __builtin___stpcpy_chk(dst, src, bos_dst);
     }
-    return __builtin___stpcpy_chk(dst, src, bos_dst);
-}
 #endif /* __ANDROID_API__ >= __ANDROID_API_L__ */
+    return __builtin_stpcpy(dst, src);
+}
 
-#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
 __BIONIC_FORTIFY_INLINE
 char* strcpy(char* const dst __pass_object_size, const char* src)
         __overloadable
         __clang_error_if(__bos_unevaluated_le(__bos(dst), __builtin_strlen(src)),
                          "'strcpy' called with string bigger than buffer") {
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
     size_t bos_dst = __bos(dst);
-    if (__bos_trivially_not_le(bos_dst, __builtin_strlen(src))) {
-        return __builtin_strcpy(dst, src);
+    if (!__bos_trivially_gt(bos_dst, __builtin_strlen(src))) {
+        return __builtin___strcpy_chk(dst, src, bos_dst);
     }
-    return __builtin___strcpy_chk(dst, src, bos_dst);
+#endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
+    return __builtin_strcpy(dst, src);
 }
 
 __BIONIC_FORTIFY_INLINE
@@ -111,27 +112,34 @@
         __overloadable
         __clang_error_if(__bos_unevaluated_le(__bos(dst), __builtin_strlen(src)),
                          "'strcat' called with string bigger than buffer") {
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
     return __builtin___strcat_chk(dst, src, __bos(dst));
+#else
+    return __builtin_strcat(dst, src);
+#endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
 }
 
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
 /* No diag -- clang diagnoses misuses of this on its own.  */
 __BIONIC_FORTIFY_INLINE
 char* strncat(char* const dst __pass_object_size, const char* src, size_t n) __overloadable {
     return __builtin___strncat_chk(dst, src, n, __bos(dst));
 }
+#endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
 
 /* No diag -- clang diagnoses misuses of this on its own.  */
 __BIONIC_FORTIFY_INLINE
 void* memset(void* const s __pass_object_size0, int c, size_t n) __overloadable
         /* If you're a user who wants this warning to go away: use `(&memset)(foo, bar, baz)`. */
         __clang_warning_if(c && !n, "'memset' will set 0 bytes; maybe the arguments got flipped?") {
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
     size_t bos = __bos0(s);
-    if (__bos_trivially_not_lt(bos, n)) {
-        return __builtin_memset(s, c, n);
+    if (!__bos_trivially_ge(bos, n)) {
+        return __builtin___memset_chk(s, c, n, bos);
     }
-    return __builtin___memset_chk(s, c, n, bos);
-}
 #endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
+    return __builtin_memset(s, c, n);
+}
 
 #if __ANDROID_API__ >= __ANDROID_API_M__
 __BIONIC_FORTIFY_INLINE
@@ -189,19 +197,19 @@
 }
 #endif /* __ANDROID_API__ >= __ANDROID_API_L__ */
 
-#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
 __BIONIC_FORTIFY_INLINE
 size_t strlcpy(char* const dst __pass_object_size, const char* src, size_t size)
         __overloadable
         __clang_error_if(__bos_unevaluated_lt(__bos(dst), size),
                          "'strlcpy' called with size bigger than buffer") {
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
     size_t bos = __bos(dst);
 
-    if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
-        return __call_bypassing_fortify(strlcpy)(dst, src, size);
+    if (bos != __BIONIC_FORTIFY_UNKNOWN_SIZE) {
+        return __strlcpy_chk(dst, src, size, bos);
     }
-
-    return __strlcpy_chk(dst, src, size, bos);
+#endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
+    return __call_bypassing_fortify(strlcpy)(dst, src, size);
 }
 
 __BIONIC_FORTIFY_INLINE
@@ -209,50 +217,51 @@
         __overloadable
         __clang_error_if(__bos_unevaluated_lt(__bos(dst), size),
                          "'strlcat' called with size bigger than buffer") {
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
     size_t bos = __bos(dst);
 
-    if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
-        return __call_bypassing_fortify(strlcat)(dst, src, size);
+    if (bos != __BIONIC_FORTIFY_UNKNOWN_SIZE) {
+        return __strlcat_chk(dst, src, size, bos);
     }
-
-    return __strlcat_chk(dst, src, size, bos);
+#endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
+    return __call_bypassing_fortify(strlcat)(dst, src, size);
 }
 
 __BIONIC_FORTIFY_INLINE
 size_t strlen(const char* const s __pass_object_size0) __overloadable {
     size_t bos = __bos0(s);
 
-    if (__bos_trivially_gt(bos, __builtin_strlen(s))) {
-        return __builtin_strlen(s);
+#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
+    if (!__bos_trivially_gt(bos, __builtin_strlen(s))) {
+        return __strlen_chk(s, bos);
     }
-
-    return __strlen_chk(s, bos);
-}
 #endif /* __ANDROID_API__ >= __ANDROID_API_J_MR1__ */
+    return __builtin_strlen(s);
+}
 
-#if  __ANDROID_API__ >= __ANDROID_API_J_MR2__
 __BIONIC_FORTIFY_INLINE
 char* strchr(const char* const s __pass_object_size, int c) __overloadable {
+#if  __ANDROID_API__ >= __ANDROID_API_J_MR2__
     size_t bos = __bos(s);
 
-    if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
-        return __builtin_strchr(s, c);
+    if (bos != __BIONIC_FORTIFY_UNKNOWN_SIZE) {
+        return __strchr_chk(s, c, bos);
     }
-
-    return __strchr_chk(s, c, bos);
+#endif /* __ANDROID_API__ >= __ANDROID_API_J_MR2__ */
+    return __builtin_strchr(s, c);
 }
 
 __BIONIC_FORTIFY_INLINE
 char* strrchr(const char* const s __pass_object_size, int c) __overloadable {
+#if  __ANDROID_API__ >= __ANDROID_API_J_MR2__
     size_t bos = __bos(s);
 
-    if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
-        return __builtin_strrchr(s, c);
+    if (bos != __BIONIC_FORTIFY_UNKNOWN_SIZE) {
+        return __strrchr_chk(s, c, bos);
     }
-
-    return __strrchr_chk(s, c, bos);
-}
 #endif /* __ANDROID_API__ >= __ANDROID_API_J_MR2__ */
+    return __builtin_strrchr(s, c);
+}
 
 #if __ANDROID_API__ >= __ANDROID_API_M__
 #if defined(__cplusplus)
