#include <limits.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/mman.h>
#include "libc.h"
+#include "lock.h"
long __timezone = 0;
int __daylight = 0;
int i;
if (**p == '<') {
++*p;
- for (i=0; (*p)[i]!='>' && i<TZNAME_MAX; i++)
- d[i] = (*p)[i];
- ++*p;
+ for (i=0; (*p)[i] && (*p)[i]!='>'; i++)
+ if (i<TZNAME_MAX) d[i] = (*p)[i];
+ if ((*p)[i]) ++*p;
} else {
- for (i=0; ((*p)[i]|32)-'a'<26U && i<TZNAME_MAX; i++)
- d[i] = (*p)[i];
+ for (i=0; ((*p)[i]|32)-'a'<26U; i++)
+ if (i<TZNAME_MAX) d[i] = (*p)[i];
}
*p += i;
- d[i] = 0;
+ d[i<TZNAME_MAX?i:TZNAME_MAX] = 0;
}
#define VEC(...) ((const unsigned char[]){__VA_ARGS__})
return y;
}
-int __munmap(void *, size_t);
-
static void do_tzset()
{
char buf[NAME_MAX+25], *pathname=buf+24;
if (old_tz && !strcmp(s, old_tz)) return;
+ for (i=0; i<5; i++) r0[i] = r1[i] = 0;
+
if (zi) __munmap((void *)zi, map_size);
/* Cache the old value of TZ to check if it has changed. Avoid
const unsigned char *p;
__tzname[0] = __tzname[1] = 0;
__daylight = __timezone = dst_off = 0;
- for (i=0; i<5; i++) r0[i] = r1[i] = 0;
for (p=types; p<abbrevs; p+=6) {
if (!p[4] && !__tzname[0]) {
__tzname[0] = (char *)abbrevs + p[5];
UNLOCK(lock);
}
-void __tzset()
+static void __tzset()
{
LOCK(lock);
do_tzset();