]> gitweb.michael.orlitzky.com - libsvgtiny.git/commitdiff
Use built-in strndup if the platform we're targetting doesn't have one
authorJohn Mark Bell <jmb@netsurf-browser.org>
Wed, 29 Dec 2010 18:06:04 +0000 (18:06 -0000)
committerJohn Mark Bell <jmb@netsurf-browser.org>
Wed, 29 Dec 2010 18:06:04 +0000 (18:06 -0000)
svn path=/trunk/libsvgtiny/; revision=11140

src/svgtiny.c
src/svgtiny_gradient.c
src/svgtiny_internal.h

index 5a6e98808210e8a261e2d9bec322ce7aa7f9706c..af1db2449e1ea8d0b1d1c7ee1633dfc846d35e2c 100644 (file)
@@ -5,7 +5,6 @@
  * Copyright 2008-2009 James Bursa <james@semichrome.net>
  */
 
-#define _GNU_SOURCE  /* for strndup */
 #include <assert.h>
 #include <math.h>
 #include <setjmp.h>
@@ -1232,3 +1231,23 @@ void svgtiny_free(struct svgtiny_diagram *svg)
        free(svg);
 }
 
+#ifndef HAVE_STRNDUP
+char *strndup(const char *s, size_t n)
+{
+       size_t len;
+       char *s2;
+
+       for (len = 0; len != n && s[len]; len++)
+               continue;
+
+       s2 = malloc(len + 1);
+       if (s2 == NULL)
+               return NULL;
+
+       memcpy(s2, s, len);
+       s2[len] = '\0';
+
+       return s2;
+}
+#endif
+
index 9c6e82ee1e591d7029923fc6e6f3d89277aa2d5a..3a8db7375d7bc0e1b91b89d82975337a4ed1d6fe 100644 (file)
@@ -5,7 +5,6 @@
  * Copyright 2008 James Bursa <james@semichrome.net>
  */
 
-#define _GNU_SOURCE  /* for strndup */
 #include <assert.h>
 #include <math.h>
 #include <string.h>
index 3ea6e7b49d511b7ece2145bb81870156158b492a..13db00e4ffd6841450fb5c1f0b186c27f7cada69 100644 (file)
@@ -63,6 +63,12 @@ void svgtiny_parse_transform(char *s, float *ma, float *mb,
 struct svgtiny_shape *svgtiny_add_shape(struct svgtiny_parse_state *state);
 void svgtiny_transform_path(float *p, unsigned int n,
                struct svgtiny_parse_state *state);
+#if defined(_GNU_SOURCE)
+#define HAVE_STRNDUP
+#else
+#undef HAVE_STRNDUP
+char *strndup(const char *s, size_t n);
+#endif
 
 /* svgtiny_gradient.c */
 void svgtiny_find_gradient(const char *id, struct svgtiny_parse_state *state);