mirror of https://git.musl-libc.org/git/musl
1 changed files with 47 additions and 0 deletions
@ -0,0 +1,47 @@ |
|||
#include <time.h> |
|||
#include <pthread.h> |
|||
#include <errno.h> |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
|
|||
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; |
|||
int cs; |
|||
|
|||
pthread_setcancelstate(PTHREAD_CANCEL_DEFERRED, &cs); |
|||
|
|||
if (!datemsk) { |
|||
getdate_err = 1; |
|||
goto out; |
|||
} |
|||
|
|||
f = fopen(datemsk, "r"); |
|||
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); |
|||
dprintf(2, "%s %s\n", s, fmt); |
|||
dprintf(2, "%p %d\n", p, p?*p:0); |
|||
if (p && !*p) { |
|||
ret = &tmbuf; |
|||
goto out; |
|||
} |
|||
} |
|||
|
|||
getdate_err = 7; |
|||
out: |
|||
if (f) fclose(f); |
|||
pthread_setcancelstate(cs, 0); |
|||
return ret; |
|||
} |
|||
Loading…
Reference in new issue