Merge "Upgrade to tzcode-2016f."

This commit is contained in:
Treehugger Robot 2016-07-29 22:13:56 +00:00 committed by Gerrit Code Review
commit def5854676
6 changed files with 93 additions and 45 deletions

View File

@ -154,7 +154,8 @@ cc_library_static {
"-DTM_GMTOFF=tm_gmtoff",
// Where we store our tzdata.
"-DTZDIR=\\\"/system/usr/share/zoneinfo\\\"",
// Include timezone and daylight globals.
// Include `tzname`, `timezone`, and `daylight` globals.
"-DHAVE_POSIX_DECLS=0",
"-DUSG_COMPAT=1",
// Use the empty string (instead of " ") as the timezone abbreviation
// fallback.

View File

@ -192,10 +192,6 @@ char* strerror_l(int error, locale_t) {
return strerror(error);
}
size_t strftime_l(char* s, size_t max, const char* format, const struct tm* tm, locale_t) {
return strftime(s, max, format, tm);
}
int strncasecmp_l(const char* s1, const char* s2, size_t n, locale_t) {
return strncasecmp(s1, s2, n);
}

View File

@ -178,11 +178,6 @@ static struct state gmtmem;
static char lcl_TZname[TZ_STRLEN_MAX + 1];
static int lcl_is_set;
char * tzname[2] = {
(char *) wildabbr,
(char *) wildabbr
};
/*
** Section 4.12.3 of X3.159-1989 requires that
** Except for the strftime function, these functions [asctime,
@ -193,10 +188,16 @@ char * tzname[2] = {
static struct tm tm;
#if !HAVE_POSIX_DECLS
char * tzname[2] = {
(char *) wildabbr,
(char *) wildabbr
};
#ifdef USG_COMPAT
long timezone;
int daylight;
#endif /* defined USG_COMPAT */
# endif
#endif
#ifdef ALTZONE
long altzone;

View File

@ -22,6 +22,10 @@
** You can override these in your C compiler options, e.g. '-DHAVE_GETTEXT=1'.
*/
#ifndef HAVE_DECL_ASCTIME_R
#define HAVE_DECL_ASCTIME_R 1
#endif
#ifndef HAVE_GETTEXT
#define HAVE_GETTEXT 0
#endif /* !defined HAVE_GETTEXT */
@ -34,6 +38,10 @@
#define HAVE_LINK 1
#endif /* !defined HAVE_LINK */
#ifndef HAVE_POSIX_DECLS
#define HAVE_POSIX_DECLS 1
#endif
#ifndef HAVE_STRDUP
#define HAVE_STRDUP 1
#endif
@ -106,6 +114,9 @@
#ifndef ENAMETOOLONG
# define ENAMETOOLONG EINVAL
#endif
#ifndef ENOTSUP
# define ENOTSUP EINVAL
#endif
#ifndef EOVERFLOW
# define EOVERFLOW EINVAL
#endif
@ -379,25 +390,21 @@ time_t time(time_t *);
void tzset(void);
#endif
/*
** Some time.h implementations don't declare asctime_r.
** Others might define it as a macro.
** Fix the former without affecting the latter.
** Similarly for timezone, daylight, and altzone.
*/
#ifndef asctime_r
extern char * asctime_r(struct tm const *restrict, char *restrict);
#if !HAVE_DECL_ASCTIME_R && !defined asctime_r
extern char *asctime_r(struct tm const *restrict, char *restrict);
#endif
#ifdef USG_COMPAT
# ifndef timezone
#if !HAVE_POSIX_DECLS
# ifdef USG_COMPAT
# ifndef timezone
extern long timezone;
# endif
# ifndef daylight
# endif
# ifndef daylight
extern int daylight;
# endif
# endif
#endif
#if defined ALTZONE && !defined altzone
extern long altzone;
#endif

View File

@ -1,29 +1,40 @@
/* Convert a broken-down time stamp to a string. */
/* Copyright 1989 The Regents of the University of California.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. */
/*
** Based on the UCB version with the copyright notice and sccsid
** appearing below.
** Based on the UCB version with the copyright notice appearing above.
**
** This is ANSIish only when "multibyte character == plain character".
*/
#include "private.h"
/*
** Copyright (c) 1989 The Regents of the University of California.
** All rights reserved.
**
** Redistribution and use in source and binary forms are permitted
** provided that the above copyright notice and this paragraph are
** duplicated in all such forms and that any documentation,
** advertising materials, and other materials related to such
** distribution and use acknowledge that the software was developed
** by the University of California, Berkeley. The name of the
** University may not be used to endorse or promote products derived
** from this software without specific prior written permission.
** THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#include "tzfile.h"
#include "fcntl.h"
#include "locale.h"
@ -108,9 +119,10 @@ static char * _conv(int, const char *, char *, const char *);
static char * _fmt(const char *, const struct tm *, char *, const char *,
int *);
static char * _yconv(int, int, bool, bool, char *, const char *, int);
static char * getformat(int, char *, char *, char *, char *);
#if !HAVE_POSIX_DECLS
extern char * tzname[];
#endif
#ifndef YEAR_2000_NAME
#define YEAR_2000_NAME "CHECK_STRFTIME_FORMATS_FOR_TWO_DIGIT_YEARS"
@ -121,7 +133,17 @@ extern char * tzname[];
#define IN_THIS 2
#define IN_ALL 3
#define FORCE_LOWER_CASE 0x100
#if HAVE_STRFTIME_L
size_t
strftime_l(char *s, size_t maxsize, char const *format, struct tm const *t,
locale_t locale)
{
/* Just call strftime, as only the C locale is supported. */
return strftime(s, maxsize, format, t);
}
#endif
#define FORCE_LOWER_CASE 0x100 /* Android extension. */
size_t
strftime(char *s, size_t maxsize, const char *format, const struct tm *t)

View File

@ -176,6 +176,27 @@ TEST(time, strftime_null_tm_zone) {
#endif
}
TEST(time, strftime_l) {
locale_t cloc = newlocale(LC_ALL, "C.UTF-8", 0);
locale_t old_locale = uselocale(cloc);
setenv("TZ", "UTC", 1);
struct tm t;
memset(&t, 0, sizeof(tm));
t.tm_year = 200;
t.tm_mon = 2;
t.tm_mday = 10;
// Date and time as text.
char buf[64];
EXPECT_EQ(24U, strftime_l(buf, sizeof(buf), "%c", &t, cloc));
EXPECT_STREQ("Sun Mar 10 00:00:00 2100", buf);
uselocale(old_locale);
freelocale(cloc);
}
TEST(time, strptime) {
setenv("TZ", "UTC", 1);