From 9a079266dd8c798d1a6e90f41e9bf719c874fbc9 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Thu, 24 Apr 2003 21:58:34 +0000 Subject: [PATCH] Add pool_strndup --- lib/mm/pool-debug.c | 12 ++++++++++++ lib/mm/pool-fast.c | 12 ++++++++++++ lib/mm/pool.h | 1 + 3 files changed, 25 insertions(+) diff --git a/lib/mm/pool-debug.c b/lib/mm/pool-debug.c index ecb92e63c..9065346ca 100644 --- a/lib/mm/pool-debug.c +++ b/lib/mm/pool-debug.c @@ -205,3 +205,15 @@ char *pool_strdup(struct pool *p, const char *str) return ret; } + +char *pool_strndup(struct pool *p, const char *str, size_t n) +{ + char *ret = pool_alloc(p, n + 1); + + if (ret) { + strncpy(ret, str, n); + ret[n] = '\0'; + } + + return ret; +} diff --git a/lib/mm/pool-fast.c b/lib/mm/pool-fast.c index 423d60a78..9d40e9391 100644 --- a/lib/mm/pool-fast.c +++ b/lib/mm/pool-fast.c @@ -205,6 +205,18 @@ char *pool_strdup(struct pool *p, const char *str) return ret; } +char *pool_strndup(struct pool *p, const char *str, size_t n) +{ + char *ret = pool_alloc(p, n + 1); + + if (ret) { + strncpy(ret, str, n); + ret[n] = '\0'; + } + + return ret; +} + void _align_chunk(struct chunk *c, unsigned alignment) { c->begin += alignment - ((unsigned long) c->begin & (alignment - 1)); diff --git a/lib/mm/pool.h b/lib/mm/pool.h index bb03dee23..4e82617dc 100644 --- a/lib/mm/pool.h +++ b/lib/mm/pool.h @@ -106,6 +106,7 @@ void pool_abandon_object(struct pool *p); /* utilities */ char *pool_strdup(struct pool *p, const char *str); +char *pool_strndup(struct pool *p, const char *str, size_t n); static inline void *pool_zalloc(struct pool *p, size_t s) { -- 2.43.5