diff options
Diffstat (limited to 'src/datetime.c')
-rw-r--r-- | src/datetime.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/datetime.c b/src/datetime.c index b139a48..87845b6 100644 --- a/src/datetime.c +++ b/src/datetime.c @@ -280,15 +280,13 @@ static int _datetime_strftime(const char *fmts[], const struct tm *tm, char **out, size_t *out_sz, char **buf, size_t *i) { - if (*buf == NULL) { + if (*i == 0) { *buf = calloc(strlen(fmts[0]), sizeof(**buf)); if (*buf == NULL) { fprintf(stderr, "Failed to allocate buffer: %s\n", strerror(errno)); return -1; } - } - if (*out == NULL) { *out_sz = strlen(fmts[0]); *out = calloc(*out_sz, sizeof(**out)); if (*out == NULL) { @@ -325,6 +323,12 @@ datetime_strftime_date(const struct tm *tm, char **out, size_t *out_sz, char **buf, size_t *i) { if (*i >= sizeof(DATETIME_DATE_FMTS_) / sizeof(DATETIME_DATE_FMTS_[0])){ + if (*out != NULL) { + free(*out); + } + if (*buf != NULL) { + free(*buf); + } return 0; } @@ -336,6 +340,12 @@ datetime_strftime_time(const struct tm *tm, char **out, size_t *out_sz, char **buf, size_t *i) { if (*i >= sizeof(DATETIME_TIME_FMTS_) / sizeof(DATETIME_TIME_FMTS_[0])){ + if (*out != NULL) { + free(*out); + } + if (*buf != NULL) { + free(*buf); + } return 0; } @@ -347,6 +357,12 @@ datetime_strftime_misc(const struct tm *tm, char **out, size_t *out_sz, char **buf, size_t *i) { if (*i >= sizeof(DATETIME_MISC_FMTS_) / sizeof(DATETIME_MISC_FMTS_[0])){ + if (*out != NULL) { + free(*out); + } + if (*buf != NULL) { + free(*buf); + } return 0; } |