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>
This commit is contained in:
Dirk Hohndel 2015-05-31 23:12:30 -07:00
parent 5bbcc7f16d
commit e84d8624bb
4 changed files with 25 additions and 19 deletions

View file

@ -12,6 +12,7 @@
#include "dive.h"
#include "membuffer.h"
#include "strndup.h"
/*
* The libgit2 people are incompetent at making libraries. They randomly change

View file

@ -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 {

View file

@ -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);

21
strndup.h Normal file
View file

@ -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 */