[tex-k] Locale-related bug in MakeIndex (was: makeindex breaks up index group on a capitalized entry)

Hartmut Henkel hartmut_henkel at gmx.de
Tue Nov 2 00:18:53 CET 2004


On Mon, 1 Nov 2004 geolsoft at mail.ru wrote:

> +#ifdef HAVE_SETLOCALE
> +    prev_locale = setlocale(LC_CTYPE, "");
> +#endif

if this is meant to implement some stack, shouldn't it then be

#ifdef HAVE_SETLOCALE
  prev_locale = setlocale(LC_CTYPE, NULL);
  setlocale(LC_CTYPE, "");
#endif

since with "" instead of the NULL it will already change the locale, so
the prev_locale does not contain the previous value. E. g.

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main()
{
    char *prev_locale, *show_locale;

    show_locale = setlocale(LC_CTYPE, NULL);
    printf("1 show_locale = %s\n", show_locale);

    prev_locale = setlocale(LC_CTYPE, "");
    printf("2 prev_locale = %s\n", prev_locale);

    show_locale = setlocale(LC_CTYPE, NULL);
    printf("3 show_locale = %s\n", show_locale);

    setlocale(LC_CTYPE, prev_locale);

    show_locale = setlocale(LC_CTYPE, NULL);
    printf("4 show_locale = %s\n", show_locale);

    return 0;
}

gives

1 show_locale = C
2 prev_locale = de_DE.ISO-8859-1
3 show_locale = de_DE.ISO-8859-1
4 show_locale = de_DE.ISO-8859-1

No C locale back at the end. And it's similar in sortid.c.

Regards, Hartmut



More information about the tex-k mailing list