Properly quote output of locale
This commit is contained in:
parent
3cdaa6adb1
commit
026373745e
@ -1,3 +1,9 @@
|
||||
2010-08-12 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
[BZ #11904]
|
||||
* locale/programs/locale.c (print_assignment): New function.
|
||||
(show_locale_vars): Use it.
|
||||
|
||||
2010-08-11 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/statfs.h (struct statfs): Add f_flags
|
||||
|
4
NEWS
4
NEWS
@ -1,4 +1,4 @@
|
||||
GNU C Library NEWS -- history of user-visible changes. 2010-8-11
|
||||
GNU C Library NEWS -- history of user-visible changes. 2010-8-12
|
||||
Copyright (C) 1992-2009, 2010 Free Software Foundation, Inc.
|
||||
See the end for copying conditions.
|
||||
|
||||
@ -9,7 +9,7 @@ Version 2.13
|
||||
|
||||
* The following bugs are resolved with this release:
|
||||
|
||||
11640, 11701, 11840, 11856, 11883, 11903
|
||||
11640, 11701, 11840, 11856, 11883, 11903, 11904
|
||||
|
||||
* New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark
|
||||
|
||||
|
@ -762,6 +762,29 @@ write_charmaps (void)
|
||||
twalk (all_data, print_names);
|
||||
}
|
||||
|
||||
/* Print a properly quoted assignment of NAME with VAL, using double
|
||||
quotes iff DQUOTE is true. */
|
||||
static void
|
||||
print_assignment (const char *name, const char *val, bool dquote)
|
||||
{
|
||||
printf ("%s=", name);
|
||||
if (dquote)
|
||||
putchar ('"');
|
||||
while (*val != '\0')
|
||||
{
|
||||
size_t segment
|
||||
= strcspn (val, dquote ? "$`\"\\" : "~|&;<>()$`\\\"' \t\n");
|
||||
printf ("%.*s", (int) segment, val);
|
||||
val += segment;
|
||||
if (*val == '\0')
|
||||
break;
|
||||
putchar ('\\');
|
||||
putchar (*val++);
|
||||
}
|
||||
if (dquote)
|
||||
putchar ('"');
|
||||
putchar ('\n');
|
||||
}
|
||||
|
||||
/* We have to show the contents of the environments determining the
|
||||
locale. */
|
||||
@ -769,7 +792,7 @@ static void
|
||||
show_locale_vars (void)
|
||||
{
|
||||
size_t cat_no;
|
||||
const char *lcall = getenv ("LC_ALL");
|
||||
const char *lcall = getenv ("LC_ALL") ? : "";
|
||||
const char *lang = getenv ("LANG") ? : "";
|
||||
|
||||
auto void get_source (const char *name);
|
||||
@ -778,15 +801,15 @@ show_locale_vars (void)
|
||||
{
|
||||
char *val = getenv (name);
|
||||
|
||||
if ((lcall ?: "")[0] != '\0' || val == NULL)
|
||||
printf ("%s=\"%s\"\n", name,
|
||||
(lcall ?: "")[0] ? lcall : (lang ?: "")[0] ? lang : "POSIX");
|
||||
if (lcall[0] != '\0' || val == NULL)
|
||||
print_assignment (name, lcall[0] ? lcall : lang[0] ? lang : "POSIX",
|
||||
true);
|
||||
else
|
||||
printf ("%s=%s\n", name, val);
|
||||
print_assignment (name, val, false);
|
||||
}
|
||||
|
||||
/* LANG has to be the first value. */
|
||||
printf ("LANG=%s\n", lang);
|
||||
print_assignment ("LANG", lang, false);
|
||||
|
||||
/* Now all categories in an unspecified order. */
|
||||
for (cat_no = 0; cat_no < NCATEGORIES; ++cat_no)
|
||||
@ -794,7 +817,7 @@ show_locale_vars (void)
|
||||
get_source (category[cat_no].name);
|
||||
|
||||
/* The last is the LC_ALL value. */
|
||||
printf ("LC_ALL=%s\n", lcall ? : "");
|
||||
print_assignment ("LC_ALL", lcall, false);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user