summaryrefslogtreecommitdiffstats
path: root/polyp/xmalloc.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-08-14 20:25:32 +0000
committerLennart Poettering <lennart@poettering.net>2004-08-14 20:25:32 +0000
commit22cb23eedb2eae7c79dc8fcf395be08bfc666256 (patch)
treef0993d4a26cb6e311d052b40ac5b8efc1239c145 /polyp/xmalloc.c
parent1c2ec47cf1506ad1c75c088d476ae382170df62c (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.c29
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;
}
}
+