summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datetime.c22
-rw-r--r--src/main.c33
2 files changed, 22 insertions, 33 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;
}
diff --git a/src/main.c b/src/main.c
index f450281..19b5334 100644
--- a/src/main.c
+++ b/src/main.c
@@ -92,49 +92,22 @@ _list_formats(void)
tm = localtime(&tim);
puts("Time formats:");
- out = NULL;
- out_sz = 0;
- buf = NULL;
- i = 0;
+ i = 0;
while (datetime_strftime_time(tm, &out, &out_sz, &buf, &i) > 0) {
printf(" * %s\n", out);
}
- if (out != NULL) {
- free(out);
- }
- if (buf != NULL) {
- free(buf);
- }
puts("Date formats:");
- out = NULL;
- out_sz = 0;
- buf = NULL;
- i = 0;
+ i = 0;
while (datetime_strftime_date(tm, &out, &out_sz, &buf, &i) > 0) {
printf(" * %s\n", out);
}
- if (out != NULL) {
- free(out);
- }
- if (buf != NULL) {
- free(buf);
- }
puts("Additional formats:");
- out = NULL;
- out_sz = 0;
- buf = NULL;
- i = 0;
+ i = 0;
while (datetime_strftime_misc(tm, &out, &out_sz, &buf, &i) > 0) {
printf(" * %s\n", out);
}
- if (out != NULL) {
- free(out);
- }
- if (buf != NULL) {
- free(buf);
- }
}
static void