diff options
author | Lennart Poettering <lennart@poettering.net> | 2004-08-14 20:25:32 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2004-08-14 20:25:32 +0000 |
commit | 22cb23eedb2eae7c79dc8fcf395be08bfc666256 (patch) | |
tree | f0993d4a26cb6e311d052b40ac5b8efc1239c145 /polyp/xmalloc.c | |
parent | 1c2ec47cf1506ad1c75c088d476ae382170df62c (diff) |
implement proper refcounting in polyplib
split polyplib to multiple modules
add some prelimenary documentation
add doxygen support
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@123 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/xmalloc.c')
-rw-r--r-- | polyp/xmalloc.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/polyp/xmalloc.c b/polyp/xmalloc.c index 8ff3054d..7d8b4821 100644 --- a/polyp/xmalloc.c +++ b/polyp/xmalloc.c @@ -52,25 +52,36 @@ void *pa_xrealloc(void *ptr, size_t size) { return p; } -char *pa_xstrdup(const char *s) { - if (!s) +void* pa_xmemdup(const void *p, size_t l) { + if (!p) return NULL; else { - char *r = strdup(s); - if (!r) - oom(); - + char *r = pa_xmalloc(l); + memcpy(r, p, l); return r; } } +char *pa_xstrdup(const char *s) { + if (!s) + return NULL; + + return pa_xmemdup(s, strlen(s)+1); +} + char *pa_xstrndup(const char *s, size_t l) { if (!s) return NULL; else { - char *r = strndup(s, l); - if (!r) - oom(); + char *r; + size_t t = strlen(s); + + if (t > l) + t = l; + + r = pa_xmemdup(s, t+1); + r[t] = 0; return r; } } + |