rpm/rpm-5.4.9-specspo.patch

123 lines
3 KiB
Diff
Raw Normal View History

2012-10-18 00:05:58 +04:00
--- rpm-5.3.13/rpmdb/hdrfmt.c 2011-03-26 15:57:24.000000000 +0300
+++ rpm-5.3.13/rpmdb/hdrfmt.c 2012-04-16 12:32:50.588475008 +0400
@@ -2096,102 +2096,34 @@
/*@globals rpmGlobalMacroContext, h_errno, internalState @*/
/*@modifies he, rpmGlobalMacroContext, internalState @*/
{
- char * dstring = rpmExpand(_macro_i18ndomains, NULL);
- int rc = 1; /* assume failure */
-
+ int rc = headerGet(h, he, HEADERGET_NOEXTENSION);
he->t = RPM_STRING_TYPE;
- he->p.str = NULL;
- he->c = 0;
- he->freeData = 0;
-
- if (dstring && *dstring) {
- char *domain, *de;
- const char * langval;
- const char * msgkey;
- const char * msgid;
-
- { HE_t nhe = (HE_t) memset(alloca(sizeof(*nhe)), 0, sizeof(*nhe));
- const char * tn;
- char * mk;
- size_t nb = sizeof("()");
- int xx;
-
- nhe->tag = RPMTAG_NAME;
- xx = headerGet(h, nhe, 0);
- /*
- * XXX Ick, tagName() is called by headerGet(), and the tagName()
- * buffer is valid only until next tagName() call.
- * For now, do the tagName() lookup after headerGet().
- */
- tn = tagName(he->tag);
- if (tn) nb += strlen(tn);
- if (nhe->p.str) nb += strlen(nhe->p.str);
- mk = alloca(nb);
- (void) snprintf(mk, nb, "%s(%s)",
- (nhe->p.str ? nhe->p.str : ""), (tn ? tn : ""));
- mk[nb-1] = '\0';
- nhe->p.ptr = _free(nhe->p.ptr);
- msgkey = mk;
- }
-
- /* change to en_US for msgkey -> msgid resolution */
- langval = getenv(language);
- (void) setenv(language, "en_US", 1);
-#if defined(ENABLE_NLS)
-/*@i@*/ ++_nl_msg_cat_cntr;
-#endif
-
- msgid = NULL;
+ if (rc){
+ char *de, *domain, *dstring = rpmExpand(_macro_i18ndomains, NULL);
+ const char *msgid = he->p.str;
+ const char *msg;
+
for (domain = dstring; domain != NULL; domain = de) {
de = strchr(domain, ':');
if (de) *de++ = '\0';
-/*@-unrecog@*/
- msgid = dgettext(domain, msgkey);
-/*@=unrecog@*/
- if (msgid != msgkey) break;
- }
-
- /* restore previous environment for msgid -> msgstr resolution */
- if (langval)
- (void) setenv(language, langval, 1);
- else
- unsetenv(language);
-#if defined(ENABLE_NLS)
-/*@i@*/ ++_nl_msg_cat_cntr;
-#endif
-
- if (domain && msgid) {
-/*@-unrecog@*/
- const char * s = dgettext(domain, msgid);
-/*@=unrecog@*/
- if (s) {
- rc = 0;
- he->p.str = xstrdup(s);
- he->c = 1;
- he->freeData = 1;
+ msg = dgettext(domain, msgid);
+ if (msg != msgid){
+ he->p.str = xstrdup(msg);
+ he->c = 1;
+ he->freeData = 1;
+
+ break;
}
}
+
+ dstring = _free(dstring);
+ return 0;
}
-/*@-dependenttrans@*/
- dstring = _free(dstring);
-/*@=dependenttrans@*/
- if (!rc)
- return rc;
-
- rc = headerGet(h, he, HEADERGET_NOEXTENSION);
- if (rc) {
- rc = 0;
- he->p.str = xstrtolocale(he->p.str);
- he->freeData = 1;
- return rc;
- }
-
- he->t = RPM_STRING_TYPE;
he->p.str = NULL;
he->c = 0;
he->freeData = 0;
-
+
return 1;
}