From a065b5f6c8b01327dcf795c9fe8d745c627c960b Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Tue, 31 Aug 2021 21:16:20 -0400 Subject: datetime: Free fmt bufs when iterators reach end Simplifies caller code. --- (limited to 'src/datetime.c') 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; } -- cgit v0.9.1