Browse Source

fix handling of negative offsets in timezone spec strings

previously, the hours were considered as a signed quantity while
minutes and seconds were always treated as positive offsets. however,
semantically the '-' sign should negate the whole hh:mm:ss offset.
this bug only affected timezones east of GMT with non-whole-hours
offsets, such as those used in India and Nepal.
master
Rich Felker 12 years ago
parent
commit
08b996d180
  1. 17
      src/time/__tz.c

17
src/time/__tz.c

@ -36,19 +36,16 @@ static int getint(const char **p)
return x;
}
static int getsigned(const char **p)
static int getoff(const char **p)
{
int neg = 0;
if (**p == '-') {
++*p;
return -getint(p);
neg = 1;
} else if (**p == '+') {
++*p;
}
if (**p == '+') ++*p;
return getint(p);
}
static int getoff(const char **p)
{
int off = 3600*getsigned(p);
int off = 3600*getint(p);
if (**p == ':') {
++*p;
off += 60*getint(p);
@ -57,7 +54,7 @@ static int getoff(const char **p)
off += getint(p);
}
}
return off;
return neg ? -off : off;
}
static void getrule(const char **p, int rule[5])

Loading…
Cancel
Save