added helper functions unavailable in vxWorks

This commit is contained in:
2015-08-12 12:00:41 +02:00
parent e0f45e09c7
commit 2391ec9cff
4 changed files with 79 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
#include <stdio.h>
#include <stdlib.h>
#include "asprintf.h"
int vasprintf(char** pbuffer, const char* format, va_list ap)
{
va_list ap2;
int len;
FILE* f;
/* print to null device to get required buffer length */
f = fopen("/null","w");
if (f == NULL) return -1;
__va_copy(ap2, ap);
len = vfprintf(f, format, ap2);
va_end(ap2);
fclose(f);
if (len < 0) return len;
*pbuffer = malloc(len+1);
if (*pbuffer == NULL) return -1;
return vsprintf(*pbuffer, format, ap);
}
int asprintf(char** pbuffer, const char* format, ...)
{
va_list ap;
int len;
va_start(ap, format);
len = vasprintf(pbuffer, format, ap);
va_end(ap);
return len;
}
+12
View File
@@ -0,0 +1,12 @@
#ifndef asprintf_h
#define asprintf_h
#ifdef __cplusplus
extern "C" {
#endif
#include <stdarg.h>
int asprintf(char** pbuffer, const char* format, ...) __attribute__((format(printf,2,3)));
int vasprintf(char** pbuffer, const char* format, va_list ap) __attribute__((format(printf,2,0)));
#ifdef __cplusplus
}
#endif
#endif
+22
View File
@@ -0,0 +1,22 @@
#include <string.h>
#include <stdlib.h>
char *strdup(const char *s)
{
char *d = malloc(strlen(s)+1);
if (d) strcpy(d,s);
return d;
}
char *strndup(const char *s, size_t n)
{
size_t l;
char *d;
l = strlen(s);
if (n > l) n = l;
d = malloc(n+1);
strncpy(d,s,l);
d[n] = 0;
return d;
}
+11
View File
@@ -0,0 +1,11 @@
#ifndef strdup_h
#define strdup_h
#ifdef __cplusplus
extern "C" {
#endif
char *strdup(const char *s);
char *strndup(const char *s, size_t n);
#ifdef __cplusplus
}
#endif
#endif