summaryrefslogtreecommitdiffstats
path: root/src/datetime.c
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-31 21:16:20 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-31 21:16:20 (EDT)
commita065b5f6c8b01327dcf795c9fe8d745c627c960b (patch)
treed3e8d56f88897941a7f9ceba63f914e305e3495e /src/datetime.c
parentd6340b0ccdca2efb2dedab368701728dc9fecb59 (diff)
downloadatsign-a065b5f6c8b01327dcf795c9fe8d745c627c960b.zip
atsign-a065b5f6c8b01327dcf795c9fe8d745c627c960b.tar.gz
atsign-a065b5f6c8b01327dcf795c9fe8d745c627c960b.tar.bz2
datetime: Free fmt bufs when iterators reach end
Simplifies caller code.
Diffstat (limited to 'src/datetime.c')
-rw-r--r--src/datetime.c22
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;
}