summaryrefslogtreecommitdiff
path: root/xrdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'xrdb.c')
-rw-r--r--xrdb.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/xrdb.c b/xrdb.c
index a183199..6455b93 100644
--- a/xrdb.c
+++ b/xrdb.c
@@ -168,25 +168,24 @@ asprintf(char **ret, const char *format, ...)
if (len < 0)
return -1;
+ *ret = malloc(len + 1); /* snprintf doesn't count trailing '\0' */
+ if (*ret == NULL)
+ return -1;
+
if (len < sizeof(buf)) {
- *ret = strdup(buf);
+ memcpy(*ret, buf, len + 1);
}
else {
- *ret = malloc(len + 1); /* snprintf doesn't count trailing '\0' */
- if (*ret != NULL) {
- va_start(ap, format);
- len = vsnprintf(*ret, len + 1, format, ap);
- va_end(ap);
- if (len < 0) {
- free(*ret);
- *ret = NULL;
- }
+ va_start(ap, format);
+ len = vsnprintf(*ret, len + 1, format, ap);
+ va_end(ap);
+ if (len < 0) {
+ free(*ret);
+ *ret = NULL;
+ return -1;
}
}
- if (*ret == NULL)
- return -1;
-
return len;
}
#endif /* HAVE_ASPRINTF */