提交 8d829717 编写于 作者: A A. Wilcox 提交者: Rich Felker

locale: ensure dcngettext() preserves errno

Some packages call gettext to format a message to be sent to perror.
If the currently set user locale points to a non-existent .mo file,
open via __map_file in dcngettext will set errno to ENOENT.

Maintainer's notes: Non-modification of errno is a documented part of
the interface contract for the GNU version of this function and likely
other versions. The issue being fixed here seems to be a regression
from commit 1b52863e, which enabled
setting of errno from __map_file.
上级 1691b239
......@@ -122,6 +122,7 @@ char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2,
const struct __locale_map *lm;
size_t domlen;
struct binding *q;
int old_errno = errno;
if ((unsigned)category >= LC_ALL) goto notrans;
......@@ -138,6 +139,7 @@ char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2,
lm = loc->cat[category];
if (!lm) {
notrans:
errno = old_errno;
return (char *) ((n == 1) ? msgid1 : msgid2);
}
......@@ -250,6 +252,7 @@ notrans:
trans += l+1;
}
}
errno = old_errno;
return (char *)trans;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册