|
@@ -100,6 +100,7 @@ static inline char *strcat(char *dst, const char *src)
|
|
|
|
|
|
static inline char *strcpy(char *dst, const char *src)
|
|
|
{
|
|
|
+#if __GNUC__ < 4
|
|
|
register int r0 asm("0") = 0;
|
|
|
char *ret = dst;
|
|
|
|
|
@@ -109,10 +110,14 @@ static inline char *strcpy(char *dst, const char *src)
|
|
|
: "+&a" (dst), "+&a" (src) : "d" (r0)
|
|
|
: "cc", "memory");
|
|
|
return ret;
|
|
|
+#else
|
|
|
+ return __builtin_strcpy(dst, src);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
static inline size_t strlen(const char *s)
|
|
|
{
|
|
|
+#if __GNUC__ < 4
|
|
|
register unsigned long r0 asm("0") = 0;
|
|
|
const char *tmp = s;
|
|
|
|
|
@@ -121,6 +126,9 @@ static inline size_t strlen(const char *s)
|
|
|
" jo 0b"
|
|
|
: "+d" (r0), "+a" (tmp) : : "cc");
|
|
|
return r0 - (unsigned long) s;
|
|
|
+#else
|
|
|
+ return __builtin_strlen(s);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
static inline size_t strnlen(const char * s, size_t n)
|