1 #include <errno.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <time.h>
5 
6 int getdate_err;
7 
getdate(const char * s)8 struct 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;
38 out:
39     if (f)
40         fclose(f);
41     return ret;
42 }
43