diff options
| author | Elliott Hughes <enh@google.com> | 2013-08-22 21:27:55 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-08-22 21:27:55 +0000 |
| commit | 41f08abf3d020ad8b48ff4151f8c623a119790e0 (patch) | |
| tree | 76decfb3114af9fbcf85ca6f1c99c94177642023 /libc | |
| parent | c44205cf717fc8ab8ccaf3631032fa236ba61a86 (diff) | |
| parent | 713fe6463e6ff8cb9689aa8ead88c885d25d03aa (diff) | |
| download | bionic-41f08abf3d020ad8b48ff4151f8c623a119790e0.zip bionic-41f08abf3d020ad8b48ff4151f8c623a119790e0.tar.gz bionic-41f08abf3d020ad8b48ff4151f8c623a119790e0.tar.bz2 | |
Merge "Apply upstream commit 943a6621866e9d6e654f5cfe1494378c1fb8957a."
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/Android.mk | 2 | ||||
| -rw-r--r-- | libc/tzcode/localtime.c | 8 | ||||
| -rw-r--r-- | libc/tzcode/private.h | 10 |
3 files changed, 14 insertions, 6 deletions
diff --git a/libc/Android.mk b/libc/Android.mk index af308cb..cfc124c 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -717,8 +717,6 @@ LOCAL_CFLAGS := \ -DTZDIR=\"/system/usr/share/zoneinfo\" \ -DTM_GMTOFF=tm_gmtoff \ -DUSG_COMPAT=1 -# tzcode currently relies on signed overflow in numerous places (http://b/10310929). -LOCAL_CFLAGS += -fno-strict-overflow LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_tzcode LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk diff --git a/libc/tzcode/localtime.c b/libc/tzcode/localtime.c index d1b49e5..b23eca4 100644 --- a/libc/tzcode/localtime.c +++ b/libc/tzcode/localtime.c @@ -1812,14 +1812,14 @@ time2sub(struct tm * const tmp, } else dir = tmcomp(&mytm, &yourtm); if (dir != 0) { if (t == lo) { - ++t; - if (t <= lo) + if (t == time_t_max) return WRONG; + ++t; ++lo; } else if (t == hi) { - --t; - if (t >= hi) + if (t == time_t_min) return WRONG; + --t; --hi; } if (lo > hi) diff --git a/libc/tzcode/private.h b/libc/tzcode/private.h index a31a26e..1a938a2 100644 --- a/libc/tzcode/private.h +++ b/libc/tzcode/private.h @@ -304,6 +304,16 @@ const char * scheck(const char * string, const char * format); #define TYPE_SIGNED(type) (((type) -1) < 0) #endif /* !defined TYPE_SIGNED */ +/* The minimum and maximum finite time values. */ +static time_t const time_t_min = + (TYPE_SIGNED(time_t) + ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1) + : 0); +static time_t const time_t_max = + (TYPE_SIGNED(time_t) + ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)) + : -1); + /* ** Since the definition of TYPE_INTEGRAL contains floating point numbers, ** it cannot be used in preprocessor directives. |
