bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] kern: fix mig_strncpy


From: Justus Winter
Subject: [PATCH] kern: fix mig_strncpy
Date: Sat, 22 Feb 2014 11:25:14 +0100

Previously, the function mig_strncpy would always zero-terminate the
destination string.  Make mig_strncpy behave like mig_strncpy and
strncpy in the glibc.  Also fix the implementation of mig_strncpy to
return the length of the written string to align the implementation
with the declaration in include/mach/mig_support.h.

* kern/ipc_mig.c (mig_strncpy): Do not zero-terminate the destination
string.  Return length of destination string.
---
 kern/ipc_mig.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c
index bbc38cf..f2c3f45 100644
--- a/kern/ipc_mig.c
+++ b/kern/ipc_mig.c
@@ -272,10 +272,10 @@ mig_put_reply_port(
 /*
  * mig_strncpy.c - by Joshua Block
  *
- * mig_strncp -- Bounded string copy.  Does what the library routine strncpy
- * OUGHT to do:  Copies the (null terminated) string in src into dest, a
- * buffer of length len.  Assures that the copy is still null terminated
- * and doesn't overflow the buffer, truncating the copy if necessary.
+ * mig_strncpy -- Bounded string copy.  Does what the library routine
+ * strncpy does: Copies the (null terminated) string in src into dest,
+ * a buffer of length len.  Returns the length of the destination
+ * string excluding the terminating null.
  *
  * Parameters:
  *
@@ -285,22 +285,26 @@ mig_put_reply_port(
  *
  *     len - Length of destination buffer.
  */
-void mig_strncpy(dest, src, len)
-char *dest;
-const char *src;
-int len;
+vm_size_t
+mig_strncpy(dest, src, len)
+       char *dest;
+       const char *src;
+       int len;
 {
-    int i;
+       char *dest_ = dest;
+       int i;
 
-    if (len <= 0)
-       return;
+       if (len <= 0)
+               return 0;
 
-    for (i=1; i<len; i++)
-       if (! (*dest++ = *src++))
-           return;
+       for (i = 0; i < len; i++) {
+               if (! (*dest = *src))
+                       break;
+               dest++;
+               src++;
+       }
 
-    *dest = '\0';
-    return;
+       return dest - dest_;
 }
 
 #define        fast_send_right_lookup(name, port, abort)                       
\
-- 
1.8.5.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]