clean up and support missing locale
This commit is contained in:
parent
6d2e2597b1
commit
5491abdeeb
@ -671,7 +671,7 @@ PRED_IMPL("normalize_space", 2, normalize_space, 0)
|
|||||||
* LOCALE *
|
* LOCALE *
|
||||||
*******************************/
|
*******************************/
|
||||||
|
|
||||||
#if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE)
|
#if O_LOCALE
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@ -843,15 +843,20 @@ static const enc_map map[] =
|
|||||||
IOENC
|
IOENC
|
||||||
initEncoding(void)
|
initEncoding(void)
|
||||||
{ GET_LD
|
{ GET_LD
|
||||||
|
#if HAVE_SETLOCALE
|
||||||
|
char *enc;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( LD )
|
if ( LD )
|
||||||
{ if ( !LD->encoding )
|
{ if ( !LD->encoding )
|
||||||
{ char *enc, *encp;
|
{
|
||||||
|
|
||||||
if ( !init_locale() )
|
if ( !init_locale() )
|
||||||
{ LD->encoding = ENC_ISO_LATIN_1;
|
{ LD->encoding = ENC_ISO_LATIN_1;
|
||||||
|
#if HAVE_SETLOCALE
|
||||||
} else if ( (enc = setlocale(LC_CTYPE, NULL)) )
|
} else if ( (enc = setlocale(LC_CTYPE, NULL)) )
|
||||||
{ LD->encoding = ENC_ANSI; /* text encoding */
|
{ char *encp;
|
||||||
|
LD->encoding = ENC_ANSI; /* text encoding */
|
||||||
|
|
||||||
if ( (encp = strchr(enc, '.')) )
|
if ( (encp = strchr(enc, '.')) )
|
||||||
{ const enc_map *m;
|
{ const enc_map *m;
|
||||||
@ -874,8 +879,8 @@ initEncoding(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
#endif
|
||||||
{ LD->encoding = ENC_ISO_LATIN_1;
|
} else { LD->encoding = ENC_ISO_LATIN_1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,6 +1115,7 @@ formatInteger(PL_locale *locale, int div, int radix, bool smll, Number i,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if O_LOCALE
|
||||||
|
|
||||||
static int
|
static int
|
||||||
countGroups(const char *grouping, int len)
|
countGroups(const char *grouping, int len)
|
||||||
@ -1141,7 +1142,6 @@ countGroups(const char *grouping, int len)
|
|||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ths_to_utf8(char *u8, const wchar_t *s, size_t len)
|
ths_to_utf8(char *u8, const wchar_t *s, size_t len)
|
||||||
{ char *e = u8+len-7;
|
{ char *e = u8+len-7;
|
||||||
@ -1153,7 +1153,6 @@ ths_to_utf8(char *u8, const wchar_t *s, size_t len)
|
|||||||
return *s == 0;
|
return *s == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
same_decimal_point(PL_locale *l1, PL_locale *l2)
|
same_decimal_point(PL_locale *l1, PL_locale *l2)
|
||||||
{ if ( l1->decimal_point && l2->decimal_point &&
|
{ if ( l1->decimal_point && l2->decimal_point &&
|
||||||
@ -1165,7 +1164,6 @@ same_decimal_point(PL_locale *l1, PL_locale *l2)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
utf8_dp(PL_locale *l, char *s, int *len)
|
utf8_dp(PL_locale *l, char *s, int *len)
|
||||||
{ if ( l->decimal_point )
|
{ if ( l->decimal_point )
|
||||||
@ -1227,7 +1225,6 @@ localizeDecimalPoint(PL_locale *locale, Buffer b)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
groupDigits(PL_locale *locale, Buffer b)
|
groupDigits(PL_locale *locale, Buffer b)
|
||||||
{ if ( locale->thousands_sep && locale->thousands_sep[0] &&
|
{ if ( locale->thousands_sep && locale->thousands_sep[0] &&
|
||||||
@ -1278,6 +1275,7 @@ groupDigits(PL_locale *locale, Buffer b)
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@ -1477,11 +1475,13 @@ formatFloat(PL_locale *locale, int how, int arg, Number f, Buffer out)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if O_LOCALE
|
||||||
if ( locale )
|
if ( locale )
|
||||||
{ if ( !localizeDecimalPoint(locale, out) ||
|
{ if ( !localizeDecimalPoint(locale, out) ||
|
||||||
!groupDigits(locale, out) )
|
!groupDigits(locale, out) )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return baseBuffer(out, char);
|
return baseBuffer(out, char);
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,9 @@ locking is required.
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PL_KERNEL 1
|
#define PL_KERNEL 1
|
||||||
|
#if HAVE_LOCALE_H && HAVE_SETLOCALE
|
||||||
#define O_LOCALE 1
|
#define O_LOCALE 1
|
||||||
|
#endif
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#define NEEDS_SWINSOCK
|
#define NEEDS_SWINSOCK
|
||||||
#include "SWI-Stream.h"
|
#include "SWI-Stream.h"
|
||||||
@ -1800,8 +1802,10 @@ Sclose(IOSTREAM *s)
|
|||||||
|
|
||||||
if ( s->message )
|
if ( s->message )
|
||||||
free(s->message);
|
free(s->message);
|
||||||
|
#if O_LOCALE
|
||||||
if ( s->locale )
|
if ( s->locale )
|
||||||
releaseLocale(s->locale);
|
releaseLocale(s->locale);
|
||||||
|
#endif
|
||||||
if ( s->references == 0 )
|
if ( s->references == 0 )
|
||||||
unallocStream(s);
|
unallocStream(s);
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user