]> sourceware.org Git - newlib-cygwin.git/commitdiff
* localtime.cc (is_upper): Rename to isupper and include ctype.h to pull in
authorChristopher Faylor <me@cgf.cx>
Sat, 30 Oct 2010 19:22:42 +0000 (19:22 +0000)
committerChristopher Faylor <me@cgf.cx>
Sat, 30 Oct 2010 19:22:42 +0000 (19:22 +0000)
standard macro.
(lcl_is_set): Define as an enum.
(tzsetwall): Assign lcl_is_set to correct enum values.
(tzset): Ditto.  Copy as much of TZ as will fit to TZ buffer.

winsup/cygwin/ChangeLog
winsup/cygwin/localtime.cc

index 070d682ac0bde8166aa118b2a29925b952ac4e3a..4d9dcb7ef8b5a49a1e5091e799b3cd19fb2cd89d 100644 (file)
@@ -1,3 +1,11 @@
+2010-10-30  Christopher Faylor  <me+cygwin@cgf.cx>
+
+       * localtime.cc (is_upper): Rename to isupper and include ctype.h to
+       pull in standard macro.
+       (lcl_is_set): Define as an enum.
+       (tzsetwall): Assign lcl_is_set to correct enum values.
+       (tzset): Ditto.  Copy as much of TZ as will fit to TZ buffer.
+
 2010-10-27  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 233.
index c6615bd2a923fd55987c675230cb0d028bea2f61..afa1180804bd40bd3d034d372dd1d0e849dd53f9 100644 (file)
@@ -7,6 +7,7 @@
 #include "winsup.h"
 #include "cygerrno.h"
 #include "sync.h"
+#include <ctype.h>
 #define STD_INSPIRED
 #define lint
 
@@ -595,7 +596,13 @@ static struct state        gmtmem;
 #endif /* !defined TZ_STRLEN_MAX */
 
 static char            lcl_TZname[TZ_STRLEN_MAX + 1];
-static int             lcl_is_set;
+static enum lcl_states
+{
+  lcl_setting = -1,
+  lcl_unset = 0,
+  lcl_from_environment = 1,
+  lcl_from_default = 2
+} lcl_is_set;
 static int             gmt_is_set;
 
 #define tzname _tzname
@@ -1374,9 +1381,9 @@ static
 void
 tzsetwall P((void))
 {
-       if (lcl_is_set < 0)
+       if (lcl_is_set == lcl_setting)
                return;
-       lcl_is_set = -1;
+       lcl_is_set = lcl_setting;
 
 #ifdef ALL_STATE
        if (lclptr == NULL) {
@@ -1387,8 +1394,7 @@ tzsetwall P((void))
                }
        }
 #endif /* defined ALL_STATE */
-#if defined (_WIN32) || defined (__CYGWIN__)
-#define is_upper(c) ((unsigned)(c) - 'A' <= 26)
+#if defined (__CYGWIN__)
        {
            TIME_ZONE_INFORMATION tz;
            char buf[BUFSIZ];
@@ -1398,7 +1404,7 @@ tzsetwall P((void))
            GetTimeZoneInformation(&tz);
            dst = cp = buf;
            for (src = tz.StandardName; *src; src++)
-             if (is_upper(*src)) *dst++ = *src;
+             if (isupper(*src)) *dst++ = *src;
            if ((dst - cp) < 3)
              {
                /* In non-english Windows, converted tz.StandardName
@@ -1416,7 +1422,7 @@ tzsetwall P((void))
                cp = strchr(cp, 0);
                dst = cp;
                for (src = tz.DaylightName; *src; src++)
-                 if (is_upper(*src)) *dst++ = *src;
+                 if (isupper(*src)) *dst++ = *src;
                if ((dst - cp) < 3)
                  {
                    /* In non-english Windows, converted tz.DaylightName
@@ -1454,7 +1460,7 @@ tzsetwall P((void))
            /* printf("TZ deduced as `%s'\n", buf); */
            if (tzparse(buf, lclptr, false) == 0) {
                settzname();
-               lcl_is_set = 1;
+               lcl_is_set = lcl_from_default;
                strlcpy(lcl_TZname, buf, sizeof (lcl_TZname));
 #if 0
                /* Huh?  POSIX doesn't mention anywhere that tzset should
@@ -1479,16 +1485,16 @@ tzset P((void))
        const char *    name = getenv("TZ");
 
        if (name == NULL) {
-               if (!lcl_is_set)
+               if (lcl_is_set != lcl_from_default)
                        tzsetwall();
                goto out;
        }
 
-       if (lcl_is_set > 0  &&  strcmp(lcl_TZname, name) == 0)
+       if (lcl_is_set > 0 && strncmp(lcl_TZname, name, sizeof(lcl_TZname) - 1) == 0)
                goto out;
-       lcl_is_set = (strlen(name) < sizeof (lcl_TZname));
-       if (lcl_is_set)
-               strcpy(lcl_TZname, name);
+       lcl_is_set = (strlen(name) < sizeof (lcl_TZname)) ? lcl_from_environment : lcl_unset;
+       if (lcl_is_set != lcl_unset)
+               strlcpy(lcl_TZname, name, sizeof (lcl_TZname));
 
 #ifdef ALL_STATE
        if (lclptr == NULL) {
This page took 0.041177 seconds and 5 git commands to generate.