summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-05-31 23:12:30 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-05-31 23:14:56 -0700
commite84d8624bb1790ae46d3c7a7b642effb9090b65d (patch)
treecc565f9b92c7244f0ff5fb6429b5ce33faf0dab0
parent5bbcc7f16ddb1315dbd4a7a43034cddf8c9f2a36 (diff)
downloadsubsurface-e84d8624bb1790ae46d3c7a7b642effb9090b65d.tar.gz
Add strndup.h header so we can use this useful function
It's missing on Windows... we had this helper in liquivision.c but since I used the function in git-access.c I figured I should just turn it into a little helper. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--git-access.c1
-rw-r--r--liquivision.c17
-rw-r--r--save-xml.c5
-rw-r--r--strndup.h21
4 files changed, 25 insertions, 19 deletions
diff --git a/git-access.c b/git-access.c
index 521d552e9..ca0f3a161 100644
--- a/git-access.c
+++ b/git-access.c
@@ -12,6 +12,7 @@
#include "dive.h"
#include "membuffer.h"
+#include "strndup.h"
/*
* The libgit2 people are incompetent at making libraries. They randomly change
diff --git a/liquivision.c b/liquivision.c
index 6eefdc123..cabfa0b17 100644
--- a/liquivision.c
+++ b/liquivision.c
@@ -3,7 +3,7 @@
#include "dive.h"
#include "divelist.h"
#include "file.h"
-
+#include "strndup.h"
// Convert bytes into an INT
#define array_uint16_le(p) ((unsigned int) (p)[0] \
@@ -12,21 +12,6 @@
+ ((p)[1]<<8) + ((p)[2]<<16) \
+ ((p)[3]<<24))
-#if __WIN32__
-static char *strndup (const char *s, size_t n)
-{
- char *cpy;
- size_t len = strlen(s);
- if (n < len)
- len = n;
- if ((cpy = malloc(len + 1)) != NULL) {
- cpy[len] = '\0';
- memcpy(cpy, s, len);
- }
- return cpy;
-}
-#endif
-
struct lv_event {
time_t time;
struct pressure {
diff --git a/save-xml.c b/save-xml.c
index 15c667d35..173f6a8ec 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -10,6 +10,7 @@
#include "dive.h"
#include "device.h"
#include "membuffer.h"
+#include "strndup.h"
/*
* We're outputting utf8 in xml.
@@ -45,9 +46,7 @@ static void show_utf8(struct membuffer *b, const char *text, const char *pre, co
return;
while (len && isascii(text[len - 1]) && isspace(text[len - 1]))
len--;
- /* strndup would be easier, but that doesn't appear to exist on Windows / Mac */
- cleaned = strdup(text);
- cleaned[len] = '\0';
+ cleaned = strndup(text, len);
put_string(b, pre);
quote(b, cleaned, is_attribute);
put_string(b, post);
diff --git a/strndup.h b/strndup.h
new file mode 100644
index 000000000..84e18b60f
--- /dev/null
+++ b/strndup.h
@@ -0,0 +1,21 @@
+#ifndef STRNDUP_H
+#define STRNDUP_H
+#if __WIN32__
+static char *strndup (const char *s, size_t n)
+{
+ char *cpy;
+ size_t len = strlen(s);
+ if (n < len)
+ len = n;
+ if ((cpy = malloc(len + 1)) !=
+ NULL) {
+ cpy[len] =
+ '\0';
+ memcpy(cpy,
+ s,
+ len);
+ }
+ return cpy;
+}
+#endif
+#endif /* STRNDUP_H */