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