dcavalca / rpms / rpm

Forked from rpms/rpm a year ago
Clone
James Antill ee2eaf
diff --git a/lib/tagexts.c b/lib/tagexts.c
James Antill ee2eaf
index f72ff60..2c0b179 100644
James Antill ee2eaf
--- a/lib/tagexts.c
James Antill ee2eaf
+++ b/lib/tagexts.c
James Antill ee2eaf
@@ -535,15 +535,6 @@ static int filerequireTag(Header h, rpmtd td, headerGetFlags hgflags)
James Antill ee2eaf
     return filedepTag(h, RPMTAG_REQUIRENAME, td, hgflags);
James Antill ee2eaf
 }
James Antill ee2eaf
 
James Antill ee2eaf
-/* I18N look aside diversions */
James Antill ee2eaf
-
James Antill ee2eaf
-#if defined(ENABLE_NLS)
James Antill ee2eaf
-extern int _nl_msg_cat_cntr;	/* XXX GNU gettext voodoo */
James Antill ee2eaf
-#endif
James Antill ee2eaf
-static const char * const language = "LANGUAGE";
James Antill ee2eaf
-
James Antill ee2eaf
-static const char * const _macro_i18ndomains = "%{?_i18ndomains}";
James Antill ee2eaf
-
James Antill ee2eaf
 /**
James Antill ee2eaf
  * Retrieve i18n text.
James Antill ee2eaf
  * @param h		header
James Antill ee2eaf
@@ -554,59 +545,30 @@ static const char * const _macro_i18ndomains = "%{?_i18ndomains}";
James Antill ee2eaf
  */
James Antill ee2eaf
 static int i18nTag(Header h, rpmTag tag, rpmtd td, headerGetFlags hgflags)
James Antill ee2eaf
 {
James Antill ee2eaf
-    int rc;
James Antill ee2eaf
+    int rc = headerGet(h, tag, td, HEADERGET_ALLOC);
James Antill ee2eaf
 #if defined(ENABLE_NLS)
James Antill ee2eaf
-    char * dstring = rpmExpand(_macro_i18ndomains, NULL);
James Antill ee2eaf
-
James Antill ee2eaf
-    td->type = RPM_STRING_TYPE;
James Antill ee2eaf
-    td->data = NULL;
James Antill ee2eaf
-    td->count = 0;
James Antill ee2eaf
-
James Antill ee2eaf
-    if (dstring && *dstring) {
James Antill ee2eaf
-	char *domain, *de;
James Antill ee2eaf
-	const char * langval;
James Antill ee2eaf
-	char * msgkey;
James Antill ee2eaf
-	const char * msgid;
James Antill ee2eaf
+    if (rc) {
James Antill ee2eaf
+	static const char * const _macro_i18ndomains = "%{?_i18ndomains}";
James Antill ee2eaf
+	char *de, *dstring = rpmExpand(_macro_i18ndomains, NULL);
James Antill ee2eaf
+	const char *domain;
James Antill ee2eaf
 
James Antill ee2eaf
-	rasprintf(&msgkey, "%s(%s)", headerGetString(h, RPMTAG_NAME), 
James Antill ee2eaf
-		  rpmTagGetName(tag));
James Antill ee2eaf
-
James Antill ee2eaf
-	/* change to en_US for msgkey -> msgid resolution */
James Antill ee2eaf
-	langval = getenv(language);
James Antill ee2eaf
-	(void) setenv(language, "en_US", 1);
James Antill ee2eaf
-        ++_nl_msg_cat_cntr;
James Antill ee2eaf
-
James Antill ee2eaf
-	msgid = NULL;
James Antill ee2eaf
 	for (domain = dstring; domain != NULL; domain = de) {
James Antill ee2eaf
+	    const char *msgid = td->data;
James Antill ee2eaf
+	    const char *msg = NULL;
James Antill ee2eaf
+
James Antill ee2eaf
 	    de = strchr(domain, ':');
James Antill ee2eaf
 	    if (de) *de++ = '\0';
James Antill ee2eaf
-	    msgid = dgettext(domain, msgkey);
James Antill ee2eaf
-	    if (msgid != msgkey) break;
James Antill ee2eaf
-	}
James Antill ee2eaf
-
James Antill ee2eaf
-	/* restore previous environment for msgid -> msgstr resolution */
James Antill ee2eaf
-	if (langval)
James Antill ee2eaf
-	    (void) setenv(language, langval, 1);
James Antill ee2eaf
-	else
James Antill ee2eaf
-	    unsetenv(language);
James Antill ee2eaf
-        ++_nl_msg_cat_cntr;
James Antill ee2eaf
-
James Antill ee2eaf
-	if (domain && msgid) {
James Antill ee2eaf
-	    td->data = dgettext(domain, msgid);
James Antill ee2eaf
-	    td->data = xstrdup(td->data); /* XXX xstrdup has side effects. */
James Antill ee2eaf
-	    td->count = 1;
James Antill ee2eaf
-	    td->flags = RPMTD_ALLOCED;
James Antill ee2eaf
+	    msg = dgettext(domain, td->data);
James Antill ee2eaf
+	    if (msg != msgid) {
James Antill ee2eaf
+		free(td->data);
James Antill ee2eaf
+		td->data = xstrdup(msg);
James Antill ee2eaf
+		break;
James Antill ee2eaf
+	    }
James Antill ee2eaf
 	}
James Antill ee2eaf
-	dstring = _free(dstring);
James Antill ee2eaf
-	free(msgkey);
James Antill ee2eaf
-	if (td->data)
James Antill ee2eaf
-	    return 1;
James Antill ee2eaf
+	free(dstring);
James Antill ee2eaf
     }
James Antill ee2eaf
-
James Antill ee2eaf
-    free(dstring);
James Antill ee2eaf
 #endif
James Antill ee2eaf
 
James Antill ee2eaf
-    rc = headerGet(h, tag, td, HEADERGET_ALLOC);
James Antill ee2eaf
     return rc;
James Antill ee2eaf
 }
James Antill ee2eaf