]> Git Repo - J-u-boot.git/blobdiff - lib/string.c
Merge patch series "cmd: Add support for optee commands."
[J-u-boot.git] / lib / string.c
index ba176fb08f73710fc0d22bbec4312108517fa8d1..feae9519f2f62e4b959a4a9d28fdb279f370808d 100644 (file)
@@ -22,7 +22,6 @@
 #include <linux/ctype.h>
 #include <malloc.h>
 
-
 /**
  * strncasecmp - Case insensitive, length-limited string comparison
  * @s1: One string
@@ -116,20 +115,18 @@ char * strncpy(char * dest,const char *src,size_t count)
  * of course, the buffer size is zero). It does not pad
  * out the result like strncpy() does.
  *
- * Return: the number of bytes copied
+ * Return: strlen(src)
  */
 size_t strlcpy(char *dest, const char *src, size_t size)
 {
-       if (size) {
-               size_t srclen = strlen(src);
-               size_t len = (srclen >= size) ? size - 1 : srclen;
+       size_t ret = strlen(src);
 
+       if (size) {
+               size_t len = (ret >= size) ? size - 1 : ret;
                memcpy(dest, src, len);
                dest[len] = '\0';
-               return len + 1;
        }
-
-       return 0;
+       return ret;
 }
 #endif
 
@@ -191,6 +188,8 @@ char * strncat(char *dest, const char *src, size_t count)
  * Compatible with *BSD: the result is always a valid NUL-terminated string that
  * fits in the buffer (unless, of course, the buffer size is zero). It does not
  * write past @size like strncat() does.
+ *
+ * Return: min(strlen(dest), size) + strlen(src)
  */
 size_t strlcat(char *dest, const char *src, size_t size)
 {
@@ -206,16 +205,20 @@ size_t strlcat(char *dest, const char *src, size_t size)
  * @cs: One string
  * @ct: Another string
  */
-int strcmp(const char * cs,const char * ct)
+int strcmp(const char *cs, const char *ct)
 {
-       register signed char __res;
+       int ret;
 
        while (1) {
-               if ((__res = *cs - *ct++) != 0 || !*cs++)
+               unsigned char a = *cs++;
+               unsigned char b = *ct++;
+
+               ret = a - b;
+               if (ret || !b)
                        break;
        }
 
-       return __res;
+       return ret;
 }
 #endif
 
@@ -226,17 +229,20 @@ int strcmp(const char * cs,const char * ct)
  * @ct: Another string
  * @count: The maximum number of bytes to compare
  */
-int strncmp(const char * cs,const char * ct,size_t count)
+int strncmp(const char *cs, const char *ct, size_t count)
 {
-       register signed char __res = 0;
+       int ret = 0;
+
+       while (count--) {
+               unsigned char a = *cs++;
+               unsigned char b = *ct++;
 
-       while (count) {
-               if ((__res = *cs - *ct++) != 0 || !*cs++)
+               ret = a - b;
+               if (ret || !b)
                        break;
-               count--;
        }
 
-       return __res;
+       return ret;
 }
 #endif
 
@@ -659,6 +665,19 @@ void * memscan(void * addr, int c, size_t size)
 }
 #endif
 
+char *memdup(const void *src, size_t len)
+{
+       char *p;
+
+       p = malloc(len);
+       if (!p)
+               return NULL;
+
+       memcpy(p, src, len);
+
+       return p;
+}
+
 #ifndef __HAVE_ARCH_STRSTR
 /**
  * strstr - Find the first substring in a %NUL terminated string
This page took 0.028239 seconds and 4 git commands to generate.