Merge "Revert "system_properties.cpp: special case ro.* properties""
diff --git a/libc/arch-arm/bionic/__aeabi.c b/libc/arch-arm/bionic/__aeabi.c
index 254c7a6..098c553 100644
--- a/libc/arch-arm/bionic/__aeabi.c
+++ b/libc/arch-arm/bionic/__aeabi.c
@@ -51,34 +51,62 @@
*/
int __attribute__((weak))
-__aeabi_atexit(void *object, void (*destructor) (void *), void *dso_handle) {
+__aeabi_atexit_impl(void *object, void (*destructor) (void *), void *dso_handle) {
+ return __cxa_atexit(destructor, object, dso_handle);
+}
+
+int __attribute__((weak))
+__aeabi_atexit_impl2(void *object, void (*destructor) (void *), void *dso_handle) {
return __cxa_atexit(destructor, object, dso_handle);
}
-void __attribute__((weak))
-__aeabi_memcpy8(void *dest, const void *src, size_t n) {
+void __attribute__((weak)) __aeabi_memcpy8_impl(void *dest, const void *src, size_t n) {
memcpy(dest, src, n);
}
-void __attribute__((weak)) __aeabi_memcpy4(void *dest, const void *src, size_t n) {
+void __attribute__((weak)) __aeabi_memcpy4_impl(void *dest, const void *src, size_t n) {
memcpy(dest, src, n);
}
-void __attribute__((weak)) __aeabi_memcpy(void *dest, const void *src, size_t n) {
+void __attribute__((weak)) __aeabi_memcpy_impl(void *dest, const void *src, size_t n) {
+ memcpy(dest, src, n);
+}
+
+void __attribute__((weak)) __aeabi_memcpy8_impl2(void *dest, const void *src, size_t n) {
+ memcpy(dest, src, n);
+}
+
+void __attribute__((weak)) __aeabi_memcpy4_impl2(void *dest, const void *src, size_t n) {
+ memcpy(dest, src, n);
+}
+
+void __attribute__((weak)) __aeabi_memcpy_impl2(void *dest, const void *src, size_t n) {
memcpy(dest, src, n);
}
-void __attribute__((weak)) __aeabi_memmove8(void *dest, const void *src, size_t n) {
+void __attribute__((weak)) __aeabi_memmove8_impl(void *dest, const void *src, size_t n) {
memmove(dest, src, n);
}
-void __attribute__((weak)) __aeabi_memmove4(void *dest, const void *src, size_t n) {
+void __attribute__((weak)) __aeabi_memmove4_impl(void *dest, const void *src, size_t n) {
memmove(dest, src, n);
}
-void __attribute__((weak)) __aeabi_memmove(void *dest, const void *src, size_t n) {
+void __attribute__((weak)) __aeabi_memmove_impl(void *dest, const void *src, size_t n) {
+ memmove(dest, src, n);
+}
+
+void __attribute__((weak)) __aeabi_memmove8_impl2(void *dest, const void *src, size_t n) {
+ memmove(dest, src, n);
+}
+
+void __attribute__((weak)) __aeabi_memmove4_impl2(void *dest, const void *src, size_t n) {
+ memmove(dest, src, n);
+}
+
+void __attribute__((weak)) __aeabi_memmove_impl2(void *dest, const void *src, size_t n) {
memmove(dest, src, n);
}
@@ -87,27 +115,71 @@
* This allows __aeabi_memclr to tail-call __aeabi_memset
*/
-void __attribute__((weak)) __aeabi_memset8(void *dest, size_t n, int c) {
+void __attribute__((weak)) __aeabi_memset8_impl(void *dest, size_t n, int c) {
memset(dest, c, n);
}
-void __attribute__((weak)) __aeabi_memset4(void *dest, size_t n, int c) {
+void __attribute__((weak)) __aeabi_memset4_impl(void *dest, size_t n, int c) {
memset(dest, c, n);
}
-void __attribute__((weak)) __aeabi_memset(void *dest, size_t n, int c) {
+void __attribute__((weak)) __aeabi_memset_impl(void *dest, size_t n, int c) {
+ memset(dest, c, n);
+}
+
+void __attribute__((weak)) __aeabi_memset8_impl2(void *dest, size_t n, int c) {
+ memset(dest, c, n);
+}
+
+void __attribute__((weak)) __aeabi_memset4_impl2(void *dest, size_t n, int c) {
+ memset(dest, c, n);
+}
+
+void __attribute__((weak)) __aeabi_memset_impl2(void *dest, size_t n, int c) {
memset(dest, c, n);
}
-void __attribute__((weak)) __aeabi_memclr8(void *dest, size_t n) {
- __aeabi_memset8(dest, n, 0);
+void __attribute__((weak)) __aeabi_memclr8_impl(void *dest, size_t n) {
+ __aeabi_memset8_impl(dest, n, 0);
}
-void __attribute__((weak)) __aeabi_memclr4(void *dest, size_t n) {
- __aeabi_memset4(dest, n, 0);
+void __attribute__((weak)) __aeabi_memclr4_impl(void *dest, size_t n) {
+ __aeabi_memset4_impl(dest, n, 0);
}
-void __attribute__((weak)) __aeabi_memclr(void *dest, size_t n) {
- __aeabi_memset(dest, n, 0);
+void __attribute__((weak)) __aeabi_memclr_impl(void *dest, size_t n) {
+ __aeabi_memset_impl(dest, n, 0);
}
+
+void __attribute__((weak)) __aeabi_memclr8_impl2(void *dest, size_t n) {
+ __aeabi_memset8_impl(dest, n, 0);
+}
+
+void __attribute__((weak)) __aeabi_memclr4_impl2(void *dest, size_t n) {
+ __aeabi_memset4_impl(dest, n, 0);
+}
+
+void __attribute__((weak)) __aeabi_memclr_impl2(void *dest, size_t n) {
+ __aeabi_memset_impl(dest, n, 0);
+}
+
+#define __AEABI_SYMVERS(fn_name) \
+__asm__(".symver " #fn_name "_impl, " #fn_name "@@LIBC"); \
+__asm__(".symver " #fn_name "_impl2, " #fn_name "@LIBC_PRIVATE")
+
+__AEABI_SYMVERS(__aeabi_atexit);
+__AEABI_SYMVERS(__aeabi_memcpy8);
+__AEABI_SYMVERS(__aeabi_memcpy4);
+__AEABI_SYMVERS(__aeabi_memcpy);
+__AEABI_SYMVERS(__aeabi_memmove8);
+__AEABI_SYMVERS(__aeabi_memmove4);
+__AEABI_SYMVERS(__aeabi_memmove);
+__AEABI_SYMVERS(__aeabi_memset8);
+__AEABI_SYMVERS(__aeabi_memset4);
+__AEABI_SYMVERS(__aeabi_memset);
+__AEABI_SYMVERS(__aeabi_memclr8);
+__AEABI_SYMVERS(__aeabi_memclr4);
+__AEABI_SYMVERS(__aeabi_memclr);
+
+#undef __AEABI_SYMVERS
diff --git a/libc/bionic/libc_init_common.cpp b/libc/bionic/libc_init_common.cpp
index b0c62d6..d16b452 100644
--- a/libc/bionic/libc_init_common.cpp
+++ b/libc/bionic/libc_init_common.cpp
@@ -336,7 +336,7 @@
if (getauxval(AT_SECURE)) {
// If this is a setuid/setgid program, close the security hole described in
- // ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-02:23.stdio.asc
+ // https://www.freebsd.org/security/advisories/FreeBSD-SA-02:23.stdio.asc
__nullify_closed_stdio();
__sanitize_environment_variables(args.envp);
diff --git a/libc/libc.arm.brillo.map b/libc/libc.arm.brillo.map
index 30f4d28..f7033a0 100644
--- a/libc/libc.arm.brillo.map
+++ b/libc/libc.arm.brillo.map
@@ -273,7 +273,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
cacheflush; # arm mips
@@ -688,7 +687,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1269,6 +1267,7 @@
__accept4; # arm x86 mips
__adddf3; # arm
__addsf3; # arm
+ __aeabi_atexit; # arm
__aeabi_cdcmpeq; # arm
__aeabi_cdcmple; # arm
__aeabi_cdrcmple; # arm
@@ -1307,6 +1306,18 @@
__aeabi_llsl; # arm
__aeabi_llsr; # arm
__aeabi_lmul; # arm
+ __aeabi_memclr; # arm
+ __aeabi_memclr4; # arm
+ __aeabi_memclr8; # arm
+ __aeabi_memcpy; # arm
+ __aeabi_memcpy4; # arm
+ __aeabi_memcpy8; # arm
+ __aeabi_memmove; # arm
+ __aeabi_memmove4; # arm
+ __aeabi_memmove8; # arm
+ __aeabi_memset; # arm
+ __aeabi_memset4; # arm
+ __aeabi_memset8; # arm
__aeabi_ui2d; # arm
__aeabi_ui2f; # arm
__aeabi_uidiv; # arm
@@ -1390,7 +1401,7 @@
__swrite; # arm x86 mips
__swsetup; # arm x86 mips
__truncdfsf2; # arm
- __udivdi3; # arm x86 mips
+ __udivdi3; # arm mips
__udivsi3; # arm
__unorddf2; # arm
__unordsf2; # arm
diff --git a/libc/libc.arm.map b/libc/libc.arm.map
index a75bdc2..a88c549 100644
--- a/libc/libc.arm.map
+++ b/libc/libc.arm.map
@@ -274,7 +274,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
cacheflush; # arm mips
@@ -689,7 +688,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1270,6 +1268,7 @@
__accept4; # arm x86 mips
__adddf3; # arm
__addsf3; # arm
+ __aeabi_atexit; # arm
__aeabi_cdcmpeq; # arm
__aeabi_cdcmple; # arm
__aeabi_cdrcmple; # arm
@@ -1308,6 +1307,18 @@
__aeabi_llsl; # arm
__aeabi_llsr; # arm
__aeabi_lmul; # arm
+ __aeabi_memclr; # arm
+ __aeabi_memclr4; # arm
+ __aeabi_memclr8; # arm
+ __aeabi_memcpy; # arm
+ __aeabi_memcpy4; # arm
+ __aeabi_memcpy8; # arm
+ __aeabi_memmove; # arm
+ __aeabi_memmove4; # arm
+ __aeabi_memmove8; # arm
+ __aeabi_memset; # arm
+ __aeabi_memset4; # arm
+ __aeabi_memset8; # arm
__aeabi_ui2d; # arm
__aeabi_ui2f; # arm
__aeabi_uidiv; # arm
@@ -1402,7 +1413,7 @@
__swrite; # arm x86 mips
__swsetup; # arm x86 mips
__truncdfsf2; # arm
- __udivdi3; # arm x86 mips
+ __udivdi3; # arm mips
__udivsi3; # arm
__unorddf2; # arm
__unordsf2; # arm
@@ -1427,6 +1438,7 @@
arc4random_stir; # arm x86 mips nobrillo
atexit; # arm
bcopy; # arm x86 mips nobrillo
+ bzero; # arm x86 mips nobrillo
bsd_signal; # arm x86 mips nobrillo
dlmalloc; # arm x86 mips nobrillo
dlmalloc_inspect_all; # arm x86 mips nobrillo
diff --git a/libc/libc.arm64.map b/libc/libc.arm64.map
index 530706d..dcf1e8f 100644
--- a/libc/libc.arm64.map
+++ b/libc/libc.arm64.map
@@ -581,7 +581,6 @@
mkstemps64;
mktemp;
mktime;
- mktime_tz;
mlock;
mlockall;
mmap;
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index f95bd82..dba1b90 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -223,6 +223,7 @@
__timer_getoverrun; # arm x86 mips
__timer_gettime; # arm x86 mips
__timer_settime; # arm x86 mips
+ __udivdi3; # x86
__umask_chk;
__vsnprintf_chk;
__vsprintf_chk;
@@ -277,7 +278,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
cacheflush; # arm mips
@@ -692,7 +692,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1296,6 +1295,7 @@
__accept4; # arm x86 mips
__adddf3; # arm
__addsf3; # arm
+ __aeabi_atexit; # arm
__aeabi_cdcmpeq; # arm
__aeabi_cdcmple; # arm
__aeabi_cdrcmple; # arm
@@ -1334,6 +1334,18 @@
__aeabi_llsl; # arm
__aeabi_llsr; # arm
__aeabi_lmul; # arm
+ __aeabi_memclr; # arm
+ __aeabi_memclr4; # arm
+ __aeabi_memclr8; # arm
+ __aeabi_memcpy; # arm
+ __aeabi_memcpy4; # arm
+ __aeabi_memcpy8; # arm
+ __aeabi_memmove; # arm
+ __aeabi_memmove4; # arm
+ __aeabi_memmove8; # arm
+ __aeabi_memset; # arm
+ __aeabi_memset4; # arm
+ __aeabi_memset8; # arm
__aeabi_ui2d; # arm
__aeabi_ui2f; # arm
__aeabi_uidiv; # arm
@@ -1443,7 +1455,7 @@
__system_property_update; # arm64 x86_64 mips64
__system_property_wait_any; # arm64 x86_64 mips64
__truncdfsf2; # arm
- __udivdi3; # arm x86 mips
+ __udivdi3; # arm mips
__udivsi3; # arm
__umoddi3; # x86 mips
__unorddf2; # arm
@@ -1469,6 +1481,7 @@
arc4random_stir; # arm x86 mips nobrillo
atexit; # arm
bcopy; # arm x86 mips nobrillo
+ bzero; # arm x86 mips nobrillo
bsd_signal; # arm x86 mips nobrillo
dlmalloc; # arm x86 mips nobrillo
dlmalloc_inspect_all; # arm x86 mips nobrillo
diff --git a/libc/libc.mips.brillo.map b/libc/libc.mips.brillo.map
index 9a45181..e3b5a5e 100644
--- a/libc/libc.mips.brillo.map
+++ b/libc/libc.mips.brillo.map
@@ -259,7 +259,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
cacheflush; # arm mips
@@ -674,7 +673,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1265,7 +1263,7 @@
__swbuf; # arm x86 mips
__swrite; # arm x86 mips
__swsetup; # arm x86 mips
- __udivdi3; # arm x86 mips
+ __udivdi3; # arm mips
__umoddi3; # x86 mips
_fwalk; # arm x86 mips
free_malloc_leak_info;
diff --git a/libc/libc.mips.map b/libc/libc.mips.map
index b011410..4d2f826 100644
--- a/libc/libc.mips.map
+++ b/libc/libc.mips.map
@@ -260,7 +260,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
cacheflush; # arm mips
@@ -675,7 +674,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1277,13 +1275,14 @@
__swbuf; # arm x86 mips
__swrite; # arm x86 mips
__swsetup; # arm x86 mips
- __udivdi3; # arm x86 mips
+ __udivdi3; # arm mips
__umoddi3; # x86 mips
__wait4; # arm x86 mips nobrillo
_fwalk; # arm x86 mips
arc4random_addrandom; # arm x86 mips nobrillo
arc4random_stir; # arm x86 mips nobrillo
bcopy; # arm x86 mips nobrillo
+ bzero; # arm x86 mips nobrillo
bsd_signal; # arm x86 mips nobrillo
dlmalloc; # arm x86 mips nobrillo
dlmalloc_inspect_all; # arm x86 mips nobrillo
diff --git a/libc/libc.mips64.map b/libc/libc.mips64.map
index 530706d..dcf1e8f 100644
--- a/libc/libc.mips64.map
+++ b/libc/libc.mips64.map
@@ -581,7 +581,6 @@
mkstemps64;
mktemp;
mktime;
- mktime_tz;
mlock;
mlockall;
mmap;
diff --git a/libc/libc.x86.brillo.map b/libc/libc.x86.brillo.map
index 9c057c8..637ad06 100644
--- a/libc/libc.x86.brillo.map
+++ b/libc/libc.x86.brillo.map
@@ -205,6 +205,7 @@
__timer_getoverrun; # arm x86 mips
__timer_gettime; # arm x86 mips
__timer_settime; # arm x86 mips
+ __udivdi3; # x86
__umask_chk;
__vsnprintf_chk;
__vsprintf_chk;
@@ -258,7 +259,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
calloc;
@@ -672,7 +672,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1264,7 +1263,6 @@
__swbuf; # arm x86 mips
__swrite; # arm x86 mips
__swsetup; # arm x86 mips
- __udivdi3; # arm x86 mips
__umoddi3; # x86 mips
_fwalk; # arm x86 mips
free_malloc_leak_info;
diff --git a/libc/libc.x86.map b/libc/libc.x86.map
index 5b96c2f..76bf9ea 100644
--- a/libc/libc.x86.map
+++ b/libc/libc.x86.map
@@ -206,6 +206,7 @@
__timer_getoverrun; # arm x86 mips
__timer_gettime; # arm x86 mips
__timer_settime; # arm x86 mips
+ __udivdi3; # x86
__umask_chk;
__vsnprintf_chk;
__vsprintf_chk;
@@ -259,7 +260,6 @@
brk;
bsearch;
btowc;
- bzero; # arm x86 mips
c16rtomb;
c32rtomb;
calloc;
@@ -673,7 +673,6 @@
mktemp;
mktime;
mktime64; # arm x86 mips
- mktime_tz;
mlock;
mlockall;
mmap;
@@ -1276,13 +1275,13 @@
__swbuf; # arm x86 mips
__swrite; # arm x86 mips
__swsetup; # arm x86 mips
- __udivdi3; # arm x86 mips
__umoddi3; # x86 mips
__wait4; # arm x86 mips nobrillo
_fwalk; # arm x86 mips
arc4random_addrandom; # arm x86 mips nobrillo
arc4random_stir; # arm x86 mips nobrillo
bcopy; # arm x86 mips nobrillo
+ bzero; # arm x86 mips nobrillo
bsd_signal; # arm x86 mips nobrillo
dlmalloc; # arm x86 mips nobrillo
dlmalloc_inspect_all; # arm x86 mips nobrillo
diff --git a/libc/libc.x86_64.map b/libc/libc.x86_64.map
index 530706d..dcf1e8f 100644
--- a/libc/libc.x86_64.map
+++ b/libc/libc.x86_64.map
@@ -581,7 +581,6 @@
mkstemps64;
mktemp;
mktime;
- mktime_tz;
mlock;
mlockall;
mmap;
diff --git a/libc/private/KernelArgumentBlock.h b/libc/private/KernelArgumentBlock.h
index c8ea497..68d4999 100644
--- a/libc/private/KernelArgumentBlock.h
+++ b/libc/private/KernelArgumentBlock.h
@@ -38,32 +38,25 @@
argv = reinterpret_cast<char**>(args + 1);
envp = argv + argc + 1;
- // Skip over all environment variable definitions to find aux vector.
- // The end of the environment block is marked by two NULL pointers.
+ // Skip over all environment variable definitions to find the aux vector.
+ // The end of the environment block is marked by a NULL pointer.
char** p = envp;
while (*p != NULL) {
++p;
}
- ++p; // Skip second NULL;
+ ++p; // Skip the NULL itself.
auxv = reinterpret_cast<ElfW(auxv_t)*>(p);
}
// Similar to ::getauxval but doesn't require the libc global variables to be set up,
- // so it's safe to call this really early on. This function also lets you distinguish
- // between the inability to find the given type and its value just happening to be 0.
- unsigned long getauxval(unsigned long type, bool* found_match = NULL) {
+ // so it's safe to call this really early on.
+ unsigned long getauxval(unsigned long type) {
for (ElfW(auxv_t)* v = auxv; v->a_type != AT_NULL; ++v) {
if (v->a_type == type) {
- if (found_match != NULL) {
- *found_match = true;
- }
return v->a_un.a_val;
}
}
- if (found_match != NULL) {
- *found_match = false;
- }
return 0;
}
diff --git a/libc/private/bionic_time.h b/libc/private/bionic_time.h
deleted file mode 100644
index 030dcfd..0000000
--- a/libc/private/bionic_time.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
- * COPYRIGHT OWNER 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.
- */
-#ifndef _BIONIC_TIME_H
-#define _BIONIC_TIME_H
-
-#include <time.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-// We can't remove this (and this file) until we fix MtpUtils.cpp.
-time_t mktime_tz(struct tm* const, char const*);
-
-__END_DECLS
-
-#endif /* _BIONIC_TIME_H */
diff --git a/libc/tzcode/localtime.c b/libc/tzcode/localtime.c
index b1ebb24..f370e87 100644
--- a/libc/tzcode/localtime.c
+++ b/libc/tzcode/localtime.c
@@ -2462,50 +2462,4 @@
return fd;
}
-// Caches the most recent timezone (http://b/8270865).
-static int __bionic_tzload_cached(const char* name, struct state* const sp, const int doextend) {
- lock();
-
- // Our single-item cache.
- static char* g_cached_time_zone_name;
- static struct state g_cached_time_zone;
-
- // Do we already have this timezone cached?
- if (g_cached_time_zone_name != NULL && strcmp(name, g_cached_time_zone_name) == 0) {
- *sp = g_cached_time_zone;
- unlock();
- return 0;
- }
-
- // Can we load it?
- int rc = tzload(name, sp, doextend);
- if (rc == 0) {
- // Update the cache.
- free(g_cached_time_zone_name);
- g_cached_time_zone_name = strdup(name);
- g_cached_time_zone = *sp;
- }
-
- unlock();
- return rc;
-}
-
-// Non-standard API: mktime(3) but with an explicit timezone parameter.
-// This can't actually be hidden/removed until we fix MtpUtils.cpp
-__attribute__((visibility("default"))) time_t mktime_tz(struct tm* const tmp, const char* tz) {
- struct state* st = malloc(sizeof(*st));
- time_t return_value;
-
- if (st == NULL)
- return 0;
- if (__bionic_tzload_cached(tz, st, true) != 0) {
- // TODO: not sure what's best here, but for now, we fall back to gmt.
- gmtload(st);
- }
-
- return_value = time1(tmp, localsub, st, 0L);
- free(st);
- return return_value;
-}
-
// END android-added