[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 02:24:43 +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 | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c
index bbc38cf..ba2ce51 100644
--- a/kern/ipc_mig.c
+++ b/kern/ipc_mig.c
@@ -272,10 +272,9 @@ 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 number of bytes copied.
*
* Parameters:
*
@@ -285,22 +284,23 @@ mig_put_reply_port(
*
* len - Length of destination buffer.
*/
-void mig_strncpy(dest, src, len)
+vm_size_t
+mig_strncpy(dest, src, len)
char *dest;
const char *src;
int len;
{
+ char *dest_ = dest;
int i;
if (len <= 0)
- return;
+ return 0;
- for (i=1; i<len; i++)
+ for (i=0; i<len; i++)
if (! (*dest++ = *src++))
- return;
+ break;
- *dest = '\0';
- return;
+ return dest - dest_;
}
#define fast_send_right_lookup(name, port, abort)
\
--
1.8.5.2