diff options
-rw-r--r-- | kern/kmem.c | 2 | ||||
-rw-r--r-- | kern/string.c | 18 | ||||
-rw-r--r-- | kern/string.h | 1 | ||||
-rw-r--r-- | vm/vm_phys.c | 2 |
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; |