summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-08 08:37:22 +0000
committerrsc <rsc>2007-08-08 08:37:22 +0000
commit7e89fb90bd0beb91e5d67af362d6a8a3a1b4c626 (patch)
tree480c122b6dd99c786e5f4dda5ba4ec96777fd767
parentcd08e6e065370611ea0cde431af222cf3420ca56 (diff)
downloadxv6-labs-7e89fb90bd0beb91e5d67af362d6a8a3a1b4c626.tar.gz
xv6-labs-7e89fb90bd0beb91e5d67af362d6a8a3a1b4c626.tar.bz2
xv6-labs-7e89fb90bd0beb91e5d67af362d6a8a3a1b4c626.zip
add safestrcpy
-rw-r--r--defs.h1
-rw-r--r--string.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/defs.h b/defs.h
index 31a3d75..8b2aac5 100644
--- a/defs.h
+++ b/defs.h
@@ -39,6 +39,7 @@ void* memset(void*, int, uint);
int memcmp(const void*, const void*, uint);
void* memmove(void*, const void*, uint);
int strncmp(const char*, const char*, uint);
+char* safestrcpy(char*, const char*, int);
// syscall.c
void syscall(void);
diff --git a/string.c b/string.c
index 540a7d4..dc73266 100644
--- a/string.c
+++ b/string.c
@@ -57,3 +57,19 @@ strncmp(const char *p, const char *q, uint n)
else
return (int) ((uchar) *p - (uchar) *q);
}
+
+// Like strncpy but guaranteed to NUL-terminate.
+char*
+safestrcpy(char *s, const char *t, int n)
+{
+ char *os;
+
+ os = s;
+ if(n <= 0)
+ return os;
+ while(--n > 0 && (*s++ = *t++) != 0)
+ ;
+ *s = 0;
+ return os;
+}
+