summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-11-08 22:00:06 +0100
committerRichard Braun <rbraun@sceen.net>2012-11-08 22:00:06 +0100
commitc8ba9280fafe518ada8a6d2a545d6afa2b2dbe23 (patch)
tree32271289300ae7bd67d2ce1819b40d0fd6ca94f5
parentaf35c0c34f1e1bafaf5acf058daba2314dfc7e1f (diff)
kern/string: implement strlcpy
-rw-r--r--kern/kmem.c2
-rw-r--r--kern/string.c18
-rw-r--r--kern/string.h1
-rw-r--r--vm/vm_phys.c2
4 files changed, 21 insertions, 2 deletions
diff --git a/kern/kmem.c b/kern/kmem.c
index 70aeebb6..be2c78c7 100644
--- a/kern/kmem.c
+++ b/kern/kmem.c
@@ -578,7 +578,7 @@ kmem_cache_init(struct kmem_cache *cache, const char *name, size_t obj_size,
cache->ctor = ctor;
cache->slab_alloc_fn = slab_alloc_fn;
cache->slab_free_fn = slab_free_fn;
- strcpy(cache->name, name); /* TODO: strlcpy */
+ strlcpy(cache->name, name, sizeof(cache->name));
cache->buftag_dist = 0;
cache->redzone_pad = 0;
diff --git a/kern/string.c b/kern/string.c
index 82bcd2f1..2122af6a 100644
--- a/kern/string.c
+++ b/kern/string.c
@@ -121,6 +121,24 @@ strcpy(char *dest, const char *src)
return tmp;
}
+size_t
+strlcpy(char *dest, const char *src, size_t n)
+{
+ size_t len;
+
+ len = strlen(src);
+
+ if (n == 0)
+ goto out;
+
+ n = (len < n) ? len : n - 1;
+ memcpy(dest, src, n);
+ dest[n] = '\0';
+
+out:
+ return len;
+}
+
int
strcmp(const char *s1, const char *s2)
{
diff --git a/kern/string.h b/kern/string.h
index 8dd4d9d0..238d0e73 100644
--- a/kern/string.h
+++ b/kern/string.h
@@ -26,6 +26,7 @@ void * memset(void *s, int c, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
size_t strlen(const char *s);
char * strcpy(char *dest, const char *src);
+size_t strlcpy(char *dest, const char *src, size_t n);
int strcmp(const char *s1, const char *s2);
#endif /* _KERN_STRING_H */
diff --git a/vm/vm_phys.c b/vm/vm_phys.c
index 9fcc7cc9..64a3cb61 100644
--- a/vm/vm_phys.c
+++ b/vm/vm_phys.c
@@ -478,7 +478,7 @@ vm_phys_load(const char *name, phys_addr_t start, phys_addr_t end,
list_insert_tail(seg_list, &seg->node);
seg->start = start;
seg->end = end;
- strcpy(seg->name, name); /* TODO: strlcpy */
+ strlcpy(seg->name, name, sizeof(seg->name));
boot_seg->avail_start = avail_start;
boot_seg->avail_end = avail_end;