xutil: Implement xstrndup without relying on strndup.

Since we need to do this for portability, (some systems don't have a
strndup function), we might as well do it unconditionally. There's
almost no disadvantage to doing so, and this has the advantages of not
requiring a configure-time check nor having two different
implementations, one of which would often be less tested.
This commit is contained in:
Carl Worth 2009-12-01 12:51:39 -08:00
parent e5316b320a
commit 8b445212e4
2 changed files with 6 additions and 4 deletions

2
TODO
View file

@ -41,8 +41,6 @@ Portability
-----------
Fix configure script to test each compiler warning we want to use.
Implement strndup locally (or call talloc_strndup instead).
Implement getline locally, (look at gnulib).
Completion

View file

@ -18,7 +18,6 @@
* Author: Carl Worth <cworth@cworth.org>
*/
#define _GNU_SOURCE /* For strndup */
#include "notmuch-private.h"
#include <stdio.h>
@ -84,11 +83,16 @@ xstrndup (const char *s, size_t n)
{
char *ret;
ret = strndup (s, n);
if (strlen (s) <= n)
n = strlen (s);
ret = malloc (n + 1);
if (ret == NULL) {
fprintf (stderr, "Out of memory.\n");
exit (1);
}
memcpy (ret, s, n);
ret[n] = '\0';
return ret;
}