rename aligned_alloc source file
[musl] / src / time / __tz.c
index 51e6651..49a7371 100644 (file)
@@ -86,15 +86,15 @@ static void getname(char *d, const char **p)
        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__})
@@ -130,6 +130,8 @@ static void do_tzset()
 
        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
@@ -194,7 +196,6 @@ static void do_tzset()
                        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];