projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix a possible segmentation fault during key upgrades.
[tinc]
/
src
/
xalloc.h
diff --git
a/src/xalloc.h
b/src/xalloc.h
index
397f7b0
..
28960fb
100644
(file)
--- a/
src/xalloc.h
+++ b/
src/xalloc.h
@@
-20,6
+20,7
@@
#ifndef __TINC_XALLOC_H__
#define __TINC_XALLOC_H__
#ifndef __TINC_XALLOC_H__
#define __TINC_XALLOC_H__
+static inline void *xmalloc(size_t n) __attribute__ ((__malloc__));
static inline void *xmalloc(size_t n) {
void *p = malloc(n);
if(!p)
static inline void *xmalloc(size_t n) {
void *p = malloc(n);
if(!p)
@@
-27,6
+28,7
@@
static inline void *xmalloc(size_t n) {
return p;
}
return p;
}
+static inline void *xzalloc(size_t n) __attribute__ ((__malloc__));
static inline void *xzalloc(size_t n) {
void *p = calloc(1, n);
if(!p)
static inline void *xzalloc(size_t n) {
void *p = calloc(1, n);
if(!p)
@@
-41,6
+43,7
@@
static inline void *xrealloc(void *p, size_t n) {
return p;
}
return p;
}
+static inline char *xstrdup(const char *s) __attribute__ ((__malloc__));
static inline char *xstrdup(const char *s) {
char *p = strdup(s);
if(!p)
static inline char *xstrdup(const char *s) {
char *p = strdup(s);
if(!p)
@@
-49,12
+52,21
@@
static inline char *xstrdup(const char *s) {
}
static inline int xvasprintf(char **strp, const char *fmt, va_list ap) {
}
static inline int xvasprintf(char **strp, const char *fmt, va_list ap) {
+#ifdef HAVE_MINGW
+ char buf[1024];
+ int result = vsnprintf(buf, sizeof buf, fmt, ap);
+ if(result < 0)
+ abort();
+ *strp = xstrdup(buf);
+#else
int result = vasprintf(strp, fmt, ap);
if(result < 0)
abort();
int result = vasprintf(strp, fmt, ap);
if(result < 0)
abort();
+#endif
return result;
}
return result;
}
+static inline int xasprintf(char **strp, const char *fmt, ...) __attribute__ ((__format__(printf, 2, 3)));
static inline int xasprintf(char **strp, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
static inline int xasprintf(char **strp, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);