summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Kuleshov <sergey@gentoo.org>2003-10-26 10:37:10 +0000
committerSergey Kuleshov <sergey@gentoo.org>2003-10-26 10:37:10 +0000
commit9d21ac162e78dc355d83db480de929ca9cf86779 (patch)
tree6943e0e1c481415c1fd7ddaa9f8f0b58001f2037 /media-sound
parentFixed bug #31984. (diff)
downloadgentoo-2-9d21ac162e78dc355d83db480de929ca9cf86779.tar.gz
gentoo-2-9d21ac162e78dc355d83db480de929ca9cf86779.tar.bz2
gentoo-2-9d21ac162e78dc355d83db480de929ca9cf86779.zip
Fixed bug #31984.
Diffstat (limited to 'media-sound')
-rw-r--r--media-sound/xmms/ChangeLog6
-rw-r--r--media-sound/xmms/Manifest2
-rw-r--r--media-sound/xmms/files/xmms-1.2.8-russian-charset-csa20.patch438
3 files changed, 433 insertions, 13 deletions
diff --git a/media-sound/xmms/ChangeLog b/media-sound/xmms/ChangeLog
index 1caa26b9ec11..55b1345efaa4 100644
--- a/media-sound/xmms/ChangeLog
+++ b/media-sound/xmms/ChangeLog
@@ -1,6 +1,10 @@
# ChangeLog for media-sound/xmms
# Copyright 2002-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-sound/xmms/ChangeLog,v 1.74 2003/10/25 14:46:14 sergey Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-sound/xmms/ChangeLog,v 1.75 2003/10/26 10:36:53 sergey Exp $
+
+ 26 Oct 2003; Sergey Kuleshov <svyatogor@gentoo.org>
+ files/xmms-1.2.8-russian-charset-csa20.patch:
+ Fixed bug 31984 - xmms-1.2.8-r3 Assertion `xmms_autocharset_changed>=0' failed.
25 Oct 2003; Sergey Kuleshov <svyatogor@gentoo.org>
files/xmms-1.2.8-russian-charset-csa20.patch:
diff --git a/media-sound/xmms/Manifest b/media-sound/xmms/Manifest
index e478641e9181..d6a57884dc2e 100644
--- a/media-sound/xmms/Manifest
+++ b/media-sound/xmms/Manifest
@@ -4,7 +4,7 @@ MD5 1f4fb5fbbf7591ead0b68071825b2de3 xmms-1.2.7-r25.ebuild 5652
MD5 5013cb7f0010b3daa8efd1548cbe83b4 xmms-1.2.7-r20.ebuild 4923
MD5 0ee64fc05669ecd516d7239e2a575e8d xmms-1.2.8.ebuild 4350
MD5 092d1ae9348717c6e29072cbc747275e xmms-1.2.8-r1.ebuild 3813
-MD5 b3004970ff961855fdfba02d6982554b ChangeLog 14332
+MD5 8a8df71f2ebc6541bc5e8b5bd34b4953 ChangeLog 14517
MD5 95743b6989cd2228a9074bb0f484237c xmms-1.2.8-r3.ebuild 4559
MD5 a1eaeb2ae801daeb712c90c060e922dc metadata.xml 158
MD5 e7e0c91780b115aaad1a1ed534bf7ae8 files/xmms-ipv6-20020408-mmx.patch 9210
diff --git a/media-sound/xmms/files/xmms-1.2.8-russian-charset-csa20.patch b/media-sound/xmms/files/xmms-1.2.8-russian-charset-csa20.patch
index 7ee57e05c82b..2efb507eab28 100644
--- a/media-sound/xmms/files/xmms-1.2.8-russian-charset-csa20.patch
+++ b/media-sound/xmms/files/xmms-1.2.8-russian-charset-csa20.patch
@@ -842,8 +842,8 @@ diff -dPNur xmms-1.2.8/libxmms/charset_auto_russian.h xmms-1.2.8-patched/libxmms
+}
diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
--- xmms-1.2.8/libxmms/charset.c 1970-01-01 01:00:00.000000000 +0100
-+++ xmms-1.2.8-patched/libxmms/charset.c 2003-10-24 19:10:29.000000000 +0200
-@@ -0,0 +1,870 @@
++++ xmms-1.2.8-patched/libxmms/charset.c 2003-10-24 21:51:11.000000000 +0200
+@@ -0,0 +1,981 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
@@ -868,8 +868,12 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+#include "charset_config.h"
+
+#ifdef AUTO_ENCA_SUPPORT
++#ifdef DYNAMIC_ENCA
++#include <charset_fake_enca.h>
++#else
+#include <enca.h>
+#endif
++#endif
+
+#define LOCALE_STRING_LENGTH 64
+static char charset_default[LOCALE_STRING_LENGTH];
@@ -994,9 +998,92 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ xmms_charset_changed=1;
+}
+
++
++#ifdef DYNAMIC_ENCA
++# include <dlfcn.h>
++#ifndef RTLD_NOW
++# define RTLD_NOW 0
++#endif
++static void *enca_handle = NULL;
++static int dynamic_enca_initialised = 0;
++
++static void* open_dynamic_lib(char *filename)
++{
++ return dlopen(filename, RTLD_NOW);
++}
++
++static void close_dynamic_lib(void* handle)
++{
++ dlclose(handle);
++}
++
++static void* find_dynamic_symbol(void *handle, char *symbol)
++{
++#ifdef SYMBOL_PREFIX
++ char *sym = g_strconcat(SYMBOL_PREFIX, symbol, NULL);
++ void *symh = dlsym(handle, sym);
++ g_free(sym);
++ return symh;
++#else
++ return dlsym(handle, symbol);
++#endif
++}
++#endif
++/*
++ enca_analyse_const(enca,buf,len);
++ enca_charset_name(ee.charset, ENCA_NAME_STYLE_ICONV);
++ enca_analyser_alloc(ltmp);
++ enca_analyser_free(enca);
++ enca_set_threshold(enca, 1);
++ enca_set_multibyte(enca, 1);
++ enca_set_ambiguity(enca, 1);
++ enca_set_garbage_test(enca, 0);
++ enca_set_filtering(enca, 0);
++ enca_set_significant(enca,1);
++ enca_set_termination_strictness(enca,0);
++ enca_get_language_charsets (const char *langname,
++ size_t *n);
++*/
++
++#ifdef DYNAMIC_ENCA
++static void charset_dynamic_enca_init() {
++ if (dynamic_enca_initialised) return;
++ dynamic_enca_initialised=1;
++ enca_handle=open_dynamic_lib(ENCA_LIB);
++ if (enca_handle) {
++ enca_set_multibyte=find_dynamic_symbol(enca_handle,"enca_set_multibyte");
++ enca_set_interpreted_surfaces=find_dynamic_symbol(enca_handle,"enca_set_interpreted_surfaces");
++ enca_set_ambiguity=find_dynamic_symbol(enca_handle,"enca_set_ambiguity");
++ enca_set_filtering=find_dynamic_symbol(enca_handle,"enca_set_filtering");
++ enca_set_garbage_test=find_dynamic_symbol(enca_handle,"enca_set_garbage_test");
++ enca_set_termination_strictness=find_dynamic_symbol(enca_handle,"enca_set_termination_strictness");
++ enca_set_significant=find_dynamic_symbol(enca_handle,"enca_set_significant");
++ enca_set_threshold=find_dynamic_symbol(enca_handle,"enca_set_threshold");
++ enca_charset_name=find_dynamic_symbol(enca_handle,"enca_charset_name");
++ enca_get_language_charsets=find_dynamic_symbol(enca_handle,"enca_get_language_charsets");
++ enca_analyser_alloc=find_dynamic_symbol(enca_handle,"enca_analyser_alloc");
++ enca_analyser_free=find_dynamic_symbol(enca_handle,"enca_analyser_free");
++ enca_analyse_const=find_dynamic_symbol(enca_handle,"enca_analyse_const");
++ if ((!enca_set_multibyte)||(!enca_set_interpreted_surfaces)||(!enca_set_ambiguity)||
++ (!enca_set_filtering)||(!enca_set_garbage_test)||(!enca_set_termination_strictness)||
++ (!enca_set_significant)||(!enca_set_threshold)||(!enca_charset_name)||
++ (!enca_get_language_charsets)||(!enca_analyser_alloc)||(!enca_analyser_free)||
++ (!enca_analyse_const)) {
++ close_dynamic_lib(enca_handle);
++ enca_handle=NULL;
++ perror( "Enca dynamic: Incomplete function set" );
++ }
++ }
++}
++#endif
++
++
+void xmms_autocharset_init(int m) {
+ xmms_autocharset_mode=m;
+ xmms_autocharset_changed=1;
++#ifdef DYNAMIC_ENCA
++ charset_dynamic_enca_init();
++#endif
+}
+
+void xmms_autocharset_free() {
@@ -1005,6 +1092,9 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+#endif
+ xmms_autocharset_iconv_close();
+#ifdef AUTO_ENCA_SUPPORT
++#ifdef DYNAMIC_ENCA
++ if (enca_handle) {
++#endif
+ for (i=0;i<autocharset_list_ni;i++)
+ if (!strcmp(autocharset_list[i].title,"Enca Library")) {
+ g_free(autocharset_list[i].title);
@@ -1017,6 +1107,14 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ enca_analyser_free(enca);
+ enca=NULL;
+ }
++#ifdef DYNAMIC_ENCA
++ }
++ if (enca_handle) {
++ close_dynamic_lib(enca_handle);
++ enca_handle=NULL;
++ }
++ dynamic_enca_initialised=0;
++#endif
+#endif
+}
+
@@ -1029,10 +1127,11 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+
+ if ((!xmms_autocharset_changed)&&(!xmms_charset_changed)) return;
+ xmms_autocharset_iconv_close();
-+ xmms_autocharset_changed=-1;
++ xmms_autocharset_changed=0;
+
+ xmms_autocharset_number = xmms_autocharset_number_charsets(0);
+ if (!xmms_autocharset_number) return;
++ xmms_autocharset_changed=-1;
+
+ xmms_autocharset = (iconv_t*)malloc((xmms_autocharset_number+1)*sizeof(iconv_t));
+ xmms_autocharset_id2utf = (iconv_t*)malloc((xmms_autocharset_number+1)*sizeof(iconv_t));
@@ -1152,11 +1251,12 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+static int autocharset_enca(char *buf, int len) {
+ char *charset;
+ EncaEncoding ee;
-+ int i;
++ int i,l;
+
+ if (!enca) return 0;
-+ if (!len) len=strlen(buf);
-+ ee=enca_analyse_const(enca,buf,len);
++ l=strlen(buf);
++ if ((len)&&(l>len)) l=len;
++ ee=enca_analyse_const(enca,buf,l);
+ if (ee.charset<0) return 0;
+ charset=enca_charset_name(ee.charset, ENCA_NAME_STYLE_ICONV);
+ for (i=0;autocharset_list[enca_pos].encodings[i];i++) {
@@ -1327,10 +1427,16 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ }
+
+#ifdef AUTO_ENCA_SUPPORT
++#ifdef DYNAMIC_ENCA
++ if (enca_handle) {
++#endif
+ if (enca) {
+ enca_analyser_free(enca);
+ enca=NULL;
+ }
++#ifdef DYNAMIC_ENCA
++ }
++#endif
+#endif
+
+ if (current_language>=0) {
@@ -1338,6 +1444,10 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ autocharset_list_ni=languages[current_language].n_autoenc;
+ autocharset_list=languages[current_language].autoenc;
+#ifdef AUTO_ENCA_SUPPORT
++#ifdef DYNAMIC_ENCA
++ charset_dynamic_enca_init();
++ if (enca_handle) {
++#endif
+ if (autocharset_list_ni<CHARSET_MAX_AUTOENCODINGS) {
+ for (i=0;i<autocharset_list_ni;i++)
+ if (!strcmp(autocharset_list[i].title,"Enca Library")) break;
@@ -1373,6 +1483,9 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ }
+ }
+ }
++#ifdef DYNAMIC_ENCA
++ }
++#endif
+#endif
+ }
+}
@@ -1636,7 +1749,6 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ if (xmms_autocharset_changed<0) return NULL;
+ if (!xmms_autocharset_fs2id) return NULL;
+
-+
+ if (check_file(path,buf)) return NULL;
+ encodings = autocharset_list[xmms_autocharset_mode].encodings;
+
@@ -1645,7 +1757,6 @@ diff -dPNur xmms-1.2.8/libxmms/charset.c xmms-1.2.8-patched/libxmms/charset.c
+ if ((xmms_autocharset_fs2id[i]!=(iconv_t)-1)&&(xmms_autocharset_fs2id[i]!=(iconv_t)-2)) {
+ tmp=xmms_charset_recode(xmms_autocharset_fs2id[i],buf,len,0);
+ if (tmp) {
-+ puts(tmp);
+ if (check_file(path,tmp)) return tmp;
+ free(tmp);
+ }
@@ -1757,13 +1868,318 @@ diff -dPNur xmms-1.2.8/libxmms/charset_config.h xmms-1.2.8-patched/libxmms/chars
+struct autocharset_list_t *autocharset_list=autocharset_list_default;
diff -dPNur xmms-1.2.8/libxmms/charset_defines.h xmms-1.2.8-patched/libxmms/charset_defines.h
--- xmms-1.2.8/libxmms/charset_defines.h 1970-01-01 01:00:00.000000000 +0100
-+++ xmms-1.2.8-patched/libxmms/charset_defines.h 2003-10-24 03:04:12.000000000 +0200
-@@ -0,0 +1,5 @@
++++ xmms-1.2.8-patched/libxmms/charset_defines.h 2003-10-24 20:16:37.000000000 +0200
+@@ -0,0 +1,17 @@
++#define DYNAMIC_ENCA
++
++#ifdef HPUX
++#undef DYNAMIC_ENCA
++#endif
++
++#ifdef DYNAMIC_ENCA
++#define AUTO_ENCA_SUPPORT
++#define ENCA_LIB "libenca.so.0"
++#else
+#undef AUTO_ENCA_SUPPORT
-+//#define AUTO_ENCA_SUPPORT
++#endif
++
++
+#define CHARSET_MAX_ENCODINGS 16
+#define CHARSET_MAX_AUTOENCODINGS 5
+#define ENV_VARIABLE LC_CTYPE
+diff -dPNur xmms-1.2.8/libxmms/charset_fake_enca.h xmms-1.2.8-patched/libxmms/charset_fake_enca.h
+--- xmms-1.2.8/libxmms/charset_fake_enca.h 1970-01-01 01:00:00.000000000 +0100
++++ xmms-1.2.8-patched/libxmms/charset_fake_enca.h 2003-10-24 20:01:30.000000000 +0200
+@@ -0,0 +1,289 @@
++/* This header file is in the public domain. */
++#ifndef ENCA_H
++#define ENCA_H
++
++#include <stdlib.h>
++/* According to autoconf stdlib may not be enough for size_t */
++#include <sys/types.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/* Enumerated types */
++
++/**
++ * EncaSurface:
++ * @ENCA_SURFACE_EOL_CR: End-of-lines are represented with CR's.
++ * @ENCA_SURFACE_EOL_LF: End-of-lines are represented with LF's.
++ * @ENCA_SURFACE_EOL_CRLF: End-of-lines are represented with CRLF's.
++ * @ENCA_SURFACE_EOL_MIX: Several end-of-line types, mixed.
++ * @ENCA_SURFACE_EOL_BIN: End-of-line concept not applicable (binary data).
++ * @ENCA_SURFACE_MASK_EOL: Mask for end-of-line surfaces.
++ * @ENCA_SURFACE_PERM_21: Odd and even bytes swapped.
++ * @ENCA_SURFACE_PERM_4321: Reversed byte sequence in 4byte words.
++ * @ENCA_SURFACE_PERM_MIX: Chunks with both endianess, concatenated.
++ * @ENCA_SURFACE_MASK_PERM: Mask for permutation surfaces.
++ * @ENCA_SURFACE_QP: Quoted printables.
++ * @ENCA_SURFACE_REMOVE: Recode `remove' surface.
++ * @ENCA_SURFACE_UNKNOWN: Unknown surface.
++ * @ENCA_SURFACE_MASK_ALL: Mask for all bits, withnout #ENCA_SURFACE_UNKNOWN.
++ *
++ * Surface flags.
++ **/
++typedef enum { /*< flags >*/
++ ENCA_SURFACE_EOL_CR = 1 << 0,
++ ENCA_SURFACE_EOL_LF = 1 << 1,
++ ENCA_SURFACE_EOL_CRLF = 1 << 2,
++ ENCA_SURFACE_EOL_MIX = 1 << 3,
++ ENCA_SURFACE_EOL_BIN = 1 << 4,
++ ENCA_SURFACE_MASK_EOL = (ENCA_SURFACE_EOL_CR
++ | ENCA_SURFACE_EOL_LF
++ | ENCA_SURFACE_EOL_CRLF
++ | ENCA_SURFACE_EOL_MIX
++ | ENCA_SURFACE_EOL_BIN),
++ ENCA_SURFACE_PERM_21 = 1 << 5,
++ ENCA_SURFACE_PERM_4321 = 1 << 6,
++ ENCA_SURFACE_PERM_MIX = 1 << 7,
++ ENCA_SURFACE_MASK_PERM = (ENCA_SURFACE_PERM_21
++ | ENCA_SURFACE_PERM_4321
++ | ENCA_SURFACE_PERM_MIX),
++ ENCA_SURFACE_QP = 1 << 8,
++ ENCA_SURFACE_REMOVE = 1 << 13,
++ ENCA_SURFACE_UNKNOWN = 1 << 14,
++ ENCA_SURFACE_MASK_ALL = (ENCA_SURFACE_MASK_EOL
++ | ENCA_SURFACE_MASK_PERM
++ | ENCA_SURFACE_QP
++ | ENCA_SURFACE_REMOVE)
++} EncaSurface;
++
++/**
++ * EncaNameStyle:
++ * @ENCA_NAME_STYLE_ENCA: Default, implicit charset name in Enca.
++ * @ENCA_NAME_STYLE_RFC1345: RFC 1345 charset name.
++ * @ENCA_NAME_STYLE_CSTOCS: Cstocs charset name.
++ * @ENCA_NAME_STYLE_ICONV: Iconv charset name.
++ * @ENCA_NAME_STYLE_HUMAN: Human comprehensible description.
++ *
++ * Charset naming styles and conventions.
++ **/
++typedef enum {
++ ENCA_NAME_STYLE_ENCA,
++ ENCA_NAME_STYLE_RFC1345,
++ ENCA_NAME_STYLE_CSTOCS,
++ ENCA_NAME_STYLE_ICONV,
++ ENCA_NAME_STYLE_HUMAN
++} EncaNameStyle;
++
++/**
++ * EncaCharsetFlags:
++ * @ENCA_CHARSET_7BIT: Characters are represented with 7bit characters.
++ * @ENCA_CHARSET_8BIT: Characters are represented with bytes.
++ * @ENCA_CHARSET_16BIT: Characters are represented with 2byte words.
++ * @ENCA_CHARSET_32BIT: Characters are represented with 4byte words.
++ * @ENCA_CHARSET_FIXED: One characters consists of one fundamental piece.
++ * @ENCA_CHARSET_VARIABLE: One character consists of variable number of
++ * fundamental pieces.
++ * @ENCA_CHARSET_BINARY: Charset is binary from ASCII viewpoint.
++ * @ENCA_CHARSET_REGULAR: Language dependent (8bit) charset.
++ * @ENCA_CHARSET_MULTIBYTE: Multibyte charset.
++ *
++ * Charset properties.
++ *
++ * Flags %ENCA_CHARSET_7BIT, %ENCA_CHARSET_8BIT, %ENCA_CHARSET_16BIT,
++ * %ENCA_CHARSET_32BIT tell how many bits a `fundamental piece' consists of.
++ * This is different from bits per character; r.g. UTF-8 consists of 8bit
++ * pieces (bytes), but character can be composed from 1 to 6 of them.
++ **/
++typedef enum { /*< flags >*/
++ ENCA_CHARSET_7BIT = 1 << 0,
++ ENCA_CHARSET_8BIT = 1 << 1,
++ ENCA_CHARSET_16BIT = 1 << 2,
++ ENCA_CHARSET_32BIT = 1 << 3,
++ ENCA_CHARSET_FIXED = 1 << 4,
++ ENCA_CHARSET_VARIABLE = 1 << 5,
++ ENCA_CHARSET_BINARY = 1 << 6,
++ ENCA_CHARSET_REGULAR = 1 << 7,
++ ENCA_CHARSET_MULTIBYTE = 1 << 8
++} EncaCharsetFlags;
++
++/**
++ * EncaErrno:
++ * @ENCA_EOK: OK.
++ * @ENCA_EINVALUE: Invalid value (usually of an option).
++ * @ENCA_EEMPTY: Sample is empty.
++ * @ENCA_EFILTERED: After filtering, (almost) nothing remained.
++ * @ENCA_ENOCS8: Mulitibyte tests failed and language contains no 8bit charsets.
++ * @ENCA_ESIGNIF: Too few significant characters.
++ * @ENCA_EWINNER: No clear winner.
++ * @ENCA_EGARBAGE: Sample is garbage.
++ *
++ * Error codes.
++ **/
++typedef enum {
++ ENCA_EOK = 0,
++ ENCA_EINVALUE,
++ ENCA_EEMPTY,
++ ENCA_EFILTERED,
++ ENCA_ENOCS8,
++ ENCA_ESIGNIF,
++ ENCA_EWINNER,
++ ENCA_EGARBAGE
++} EncaErrno;
++
++/**
++ * ENCA_CS_UNKNOWN:
++ *
++ * Unknown character set id.
++ *
++ * Use enca_charset_is_known() to check for unknown charset instead of direct
++ * comparsion.
++ **/
++#define ENCA_CS_UNKNOWN (-1)
++
++/**
++ * ENCA_NOT_A_CHAR:
++ *
++ * Not-a-character in unicode tables.
++ **/
++#define ENCA_NOT_A_CHAR 0xffff
++
++/* Published (opaque) typedefs */
++typedef struct _EncaAnalyserState *EncaAnalyser;
++
++/* Public (transparent) typedefs */
++typedef struct _EncaEncoding EncaEncoding;
++
++/**
++ * EncaEncoding:
++ * @charset: Numeric charset identifier.
++ * @surface: Surface flags.
++ *
++ * Encoding, i.e. charset and surface.
++ *
++ * This is what enca_analyse() and enca_analyse_const() return.
++ *
++ * The @charset field is an opaque numerical charset identifier, which has no
++ * meaning outside Enca library.
++ * You will probably want to use it only as enca_charset_name() argument.
++ * It is only guaranteed not to change meaning
++ * during program execution time; change of its interpretation (e.g. due to
++ * addition of new charsets) is not considered API change.
++ *
++ * The @surface field is a combination of #EncaSurface flags. You may want
++ * to ignore it completely; you should use enca_set_interpreted_surfaces()
++ * to disable weird surfaces then.
++ **/
++struct _EncaEncoding { int charset; EncaSurface surface; };
++
++void (*enca_set_multibyte) (EncaAnalyser analyser, int multibyte);
++void (*enca_set_interpreted_surfaces) (EncaAnalyser analyser, int interpreted_surfaces);
++void (*enca_set_ambiguity) (EncaAnalyser analyser, int ambiguity);
++void (*enca_set_filtering) (EncaAnalyser analyser, int filtering);
++void (*enca_set_garbage_test) (EncaAnalyser analyser, int garabage_test);
++void (*enca_set_termination_strictness) (EncaAnalyser analyser, int termination_strictness);
++int (*enca_set_significant) (EncaAnalyser analyser, size_t significant);
++int (*enca_set_threshold) (EncaAnalyser analyser, double threshold);
++const char* (*enca_charset_name) (int charset, EncaNameStyle whatname);
++int* (*enca_get_language_charsets) (const char *langname, size_t *n);
++EncaAnalyser (*enca_analyser_alloc) (const char *langname);
++void (*enca_analyser_free) (EncaAnalyser analyser);
++EncaEncoding (*enca_analyse_const) (EncaAnalyser analyser,const unsigned char *buffer, size_t size);
++
++/**
++ * enca_charset_is_known:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when the charset is known (i.e. it's not
++ * ENCA_CS_UNKNOWN).
++ **/
++#define enca_charset_is_known(cs) \
++ ((cs) != ENCA_CS_UNKNOWN)
++
++/**
++ * enca_charset_is_7bit:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when characters are represented with 7bit characters.
++ **/
++#define enca_charset_is_7bit(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_7BIT)
++
++/**
++ * enca_charset_is_8bit:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when characters are represented with bytes.
++ **/
++#define enca_charset_is_8bit(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_8BIT)
++
++/**
++ * enca_charset_is_16bit:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when characters are represented with 2byte words.
++ **/
++#define enca_charset_is_16bit(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_16BIT)
++
++/**
++ * enca_charset_is_32bit:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when characters are represented with 4byte words.
++ **/
++#define enca_charset_is_32bit(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_32BIT)
++
++/**
++ * enca_charset_is_fixed:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when one characters consists of one fundamental piece.
++ **/
++#define enca_charset_is_fixed(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_FIXED)
++
++/**
++ * enca_charset_is_variable:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when one character consists of variable number of
++ * fundamental pieces.
++ **/
++#define enca_charset_is_variable(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_VARIABLE)
++
++/**
++ * enca_charset_is_binary:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when charset is binary from ASCII viewpoint.
++ **/
++#define enca_charset_is_binary(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_BINARY)
++
++/**
++ * enca_charset_is_regular:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when charset is language dependent (8bit) charset.
++ **/
++#define enca_charset_is_regular(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_REGULAR)
++
++/**
++ * enca_charset_is_multibyte:
++ * @cs: Charset id.
++ *
++ * Expands to nonzero when charset is multibyte.
++ **/
++#define enca_charset_is_multibyte(cs) \
++ (enca_charset_properties(cs) & ENCA_CHARSET_MULTIBYTE)
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif
diff -dPNur xmms-1.2.8/libxmms/charset.h xmms-1.2.8-patched/libxmms/charset.h
--- xmms-1.2.8/libxmms/charset.h 1970-01-01 01:00:00.000000000 +0100
+++ xmms-1.2.8-patched/libxmms/charset.h 2003-10-24 13:31:19.000000000 +0200