aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc/time/tzset_r.c
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-03-31 11:14:22 +0200
committerCorinna Vinschen <corinna@vinschen.de>2015-04-23 21:57:08 +0200
commitc11779332651dd2f3b12f5ec48202fa7e547272b (patch)
tree5480c352463a0d12e8f9c44e68fc44c83a7162a1 /newlib/libc/time/tzset_r.c
parent382fa90fe1fdd0f363088a28a5be12a4548099b4 (diff)
downloadnewlib-c11779332651dd2f3b12f5ec48202fa7e547272b.zip
newlib-c11779332651dd2f3b12f5ec48202fa7e547272b.tar.gz
newlib-c11779332651dd2f3b12f5ec48202fa7e547272b.tar.bz2
Add _tzset_unlocked and _tzset_unlocked_r
newlib: * libc/time/local.h (_tzset_unlocked_r): Add prototype. (_tzset_unlocked): Ditto. * libc/time/tzset.c (_tzset_unlocked): New function, call _tzset_unlocked_r. (tzset): Lock and call _tzset_unlocked_r. * libc/time/tzset_r (_tzset_unlocked_r): Remove locking and rename from _tzset_r. (_tzset_r): Lock and call _tzset_unlocked_r. cygwin: * localtime.cc (tzset_unlocked): Export as _tzset_unlocked. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'newlib/libc/time/tzset_r.c')
-rw-r--r--newlib/libc/time/tzset_r.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/newlib/libc/time/tzset_r.c b/newlib/libc/time/tzset_r.c
index 2c5b723..6c21e82 100644
--- a/newlib/libc/time/tzset_r.c
+++ b/newlib/libc/time/tzset_r.c
@@ -14,7 +14,7 @@ static char __tzname_dst[11];
static char *prev_tzenv = NULL;
_VOID
-_DEFUN (_tzset_r, (reent_ptr),
+_DEFUN (_tzset_unlocked_r, (reent_ptr),
struct _reent *reent_ptr)
{
char *tzenv;
@@ -25,24 +25,17 @@ _DEFUN (_tzset_r, (reent_ptr),
if ((tzenv = _getenv_r (reent_ptr, "TZ")) == NULL)
{
- TZ_LOCK;
_timezone = 0;
_daylight = 0;
_tzname[0] = "GMT";
_tzname[1] = "GMT";
free(prev_tzenv);
prev_tzenv = NULL;
- TZ_UNLOCK;
return;
}
- TZ_LOCK;
-
if (prev_tzenv != NULL && strcmp(tzenv, prev_tzenv) == 0)
- {
- TZ_UNLOCK;
- return;
- }
+ return;
free(prev_tzenv);
prev_tzenv = _malloc_r (reent_ptr, strlen(tzenv) + 1);
@@ -54,10 +47,7 @@ _DEFUN (_tzset_r, (reent_ptr),
++tzenv;
if (sscanf (tzenv, "%10[^0-9,+-]%n", __tzname_std, &n) <= 0)
- {
- TZ_UNLOCK;
- return;
- }
+ return;
tzenv += n;
@@ -74,10 +64,7 @@ _DEFUN (_tzset_r, (reent_ptr),
ss = 0;
if (sscanf (tzenv, "%hu%n:%hu%n:%hu%n", &hh, &n, &mm, &n, &ss, &n) < 1)
- {
- TZ_UNLOCK;
- return;
- }
+ return;
tz->__tzrule[0].offset = sign * (ss + SECSPERMIN * mm + SECSPERHOUR * hh);
_tzname[0] = __tzname_std;
@@ -88,7 +75,6 @@ _DEFUN (_tzset_r, (reent_ptr),
_tzname[1] = _tzname[0];
_timezone = tz->__tzrule[0].offset;
_daylight = 0;
- TZ_UNLOCK;
return;
}
else
@@ -127,10 +113,7 @@ _DEFUN (_tzset_r, (reent_ptr),
{
if (sscanf (tzenv, "M%hu%n.%hu%n.%hu%n", &m, &n, &w, &n, &d, &n) != 3 ||
m < 1 || m > 12 || w < 1 || w > 5 || d > 6)
- {
- TZ_UNLOCK;
- return;
- }
+ return;
tz->__tzrule[i].ch = 'M';
tz->__tzrule[i].m = m;
@@ -198,6 +181,13 @@ _DEFUN (_tzset_r, (reent_ptr),
__tzcalc_limits (tz->__tzyear);
_timezone = tz->__tzrule[0].offset;
_daylight = tz->__tzrule[0].offset != tz->__tzrule[1].offset;
+}
+_VOID
+_DEFUN (_tzset_r, (reent_ptr),
+ struct _reent *reent_ptr)
+{
+ TZ_LOCK;
+ _tzset_unlocked_r (reent_ptr);
TZ_UNLOCK;
}