int main(int argc, char **argv) { e2fsck_t ctx; struct string s; putenv("TZ=EST+5:00"); e2fsck_allocate_context(&ctx); expand_logfn(ctx, "e2fsck-%N.%h.%u.%D-%T", &s); printf("%s\n", s.s); free(s.s); expand_logfn(ctx, "e2fsck-%N.%h.%u.%Y%m%d-%H%M%S", &s); printf("%s\n", s.s); free(s.s); return 0; }
static FILE *set_up_log_file(e2fsck_t ctx, const char *key, const char *fn) { FILE *f = NULL; struct string s, s1, s2; char *s0 = 0, *log_dir = 0, *log_fn = 0; int log_dir_wait = 0; s.s = s1.s = s2.s = 0; profile_get_boolean(ctx->profile, "options", "log_dir_wait", 0, 0, &log_dir_wait); if (fn) log_fn = string_copy(ctx, fn, 0); else profile_get_string(ctx->profile, "options", key, 0, 0, &log_fn); profile_get_string(ctx->profile, "options", "log_dir", 0, 0, &log_dir); if (!log_fn || !log_fn[0]) goto out; expand_logfn(ctx, log_fn, &s); if ((log_fn[0] == '/') || !log_dir || !log_dir[0]) s0 = s.s; if (log_dir && log_dir[0]) { alloc_string(&s1, strlen(log_dir) + strlen(s.s) + 2); append_string(&s1, log_dir, 0); append_string(&s1, "/", 1); append_string(&s1, s.s, 0); } free(log_dir); profile_get_string(ctx->profile, "options", "log_dir_fallback", 0, 0, &log_dir); if (log_dir && log_dir[0]) { alloc_string(&s2, strlen(log_dir) + strlen(s.s) + 2); append_string(&s2, log_dir, 0); append_string(&s2, "/", 1); append_string(&s2, s.s, 0); printf("%s\n", s2.s); } if (s0) f = fopen(s0, "w"); if (!f && s1.s) f = fopen(s1.s, "w"); if (!f && s2.s) f = fopen(s2.s, "w"); if (!f && log_dir_wait) f = save_output(s0, s1.s, s2.s); out: free(s.s); free(s1.s); free(s2.s); free(log_fn); free(log_dir); return f; }