summaryrefslogtreecommitdiffstats
path: root/audio/libcanberra/files/patch-src_malloc.h
blob: 58efa3096a045ee088adaf4a461331f3586002cb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--- src/malloc.h.orig   2008-06-10 10:42:46.000000000 -0400
+++ src/malloc.h    2008-08-05 23:34:40.000000000 -0400
@@ -31,6 +31,32 @@
 #define ca_free free
 #define ca_malloc0(size) calloc(1, (size))
 #define ca_strdup strdup
+#ifdef __FreeBSD__
+static inline char *strndup (const char *s, size_t n)
+{
+   size_t nAvail;
+   char *p;
+
+   if (!s) {
+       return NULL;
+   }
+
+   if (memchr (s, '\0', n) != NULL) {
+       nAvail = strlen (s);
+       if (nAvail > n)
+           nAvail = n;
+   } else {
+       nAvail = n;
+   }
+   p = ca_malloc (nAvail + 1);
+   if (p == NULL)
+       return NULL;
+   memcpy (p, s, nAvail);
+   p[nAvail] = '\0';
+
+   return p;
+}
+#endif
 #define ca_strndup strndup
 
 void* ca_memdup(const void* p, size_t size);