summaryrefslogtreecommitdiff
path: root/src/xine-utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/xine-utils')
-rw-r--r--src/xine-utils/memcpy.c37
-rw-r--r--src/xine-utils/utils.c300
-rw-r--r--src/xine-utils/xmllexer.c22
-rw-r--r--src/xine-utils/xmlparser.c57
4 files changed, 234 insertions, 182 deletions
diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c
index 15b0b228b..45009d23c 100644
--- a/src/xine-utils/memcpy.c
+++ b/src/xine-utils/memcpy.c
@@ -382,30 +382,29 @@ static void *linux_kernel_memcpy(void *to, const void *from, size_t len) {
#endif /* _MSC_VER */
#endif /* ARCH_X86 */
-static struct {
- char *const name;
+static const struct {
+ const char name[16];
void *(*const function)(void *to, const void *from, size_t len);
- uint64_t time; /* This type could be used for non-MSC build too! */
-
uint32_t cpu_require;
} memcpy_method[] =
{
- { NULL, NULL, 0, 0 },
- { "libc memcpy()", memcpy, 0, 0 },
+ { "", NULL, 0 },
+ { "libc", memcpy, 0 },
#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined(_MSC_VER)
- { "linux kernel memcpy()", linux_kernel_memcpy, 0, 0 },
- { "MMX optimized memcpy()", mmx_memcpy, 0, MM_MMX },
- { "MMXEXT optimized memcpy()", mmx2_memcpy, 0, MM_MMXEXT },
- { "SSE optimized memcpy()", sse_memcpy, 0, MM_MMXEXT|MM_SSE },
+ { "linux kernel", linux_kernel_memcpy, 0 },
+ { "MMX ", mmx_memcpy, MM_MMX },
+ { "MMXEXT", mmx2_memcpy, MM_MMXEXT },
+ { "SSE", sse_memcpy, MM_MMXEXT|MM_SSE },
#endif /* ARCH_X86 */
#if defined (ARCH_PPC) && !defined (HOST_OS_DARWIN)
- { "ppcasm_memcpy()", ppcasm_memcpy, 0, 0 },
- { "ppcasm_cacheable_memcpy()", ppcasm_cacheable_memcpy, 0, MM_ACCEL_PPC_CACHE32 },
+ { "ppcasm", ppcasm_memcpy, 0 },
+ { "ppcasm_cached", ppcasm_cacheable_memcpy, MM_ACCEL_PPC_CACHE32 },
#endif /* ARCH_PPC && !HOST_OS_DARWIN */
- { NULL, NULL, 0, 0 }
};
+static uint64_t memcpy_timing[sizeof(memcpy_method)/sizeof(memcpy_method[0])] = { 0, };
+
#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && defined(HAVE_SYS_TIMES_H)
static int64_t rdtsc(int config_flags)
{
@@ -446,7 +445,7 @@ static void update_fast_memcpy(void *user_data, xine_cfg_entry_t *entry) {
if (method != 0
&& (config_flags & memcpy_method[method].cpu_require) ==
memcpy_method[method].cpu_require ) {
- lprintf("using %s\n", memcpy_method[method].name );
+ lprintf("using %s memcpy()\n", memcpy_method[method].name );
xine_fast_memcpy = memcpy_method[method].function;
return;
} else {
@@ -487,7 +486,7 @@ void xine_probe_fast_memcpy(xine_t *xine)
if( best != 0 &&
(config_flags & memcpy_method[best].cpu_require) ==
memcpy_method[best].cpu_require ) {
- lprintf("using %s\n", memcpy_method[best].name );
+ lprintf("using %s memcpy()\n", memcpy_method[best].name );
xine_fast_memcpy = memcpy_method[best].function;
return;
}
@@ -509,7 +508,7 @@ void xine_probe_fast_memcpy(xine_t *xine)
memset(buf1,0,BUFSIZE);
memset(buf2,0,BUFSIZE);
- for(i=1; memcpy_method[i].name; i++)
+ for(i = 1; i < sizeof(memcpy_method)/sizeof(memcpy_method[0]); i++)
{
if( (config_flags & memcpy_method[i].cpu_require) !=
memcpy_method[i].cpu_require )
@@ -522,11 +521,11 @@ void xine_probe_fast_memcpy(xine_t *xine)
}
t = rdtsc(config_flags) - t;
- memcpy_method[i].time = t;
+ memcpy_timing[i] = t;
- xprintf(xine, XINE_VERBOSITY_LOG, "\t%s : %" PRIu64 "\n", memcpy_method[i].name, t);
+ xprintf(xine, XINE_VERBOSITY_LOG, "\t%s memcpy() : %" PRIu64 "\n", memcpy_method[i].name, t);
- if( best == 0 || t < memcpy_method[best].time )
+ if( best == 0 || t < memcpy_timing[best] )
best = i;
}
diff --git a/src/xine-utils/utils.c b/src/xine-utils/utils.c
index f3c10a61b..8363f5831 100644
--- a/src/xine-utils/utils.c
+++ b/src/xine-utils/utils.c
@@ -57,10 +57,10 @@
#endif
typedef struct {
- char *language; /* name of the locale */
- char *encoding; /* typical encoding */
- char *spu_encoding; /* default spu encoding */
- char *modifier;
+ const char language[16]; /* name of the locale */
+ const char encoding[16]; /* typical encoding */
+ const char spu_encoding[16]; /* default spu encoding */
+ const char modifier[8];
} lang_locale_t;
@@ -68,172 +68,172 @@ typedef struct {
* information about locales used in xine
*/
static const lang_locale_t lang_locales[] = {
- { "af_ZA", "iso-8859-1", "iso-8859-1", NULL },
- { "ar_AE", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_BH", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_DZ", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_EG", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_IN", "utf-8", "utf-8", NULL },
- { "ar_IQ", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_JO", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_KW", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_LB", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_LY", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_MA", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_OM", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_QA", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_SA", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_SD", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_SY", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_TN", "iso-8859-6", "iso-8859-6", NULL },
- { "ar_YE", "iso-8859-6", "iso-8859-6", NULL },
- { "be_BY", "cp1251", "cp1251", NULL },
- { "bg_BG", "cp1251", "cp1251", NULL },
- { "br_FR", "iso-8859-1", "iso-88591", NULL },
- { "bs_BA", "iso-8859-2", "cp1250", NULL },
- { "ca_ES", "iso-8859-1", "iso-88591", NULL },
+ { "af_ZA", "iso-8859-1", "iso-8859-1", "" },
+ { "ar_AE", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_BH", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_DZ", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_EG", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_IN", "utf-8", "utf-8", "" },
+ { "ar_IQ", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_JO", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_KW", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_LB", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_LY", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_MA", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_OM", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_QA", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_SA", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_SD", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_SY", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_TN", "iso-8859-6", "iso-8859-6", "" },
+ { "ar_YE", "iso-8859-6", "iso-8859-6", "" },
+ { "be_BY", "cp1251", "cp1251", "" },
+ { "bg_BG", "cp1251", "cp1251", "" },
+ { "br_FR", "iso-8859-1", "iso-88591", "" },
+ { "bs_BA", "iso-8859-2", "cp1250", "" },
+ { "ca_ES", "iso-8859-1", "iso-88591", "" },
{ "ca_ES", "iso-8859-15", "iso-8859-15", "euro" },
- { "cs_CZ", "iso-8859-2", "cp1250", NULL },
- { "cy_GB", "iso-8859-14", "iso-8859-14", NULL },
- { "da_DK", "iso-8859-1", "iso-8859-1", NULL },
- { "de_AT", "iso-8859-1", "iso-8859-1", NULL },
+ { "cs_CZ", "iso-8859-2", "cp1250", "" },
+ { "cy_GB", "iso-8859-14", "iso-8859-14", "" },
+ { "da_DK", "iso-8859-1", "iso-8859-1", "" },
+ { "de_AT", "iso-8859-1", "iso-8859-1", "" },
{ "de_AT", "iso-8859-15", "iso-8859-15", "euro" },
- { "de_BE", "iso-8859-1", "iso-8859-1", NULL },
+ { "de_BE", "iso-8859-1", "iso-8859-1", "" },
{ "de_BE", "iso-8859-15", "iso-8859-15", "euro" },
- { "de_CH", "iso-8859-1", "iso-8859-1", NULL },
- { "de_DE", "iso-8859-1", "iso-8859-1", NULL },
+ { "de_CH", "iso-8859-1", "iso-8859-1", "" },
+ { "de_DE", "iso-8859-1", "iso-8859-1", "" },
{ "de_DE", "iso-8859-15", "iso-8859-15", "euro" },
- { "de_LU", "iso-8859-1", "iso-8859-1", NULL },
+ { "de_LU", "iso-8859-1", "iso-8859-1", "" },
{ "de_LU", "iso-8859-15", "iso-8859-15", "euro" },
- { "el_GR", "iso-8859-7", "iso-8859-7", NULL },
- { "en_AU", "iso-8859-1", "iso-8859-1", NULL },
- { "en_BW", "iso-8859-1", "iso-8859-1", NULL },
- { "en_CA", "iso-8859-1", "iso-8859-1", NULL },
- { "en_DK", "iso-8859-1", "iso-8859-1", NULL },
- { "en_GB", "iso-8859-1", "iso-8859-1", NULL },
- { "en_HK", "iso-8859-1", "iso-8859-1", NULL },
- { "en_IE", "iso-8859-1", "iso-8859-1", NULL },
+ { "el_GR", "iso-8859-7", "iso-8859-7", "" },
+ { "en_AU", "iso-8859-1", "iso-8859-1", "" },
+ { "en_BW", "iso-8859-1", "iso-8859-1", "" },
+ { "en_CA", "iso-8859-1", "iso-8859-1", "" },
+ { "en_DK", "iso-8859-1", "iso-8859-1", "" },
+ { "en_GB", "iso-8859-1", "iso-8859-1", "" },
+ { "en_HK", "iso-8859-1", "iso-8859-1", "" },
+ { "en_IE", "iso-8859-1", "iso-8859-1", "" },
{ "en_IE", "iso-8859-15", "iso-8859-15", "euro" },
- { "en_IN", "utf-8", "utf-8", NULL },
- { "en_NZ", "iso-8859-1", "iso-8859-1", NULL },
- { "en_PH", "iso-8859-1", "iso-8859-1", NULL },
- { "en_SG", "iso-8859-1", "iso-8859-1", NULL },
- { "en_US", "iso-8859-1", "iso-8859-1", NULL },
- { "en_ZA", "iso-8859-1", "iso-8859-1", NULL },
- { "en_ZW", "iso-8859-1", "iso-8859-1", NULL },
- { "es_AR", "iso-8859-1", "iso-8859-1", NULL },
- { "es_BO", "iso-8859-1", "iso-8859-1", NULL },
- { "es_CL", "iso-8859-1", "iso-8859-1", NULL },
- { "es_CO", "iso-8859-1", "iso-8859-1", NULL },
- { "es_CR", "iso-8859-1", "iso-8859-1", NULL },
- { "es_DO", "iso-8859-1", "iso-8859-1", NULL },
- { "es_EC", "iso-8859-1", "iso-8859-1", NULL },
- { "es_ES", "iso-8859-1", "iso-8859-1", NULL },
+ { "en_IN", "utf-8", "utf-8", "" },
+ { "en_NZ", "iso-8859-1", "iso-8859-1", "" },
+ { "en_PH", "iso-8859-1", "iso-8859-1", "" },
+ { "en_SG", "iso-8859-1", "iso-8859-1", "" },
+ { "en_US", "iso-8859-1", "iso-8859-1", "" },
+ { "en_ZA", "iso-8859-1", "iso-8859-1", "" },
+ { "en_ZW", "iso-8859-1", "iso-8859-1", "" },
+ { "es_AR", "iso-8859-1", "iso-8859-1", "" },
+ { "es_BO", "iso-8859-1", "iso-8859-1", "" },
+ { "es_CL", "iso-8859-1", "iso-8859-1", "" },
+ { "es_CO", "iso-8859-1", "iso-8859-1", "" },
+ { "es_CR", "iso-8859-1", "iso-8859-1", "" },
+ { "es_DO", "iso-8859-1", "iso-8859-1", "" },
+ { "es_EC", "iso-8859-1", "iso-8859-1", "" },
+ { "es_ES", "iso-8859-1", "iso-8859-1", "" },
{ "es_ES", "iso-8859-15", "iso-8859-15", "euro" },
- { "es_GT", "iso-8859-1", "iso-8859-1", NULL },
- { "es_HN", "iso-8859-1", "iso-8859-1", NULL },
- { "es_MX", "iso-8859-1", "iso-8859-1", NULL },
- { "es_NI", "iso-8859-1", "iso-8859-1", NULL },
- { "es_PA", "iso-8859-1", "iso-8859-1", NULL },
- { "es_PE", "iso-8859-1", "iso-8859-1", NULL },
- { "es_PR", "iso-8859-1", "iso-8859-1", NULL },
- { "es_PY", "iso-8859-1", "iso-8859-1", NULL },
- { "es_SV", "iso-8859-1", "iso-8859-1", NULL },
- { "es_US", "iso-8859-1", "iso-8859-1", NULL },
- { "es_UY", "iso-8859-1", "iso-8859-1", NULL },
- { "es_VE", "iso-8859-1", "iso-8859-1", NULL },
- { "et_EE", "iso-8859-1", "iso-8859-1", NULL },
- { "eu_ES", "iso-8859-1", "iso-8859-1", NULL },
+ { "es_GT", "iso-8859-1", "iso-8859-1", "" },
+ { "es_HN", "iso-8859-1", "iso-8859-1", "" },
+ { "es_MX", "iso-8859-1", "iso-8859-1", "" },
+ { "es_NI", "iso-8859-1", "iso-8859-1", "" },
+ { "es_PA", "iso-8859-1", "iso-8859-1", "" },
+ { "es_PE", "iso-8859-1", "iso-8859-1", "" },
+ { "es_PR", "iso-8859-1", "iso-8859-1", "" },
+ { "es_PY", "iso-8859-1", "iso-8859-1", "" },
+ { "es_SV", "iso-8859-1", "iso-8859-1", "" },
+ { "es_US", "iso-8859-1", "iso-8859-1", "" },
+ { "es_UY", "iso-8859-1", "iso-8859-1", "" },
+ { "es_VE", "iso-8859-1", "iso-8859-1", "" },
+ { "et_EE", "iso-8859-1", "iso-8859-1", "" },
+ { "eu_ES", "iso-8859-1", "iso-8859-1", "" },
{ "eu_ES", "iso-8859-15", "iso-8859-15", "euro" },
- { "fa_IR", "utf-8", "utf-8", NULL },
- { "fi_FI", "iso-8859-1", "iso-8859-1", NULL },
+ { "fa_IR", "utf-8", "utf-8", "" },
+ { "fi_FI", "iso-8859-1", "iso-8859-1", "" },
{ "fi_FI", "iso-8859-15", "iso-8859-15", "euro" },
- { "fo_FO", "iso-8859-1", "iso-8859-1", NULL },
- { "fr_BE", "iso-8859-1", "iso-8859-1", NULL },
+ { "fo_FO", "iso-8859-1", "iso-8859-1", "" },
+ { "fr_BE", "iso-8859-1", "iso-8859-1", "" },
{ "fr_BE", "iso-8859-15", "iso-8859-15", "euro" },
- { "fr_CA", "iso-8859-1", "iso-8859-1", NULL },
- { "fr_CH", "iso-8859-1", "iso-8859-1", NULL },
- { "fr_FR", "iso-8859-1", "iso-8859-1", NULL },
+ { "fr_CA", "iso-8859-1", "iso-8859-1", "" },
+ { "fr_CH", "iso-8859-1", "iso-8859-1", "" },
+ { "fr_FR", "iso-8859-1", "iso-8859-1", "" },
{ "fr_FR", "iso-8859-15", "iso-8859-15", "euro" },
- { "fr_LU", "iso-8859-1", "iso-8859-1", NULL },
+ { "fr_LU", "iso-8859-1", "iso-8859-1", "" },
{ "fr_LU", "iso-8859-15", "iso-8859-15", "euro" },
- { "ga_IE", "iso-8859-1", "iso-8859-1", NULL },
+ { "ga_IE", "iso-8859-1", "iso-8859-1", "" },
{ "ga_IE", "iso-8859-15", "iso-8859-15", "euro" },
- { "gl_ES", "iso-8859-1", "iso-8859-1", NULL },
+ { "gl_ES", "iso-8859-1", "iso-8859-1", "" },
{ "gl_ES", "iso-8859-15", "iso-8859-15", "euro" },
- { "gv_GB", "iso-8859-1", "iso-8859-1", NULL },
- { "he_IL", "iso-8859-8", "iso-8859-8", NULL },
- { "hi_IN", "utf-8", "utf-8", NULL },
- { "hr_HR", "iso-8859-2", "cp1250", NULL },
- { "hu_HU", "iso-8859-2", "cp1250", NULL },
- { "id_ID", "iso-8859-1", "iso-8859-1", NULL },
- { "is_IS", "iso-8859-1", "iso-8859-1", NULL },
- { "it_CH", "iso-8859-1", "iso-8859-1", NULL },
- { "it_IT", "iso-8859-1", "iso-8859-1", NULL },
+ { "gv_GB", "iso-8859-1", "iso-8859-1", "" },
+ { "he_IL", "iso-8859-8", "iso-8859-8", "" },
+ { "hi_IN", "utf-8", "utf-8", "" },
+ { "hr_HR", "iso-8859-2", "cp1250", "" },
+ { "hu_HU", "iso-8859-2", "cp1250", "" },
+ { "id_ID", "iso-8859-1", "iso-8859-1", "" },
+ { "is_IS", "iso-8859-1", "iso-8859-1", "" },
+ { "it_CH", "iso-8859-1", "iso-8859-1", "" },
+ { "it_IT", "iso-8859-1", "iso-8859-1", "" },
{ "it_IT", "iso-8859-15", "iso-8859-15", "euro" },
- { "iw_IL", "iso-8859-8", "iso-8859-8", NULL },
- { "ja_JP", "euc-jp", "euc-jp", NULL },
- { "ja_JP", "ujis", "ujis", NULL },
- { "japanese", "euc", "euc", NULL },
- { "ka_GE", "georgian-ps", "georgian-ps", NULL },
- { "kl_GL", "iso-8859-1", "iso-8859-1", NULL },
- { "ko_KR", "euc-kr", "euc-kr", NULL },
- { "ko_KR", "utf-8", "utf-8", NULL },
- { "korean", "euc", "euc", NULL },
- { "kw_GB", "iso-8859-1", "iso-8859-1", NULL },
- { "lt_LT", "iso-8859-13", "iso-8859-13", NULL },
- { "lv_LV", "iso-8859-13", "iso-8859-13", NULL },
- { "mi_NZ", "iso-8859-13", "iso-8859-13", NULL },
- { "mk_MK", "iso-8859-5", "cp1251", NULL },
- { "mr_IN", "utf-8", "utf-8", NULL },
- { "ms_MY", "iso-8859-1", "iso-8859-1", NULL },
- { "mt_MT", "iso-8859-3", "iso-8859-3", NULL },
- { "nb_NO", "ISO-8859-1", "ISO-8859-1", NULL },
- { "nl_BE", "iso-8859-1", "iso-8859-1", NULL },
+ { "iw_IL", "iso-8859-8", "iso-8859-8", "" },
+ { "ja_JP", "euc-jp", "euc-jp", "" },
+ { "ja_JP", "ujis", "ujis", "" },
+ { "japanese", "euc", "euc", "" },
+ { "ka_GE", "georgian-ps", "georgian-ps", "" },
+ { "kl_GL", "iso-8859-1", "iso-8859-1", "" },
+ { "ko_KR", "euc-kr", "euc-kr", "" },
+ { "ko_KR", "utf-8", "utf-8", "" },
+ { "korean", "euc", "euc", "" },
+ { "kw_GB", "iso-8859-1", "iso-8859-1", "" },
+ { "lt_LT", "iso-8859-13", "iso-8859-13", "" },
+ { "lv_LV", "iso-8859-13", "iso-8859-13", "" },
+ { "mi_NZ", "iso-8859-13", "iso-8859-13", "" },
+ { "mk_MK", "iso-8859-5", "cp1251", "" },
+ { "mr_IN", "utf-8", "utf-8", "" },
+ { "ms_MY", "iso-8859-1", "iso-8859-1", "" },
+ { "mt_MT", "iso-8859-3", "iso-8859-3", "" },
+ { "nb_NO", "ISO-8859-1", "ISO-8859-1", "" },
+ { "nl_BE", "iso-8859-1", "iso-8859-1", "" },
{ "nl_BE", "iso-8859-15", "iso-8859-15", "euro" },
- { "nl_NL", "iso-8859-1", "iso-8859-1", NULL },
+ { "nl_NL", "iso-8859-1", "iso-8859-1", "" },
{ "nl_NL", "iso-8859-15", "iso-8859-15", "euro" },
- { "nn_NO", "iso-8859-1", "iso-8859-1", NULL },
- { "no_NO", "iso-8859-1", "iso-8859-1", NULL },
- { "oc_FR", "iso-8859-1", "iso-8859-1", NULL },
- { "pl_PL", "iso-8859-2", "cp1250", NULL },
- { "pt_BR", "iso-8859-1", "iso-8859-1", NULL },
- { "pt_PT", "iso-8859-1", "iso-8859-1", NULL },
+ { "nn_NO", "iso-8859-1", "iso-8859-1", "" },
+ { "no_NO", "iso-8859-1", "iso-8859-1", "" },
+ { "oc_FR", "iso-8859-1", "iso-8859-1", "" },
+ { "pl_PL", "iso-8859-2", "cp1250", "" },
+ { "pt_BR", "iso-8859-1", "iso-8859-1", "" },
+ { "pt_PT", "iso-8859-1", "iso-8859-1", "" },
{ "pt_PT", "iso-8859-15", "iso-8859-15", "euro" },
- { "ro_RO", "iso-8859-2", "cp1250", NULL },
- { "ru_RU", "iso-8859-5", "cp1251", NULL },
- { "ru_RU", "koi8-r", "cp1251", NULL },
- { "ru_UA", "koi8-u", "cp1251", NULL },
- { "se_NO", "utf-8", "utf-8", NULL },
- { "sk_SK", "iso-8859-2", "cp1250", NULL },
- { "sl_SI", "iso-8859-2", "cp1250", NULL },
- { "sq_AL", "iso-8859-1", "iso-8859-1", NULL },
- { "sr_YU", "iso-8859-2", "cp1250", NULL },
+ { "ro_RO", "iso-8859-2", "cp1250", "" },
+ { "ru_RU", "iso-8859-5", "cp1251", "" },
+ { "ru_RU", "koi8-r", "cp1251", "" },
+ { "ru_UA", "koi8-u", "cp1251", "" },
+ { "se_NO", "utf-8", "utf-8", "" },
+ { "sk_SK", "iso-8859-2", "cp1250", "" },
+ { "sl_SI", "iso-8859-2", "cp1250", "" },
+ { "sq_AL", "iso-8859-1", "iso-8859-1", "" },
+ { "sr_YU", "iso-8859-2", "cp1250", "" },
{ "sr_YU", "iso-8859-5", "cp1251", "cyrillic" },
- { "sv_FI", "iso-8859-1", "iso-8859-1", NULL },
+ { "sv_FI", "iso-8859-1", "iso-8859-1", "" },
{ "sv_FI", "iso-8859-15", "iso-8859-15", "euro" },
- { "sv_SE", "iso-8859-1", "iso-8859-1", NULL },
- { "ta_IN", "utf-8", "utf-8", NULL },
- { "te_IN", "utf-8", "utf-8", NULL },
- { "tg_TJ", "koi8-t", "cp1251", NULL },
- { "th_TH", "tis-620", "tis-620", NULL },
- { "tl_PH", "iso-8859-1", "iso-8859-1", NULL },
- { "tr_TR", "iso-8859-9", "iso-8859-9", NULL },
- { "uk_UA", "koi8-u", "cp1251", NULL },
- { "ur_PK", "utf-8", "utf-8", NULL },
- { "uz_UZ", "iso-8859-1", "iso-8859-1", NULL },
- { "vi_VN", "tcvn", "tcvn", NULL },
- { "vi_VN", "utf-8", "utf-8", NULL },
- { "wa_BE", "iso-8859-1", "iso-8859-1", NULL },
+ { "sv_SE", "iso-8859-1", "iso-8859-1", "" },
+ { "ta_IN", "utf-8", "utf-8", "" },
+ { "te_IN", "utf-8", "utf-8", "" },
+ { "tg_TJ", "koi8-t", "cp1251", "" },
+ { "th_TH", "tis-620", "tis-620", "" },
+ { "tl_PH", "iso-8859-1", "iso-8859-1", "" },
+ { "tr_TR", "iso-8859-9", "iso-8859-9", "" },
+ { "uk_UA", "koi8-u", "cp1251", "" },
+ { "ur_PK", "utf-8", "utf-8", "" },
+ { "uz_UZ", "iso-8859-1", "iso-8859-1", "" },
+ { "vi_VN", "tcvn", "tcvn", "" },
+ { "vi_VN", "utf-8", "utf-8", "" },
+ { "wa_BE", "iso-8859-1", "iso-8859-1", "" },
{ "wa_BE", "iso-8859-15", "iso-8859-15", "euro" },
- { "yi_US", "cp1255", "cp1255", NULL },
- { "zh_CN", "gb18030", "gb18030", NULL },
- { "zh_CN", "gb2312", "gb2312", NULL },
- { "zh_CN", "gbk", "gbk", NULL },
- { "zh_HK", "big5-hkscs", "big5-hkscs", NULL },
- { "zh_TW", "big-5", "big-5", NULL },
- { "zh_TW", "euc-tw", "euc-tw", NULL },
- { NULL, NULL, NULL, NULL }
+ { "yi_US", "cp1255", "cp1255", "" },
+ { "zh_CN", "gb18030", "gb18030", "" },
+ { "zh_CN", "gb2312", "gb2312", "" },
+ { "zh_CN", "gbk", "gbk", "" },
+ { "zh_HK", "big5-hkscs", "big5-hkscs", "" },
+ { "zh_TW", "big-5", "big-5", "" },
+ { "zh_TW", "euc-tw", "euc-tw", "" },
+ { "" }
};
@@ -532,7 +532,7 @@ static const lang_locale_t *_get_first_lang_locale(const char *lcal) {
else
lang_len = strlen(lcal);
- while(llocale->language) {
+ while(*(llocale->language)) {
if(!strncmp(lcal, llocale->language, lang_len)) {
if ((!mod && !llocale->modifier) || (mod && llocale->modifier && !strcmp(mod, llocale->modifier)))
return llocale;
diff --git a/src/xine-utils/xmllexer.c b/src/xine-utils/xmllexer.c
index e276beef0..579007e52 100644
--- a/src/xine-utils/xmllexer.c
+++ b/src/xine-utils/xmllexer.c
@@ -144,7 +144,9 @@ typedef enum {
STATE_IDENT /* must be last */
} lexer_state_t;
-int lexer_get_token(char * tok, int tok_size) {
+int lexer_get_token_d(char ** _tok, int * _tok_size, int fixed) {
+ char *tok = *_tok;
+ int tok_size = *_tok_size;
int tok_pos = 0;
lexer_state_t state = STATE_IDLE;
char c;
@@ -513,7 +515,17 @@ int lexer_get_token(char * tok, int tok_size) {
/* pb */
if (tok_pos >= tok_size) {
- lprintf("token buffer is too little\n");
+ if (fixed)
+ return T_ERROR;
+ *_tok_size *= 2;
+ *_tok = realloc (*_tok, *_tok_size);
+ lprintf("token buffer is too small\n");
+ lprintf("increasing buffer size to %d bytes\n", *_tok_size);
+ if (*_tok) {
+ return lexer_get_token_d (_tok, _tok_size, 0);
+ } else {
+ return T_ERROR;
+ }
} else {
if (lexbuf_pos >= lexbuf_size) {
/* Terminate the current token */
@@ -556,6 +568,12 @@ int lexer_get_token(char * tok, int tok_size) {
return T_ERROR;
}
+/* for ABI compatibility */
+int lexer_get_token (char *tok, int tok_size)
+{
+ return lexer_get_token_d (&tok, &tok_size, 1);
+}
+
static struct {
char code;
unsigned char namelen;
diff --git a/src/xine-utils/xmlparser.c b/src/xine-utils/xmlparser.c
index 1213072f3..8ef828105 100644
--- a/src/xine-utils/xmlparser.c
+++ b/src/xine-utils/xmlparser.c
@@ -219,11 +219,14 @@ static xml_node_t *xml_parser_append_text (xml_node_t *node, xml_node_t *subnode
#define Q_STATE(CURRENT,NEW) (STATE_##NEW + state - STATE_##CURRENT)
-static int xml_parser_get_node_internal (xml_node_t *current_node, char *root_names[], int rec, int flags)
+static int xml_parser_get_node_internal (char ** token_buffer, int * token_buffer_size,
+ char ** pname_buffer, int * pname_buffer_size,
+ char ** nname_buffer, int * nname_buffer_size,
+ xml_node_t *current_node, char *root_names[], int rec, int flags)
{
- char tok[TOKEN_SIZE];
- char property_name[TOKEN_SIZE];
- char node_name[TOKEN_SIZE];
+ char *tok = *token_buffer;
+ char *property_name = *pname_buffer;
+ char *node_name = *nname_buffer;
parser_state_t state = STATE_IDLE;
int res = 0;
int parse_res;
@@ -236,9 +239,10 @@ static int xml_parser_get_node_internal (xml_node_t *current_node, char *root_na
if (rec < MAX_RECURSION) {
- memset (tok, 0, TOKEN_SIZE);
+ memset (tok, 0, *token_buffer_size);
- while ((bypass_get_token) || (res = lexer_get_token(tok, TOKEN_SIZE)) != T_ERROR) {
+ while ((bypass_get_token) || (res = lexer_get_token_d(token_buffer, token_buffer_size, 0)) != T_ERROR) {
+ tok = *token_buffer;
bypass_get_token = 0;
lprintf("info: %d - %d : '%s'\n", state, res, tok);
@@ -298,10 +302,15 @@ static int xml_parser_get_node_internal (xml_node_t *current_node, char *root_na
strtoupper(tok);
}
if (state == STATE_Q_NODE) {
- snprintf (node_name, TOKEN_SIZE, "?%s", tok);
+ asprintf (&node_name, "?%s", tok);
+ free (*nname_buffer);
+ *nname_buffer = node_name;
+ *nname_buffer_size = strlen (node_name) + 1;
state = STATE_Q_ATTRIBUTE;
} else {
- strcpy(node_name, tok);
+ free (*nname_buffer);
+ *nname_buffer = node_name = strdup (tok);
+ *nname_buffer_size = strlen (node_name) + 1;
state = STATE_ATTRIBUTE;
}
lprintf("info: current node name \"%s\"\n", node_name);
@@ -329,8 +338,12 @@ static int xml_parser_get_node_internal (xml_node_t *current_node, char *root_na
/* set node propertys */
subtree->props = properties;
lprintf("info: rec %d new subtree %s\n", rec, node_name);
- root_names[rec + 1] = node_name;
- parse_res = xml_parser_get_node_internal(subtree, root_names, rec + 1, flags);
+ root_names[rec + 1] = strdup (node_name);
+ parse_res = xml_parser_get_node_internal (token_buffer, token_buffer_size,
+ pname_buffer, pname_buffer_size,
+ nname_buffer, nname_buffer_size,
+ subtree, root_names, rec + 1, flags);
+ free (root_names[rec + 1]);
if (parse_res == -1 || parse_res > 0) {
return parse_res;
}
@@ -376,6 +389,12 @@ static int xml_parser_get_node_internal (xml_node_t *current_node, char *root_na
if (xml_parser_mode == XML_PARSER_CASE_INSENSITIVE) {
strtoupper(tok);
}
+ /* make sure the buffer for the property name is big enough */
+ if (*token_buffer_size > *pname_buffer_size) {
+ *pname_buffer_size = *token_buffer_size;
+ *pname_buffer = realloc (*pname_buffer, *pname_buffer_size);
+ property_name = *pname_buffer;
+ }
strcpy(property_name, tok);
state = Q_STATE(ATTRIBUTE, ATTRIBUTE_EQUALS);
lprintf("info: current property name \"%s\"\n", property_name);
@@ -622,9 +641,25 @@ static int xml_parser_get_node_internal (xml_node_t *current_node, char *root_na
static int xml_parser_get_node (xml_node_t *current_node, int flags)
{
+ int res = 0;
+ int token_buffer_size = TOKEN_SIZE;
+ int pname_buffer_size = TOKEN_SIZE;
+ int nname_buffer_size = TOKEN_SIZE;
+ char *token_buffer = xine_xmalloc (token_buffer_size);
+ char *pname_buffer = xine_xmalloc (pname_buffer_size);
+ char *nname_buffer = xine_xmalloc (nname_buffer_size);
char *root_names[MAX_RECURSION + 1];
root_names[0] = "";
- return xml_parser_get_node_internal (current_node, root_names, 0, flags);
+ res = xml_parser_get_node_internal (&token_buffer, &token_buffer_size,
+ &pname_buffer, &pname_buffer_size,
+ &nname_buffer, &nname_buffer_size,
+ current_node, root_names, 0, flags);
+
+ free (token_buffer);
+ free (pname_buffer);
+ free (nname_buffer);
+
+ return res;
}
int xml_parser_build_tree_with_options(xml_node_t **root_node, int flags) {