OSDN Git Service

2007-04-09 Joel Schopp <jschopp@austin.ibm.com>
authorjjohnstn <jjohnstn>
Mon, 9 Apr 2007 16:03:26 +0000 (16:03 +0000)
committerjjohnstn <jjohnstn>
Mon, 9 Apr 2007 16:03:26 +0000 (16:03 +0000)
        * libc/machine/spu/strxfrm.c: Fix strxfrm so we still copy data
        even if the passed in length n is shorter than the source string.
        This matches both the non-spu specific and the glibc strxfrm
        behaviour.

newlib/ChangeLog
newlib/libc/machine/spu/strxfrm.c

index 5b0b6ba..cccd78a 100644 (file)
@@ -1,3 +1,10 @@
+2007-04-09  Joel Schopp <jschopp@austin.ibm.com>
+  
+       * libc/machine/spu/strxfrm.c: Fix strxfrm so we still copy data
+       even if the passed in length n is shorter than the source string.
+       This matches both the non-spu specific and the glibc strxfrm
+       behaviour.
+
 2007-04-04  Mark Mitchell  <mark@codesourcery.com>
 
        * libc/stdlib/__call_atexit.c (__call_exitprocs): Handle atexit
index 6d449ed..02bb9a8 100644 (file)
@@ -34,6 +34,7 @@
 #include <stddef.h>
 #include <string.h>
 
+#define min(a, b)  (a) < (b) ? (a) : (b)
 
 /* The strxfrm() function transforms the src string into a form such that
  * the result of strcmp() on two strings that have been transformed with
@@ -54,13 +55,7 @@ size_t strxfrm(char * __restrict__ dest, const char * __restrict__ src, size_t n
   size_t len;
 
   len = strlen(src);
+  (void)memcpy((void *)dest, (void *)src, min(n,len + 1));
 
-  /* Since the destination is indeterminant if n is less than of equal
-   * to the string length, we skip performing the copy (altogether) in
-   * this case.
-   */
-  if (n > len) {
-    (void)memcpy((void *)dest, (void *)src, n);
-  }
-  return (len);
+  return len;
 }