mirror of
https://abf.rosa.ru/djam/rpm.git
synced 2025-02-23 18:33:04 +00:00
122 lines
3 KiB
Diff
122 lines
3 KiB
Diff
--- 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;
|
|
}
|
|
|