summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2011-05-16 13:31:14 -0400
committerChris Lumens <clumens@redhat.com>2011-05-16 14:07:48 -0400
commit7f3b8c939f8a51f70a1ac628ed7997290079441b (patch)
treec4f9f4d82a89b7ea6141601244bf3d0a7e5137a6 /loader
parent4e5940ffc640f10d6901f6582db50899d58bc6c2 (diff)
downloadanaconda-7f3b8c939f8a51f70a1ac628ed7997290079441b.tar.gz
anaconda-7f3b8c939f8a51f70a1ac628ed7997290079441b.tar.xz
anaconda-7f3b8c939f8a51f70a1ac628ed7997290079441b.zip
Don't run localedef in loader if we're just doing English.
This change only wraps all the localedef running in an if statement. There's no need to run localedef for English since we ship that pre-compiled.
Diffstat (limited to 'loader')
-rw-r--r--loader/lang.c100
1 files changed, 52 insertions, 48 deletions
diff --git a/loader/lang.c b/loader/lang.c
index 24878a7d5..646d58019 100644
--- a/loader/lang.c
+++ b/loader/lang.c
@@ -238,63 +238,67 @@ static int setupLanguage(int choice, int forced) {
en_US
cz_CS.UTF-8
cz_CS.UTF-8@latin
- */
- locale_p = locale_i = languages[choice].lc_all;
- while (1) {
- // we found new separator
- if (*locale_i == '.' || *locale_i == '@' || *locale_i == '\0') {
- // last separator was annotating charset
- if (*locale_p == '.') locale_charset = strndup(locale_p + 1, locale_i - locale_p - 1);
- // last separator was annotating modifier
- else if (*locale_p == '@') locale_mod = strndup(locale_p + 1, locale_i - locale_p - 1);
- // there was no known separator last time
- else locale_def = strndup(locale_p, locale_i - locale_p);
-
- // save last known separator
- locale_p = locale_i;
-
- if(*locale_i == '\0') break; // end of the string
+ We only need to do this for non-English installs, as we ship pre-compiled
+ English locale data.
+ */
+ if (strcmp(languages[choice].lc_all, "en_US.UTF-8")) {
+ locale_p = locale_i = languages[choice].lc_all;
+ while (1) {
+ // we found new separator
+ if (*locale_i == '.' || *locale_i == '@' || *locale_i == '\0') {
+ // last separator was annotating charset
+ if (*locale_p == '.') locale_charset = strndup(locale_p + 1, locale_i - locale_p - 1);
+ // last separator was annotating modifier
+ else if (*locale_p == '@') locale_mod = strndup(locale_p + 1, locale_i - locale_p - 1);
+ // there was no known separator last time
+ else locale_def = strndup(locale_p, locale_i - locale_p);
+
+ // save last known separator
+ locale_p = locale_i;
+
+ if(*locale_i == '\0') break; // end of the string
+ }
+
+ // test next character
+ locale_i++;
}
- // test next character
- locale_i++;
- }
+ logMessage(DEBUGLVL, "locale %s: base: %s, mod: %s, charset: %s", languages[choice].lc_all, locale_def, locale_mod, locale_charset);
- logMessage(DEBUGLVL, "locale %s: base: %s, mod: %s, charset: %s", languages[choice].lc_all, locale_def, locale_mod, locale_charset);
+ /* prepare locale name without charset */
+ i = strlen(locale_def);
+ if (locale_mod) i+= strlen(locale_mod) + 1; /* +1 for the @ char */
+ locale_p = (char*)calloc(i+1, sizeof(char));
+ locale_p = strcpy(locale_p, locale_def);
+ if (locale_mod){
+ locale_p[strlen(locale_p)] = '@';
+ locale_p = strcat(locale_p, locale_mod);
+ }
- /* prepare locale name without charset */
- i = strlen(locale_def);
- if (locale_mod) i+= strlen(locale_mod) + 1; /* +1 for the @ char */
- locale_p = (char*)calloc(i+1, sizeof(char));
- locale_p = strcpy(locale_p, locale_def);
- if (locale_mod){
- locale_p[strlen(locale_p)] = '@';
- locale_p = strcat(locale_p, locale_mod);
- }
+ /* generate locale record */
+ logMessage(INFO, "going to prepare locales for %s (locale: %s, charset: %s)", languages[choice].lc_all, locale_p, locale_charset);
+ if ((localedef_pid = fork()) == 0) {
+ execl("/usr/bin/localedef", "localedef",
+ "-i", locale_p,
+ "-f", (locale_charset) ? locale_charset : "UTF-8",
+ languages[choice].lc_all, NULL);
+ _exit(254);
+ }
- /* generate locale record */
- logMessage(INFO, "going to prepare locales for %s (locale: %s, charset: %s)", languages[choice].lc_all, locale_p, locale_charset);
- if ((localedef_pid = fork()) == 0) {
- execl("/usr/bin/localedef", "localedef",
- "-i", locale_p,
- "-f", (locale_charset) ? locale_charset : "UTF-8",
- languages[choice].lc_all, NULL);
- _exit(254);
- }
+ if (localedef_pid < 0) logMessage(ERROR, "failed forking localedef for %s", languages[choice].lc_all);
+ else{
+ waitpid(localedef_pid, &i, 0);
+ if (WEXITSTATUS(i) != 0) logMessage(ERROR, "failed preparing locales %s [%d]", languages[choice].lc_all, WEXITSTATUS(i));
+ }
- if (localedef_pid < 0) logMessage(ERROR, "failed forking localedef for %s", languages[choice].lc_all);
- else{
- waitpid(localedef_pid, &i, 0);
- if (WEXITSTATUS(i) != 0) logMessage(ERROR, "failed preparing locales %s [%d]", languages[choice].lc_all, WEXITSTATUS(i));
+ /* cleanup */
+ if (locale_charset) free(locale_charset);
+ if (locale_def) free(locale_def);
+ if (locale_mod) free(locale_mod);
+ if (locale_p) free(locale_p);
}
- /* cleanup */
- if (locale_charset) free(locale_charset);
- if (locale_def) free(locale_def);
- if (locale_mod) free(locale_mod);
- if (locale_p) free(locale_p);
-
/* load the language only if it is displayable. if they're using
* a serial console or iSeries vioconsole, we hope it's smart enough */
if ((strcmp(languages[choice].font, "latarcyrheb-sun16") && !FL_SERIAL(flags) &&