]> code.delx.au - pulseaudio/blobdiff - polyp/xmalloc.c
rename some stuff
[pulseaudio] / polyp / xmalloc.c
index 8ff3054daad5b181804ee7890b727e7032d287b0..47f46bbe55ed7a8c9d50b40b0e80086f31ecde0b 100644 (file)
@@ -1,3 +1,28 @@
+/* $Id$ */
+
+/***
+  This file is part of polypaudio.
+  polypaudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 2 of the License,
+  or (at your option) any later version.
+  polypaudio is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  General Public License for more details.
+  You should have received a copy of the GNU General Public License
+  along with polypaudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdlib.h>
 #include <signal.h>
 #include <assert.h>
@@ -52,25 +77,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;
     }
 }
+