int calendar_spec_to_string(const CalendarSpec *c, char **p) { char *buf = NULL; size_t sz = 0; FILE *f; int r; assert(c); assert(p); f = open_memstream(&buf, &sz); if (!f) return -ENOMEM; if (c->weekdays_bits > 0 && c->weekdays_bits <= BITS_WEEKDAYS) { format_weekdays(f, c); fputc(' ', f); } format_chain(f, 4, c->year, false); fputc('-', f); format_chain(f, 2, c->month, false); fputc(c->end_of_month ? '~' : '-', f); format_chain(f, 2, c->day, false); fputc(' ', f); format_chain(f, 2, c->hour, false); fputc(':', f); format_chain(f, 2, c->minute, false); fputc(':', f); format_chain(f, 2, c->microsecond, true); if (c->utc) fputs(" UTC", f); else if (IN_SET(c->dst, 0, 1)) { /* If daylight saving is explicitly on or off, let's show the used timezone. */ tzset(); if (!isempty(tzname[c->dst])) { fputc(' ', f); fputs(tzname[c->dst], f); } } r = fflush_and_check(f); if (r < 0) { free(buf); fclose(f); return r; } fclose(f); *p = buf; return 0; }
int calendar_spec_to_string(const CalendarSpec *c, char **p) { char *buf = NULL; size_t sz = 0; FILE *f; int r; assert(c); assert(p); f = open_memstream(&buf, &sz); if (!f) return -ENOMEM; if (c->weekdays_bits > 0 && c->weekdays_bits <= BITS_WEEKDAYS) { format_weekdays(f, c); fputc(' ', f); } format_chain(f, 4, c->year); fputc('-', f); format_chain(f, 2, c->month); fputc('-', f); format_chain(f, 2, c->day); fputc(' ', f); format_chain(f, 2, c->hour); fputc(':', f); format_chain(f, 2, c->minute); fputc(':', f); format_chain(f, 2, c->second); if (c->utc) fputs(" UTC", f); r = fflush_and_check(f); if (r < 0) { free(buf); fclose(f); return r; } fclose(f); *p = buf; return 0; }
int calendar_spec_to_string(const CalendarSpec *c, char **p) { char *buf = NULL; size_t sz = 0; FILE *f; assert(c); assert(p); f = open_memstream(&buf, &sz); if (!f) return -ENOMEM; if (c->weekdays_bits > 0 && c->weekdays_bits <= 127) { format_weekdays(f, c); fputc(' ', f); } format_chain(f, 4, c->year); fputc('-', f); format_chain(f, 2, c->month); fputc('-', f); format_chain(f, 2, c->day); fputc(' ', f); format_chain(f, 2, c->hour); fputc(':', f); format_chain(f, 2, c->minute); fputc(':', f); format_chain(f, 2, c->second); fflush(f); if (ferror(f)) { free(buf); fclose(f); return -ENOMEM; } fclose(f); *p = buf; return 0; }