1#include <errno.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <time.h>
5
6int getdate_err;
7
8struct tm* getdate(const char* s) {
9    static struct tm tmbuf;
10    struct tm* ret = 0;
11    char* datemsk = getenv("DATEMSK");
12    FILE* f = 0;
13    char fmt[100], *p;
14
15    if (!datemsk) {
16        getdate_err = 1;
17        goto out;
18    }
19
20    f = fopen(datemsk, "rbe");
21    if (!f) {
22        if (errno == ENOMEM)
23            getdate_err = 6;
24        else
25            getdate_err = 2;
26        goto out;
27    }
28
29    while (fgets(fmt, sizeof fmt, f)) {
30        p = strptime(s, fmt, &tmbuf);
31        if (p && !*p) {
32            ret = &tmbuf;
33            goto out;
34        }
35    }
36
37    getdate_err = 7;
38out:
39    if (f)
40        fclose(f);
41    return ret;
42}
43