diff src/stdlib/SDL_string.c @ 1379:c0a74f199ecf

Use only safe string functions
author Sam Lantinga <slouken@libsdl.org>
date Sun, 19 Feb 2006 23:46:34 +0000
parents c71e05b4dc2e
children d910939febfa
line wrap: on
line diff
--- a/src/stdlib/SDL_string.c	Sun Feb 19 23:38:57 2006 +0000
+++ b/src/stdlib/SDL_string.c	Sun Feb 19 23:46:34 2006 +0000
@@ -294,39 +294,38 @@
 }
 #endif
 
-#ifndef HAVE_STRCPY
-char *SDL_strcpy(char *dst, const char *src)
+#ifndef HAVE_STRLCPY
+size_t SDL_strlcpy(char *dst, const char *src, size_t maxlen)
 {
-    char *dstp = dst;
-    while ( *src ) {
-        *dstp++ = *src++;
+    size_t srclen = SDL_strlen(src);
+    if ( maxlen > 0 ) {
+        size_t len = SDL_min(srclen, maxlen-1);
+        SDL_memcpy(dst, src, len);
+        dst[len] = '\0';
     }
-    *dstp = '\0';
-
-    return dst;
+    return srclen;
 }
 #endif
 
-#ifndef HAVE_STRNCPY
-char *SDL_strncpy(char *dst, const char *src, size_t maxlen)
+#ifndef HAVE_STRLCAT
+size_t SDL_strlcat(char *dst, const char *src, size_t maxlen)
 {
-    char *dstp = dst;
-    while ( maxlen-- && *src ) {
-        *dstp++ = *src++;
+    size_t dstlen = SDL_strlen(dst);
+    size_t srclen = SDL_strlen(src);
+    if ( dstlen < maxlen ) {
+        SDL_strlcpy(dst+dstlen, src, maxlen-dstlen);
     }
-    *dstp = '\0';
-
-    return dst;
+    return dstlen+srclen;
 }
 #endif
 
 #ifndef HAVE_STRDUP
 char *SDL_strdup(const char *string)
 {
-    size_t len = SDL_strlen(string);
-    char *newstr = SDL_malloc(len+1);
+    size_t len = SDL_strlen(string)+1;
+    char *newstr = SDL_malloc(len);
     if ( newstr ) {
-        SDL_strcpy(newstr, string);
+        SDL_strlcpy(newstr, string, len);
     }
     return newstr;
 }
@@ -912,7 +911,7 @@
     if ( size > maxlen ) {
         size = maxlen;
     }
-    SDL_strncpy(text, num, size);
+    SDL_strlcpy(text, num, size);
 
     return size;
 }
@@ -926,7 +925,7 @@
     if ( size > maxlen ) {
         size = maxlen;
     }
-    SDL_strncpy(text, num, size);
+    SDL_strlcpy(text, num, size);
 
     return size;
 }
@@ -941,7 +940,7 @@
     if ( size > maxlen ) {
         size = maxlen;
     }
-    SDL_strncpy(text, num, size);
+    SDL_strlcpy(text, num, size);
 
     return size;
 }
@@ -955,7 +954,7 @@
     if ( size > maxlen ) {
         size = maxlen;
     }
-    SDL_strncpy(text, num, size);
+    SDL_strlcpy(text, num, size);
 
     return size;
 }