提交 08b996d1 编写于 作者: R Rich Felker

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.
上级 a3763d64
......@@ -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])
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册