#include #include #include #include int getdate_err; struct tm* getdate(const char* s) { static struct tm tmbuf; struct tm* ret = 0; char* datemsk = getenv("DATEMSK"); FILE* f = 0; char fmt[100], *p; if (!datemsk) { getdate_err = 1; goto out; } f = fopen(datemsk, "rbe"); if (!f) { if (errno == ENOMEM) getdate_err = 6; else getdate_err = 2; goto out; } while (fgets(fmt, sizeof fmt, f)) { p = strptime(s, fmt, &tmbuf); if (p && !*p) { ret = &tmbuf; goto out; } } getdate_err = 7; out: if (f) fclose(f); return ret; }