--- ./lib/iconv.c Thu May 16 07:55:33 2002 +++ ../libiconv-1.8/./lib/iconv.c Tue Nov 19 10:43:07 2002 @@ -49,6 +49,12 @@ #define USE_DOS #endif #endif +#ifdef __sgi +extern iconv_t _iconv_open(const char *, const char *); +extern size_t _iconv(iconv_t, char **, size_t *, char **, size_t *); +extern int _iconv_close(iconv_t); +#include +#endif /* * Data type for general conversion loop. @@ -407,8 +413,27 @@ memset(&wcd->state,'\0',sizeof(mbstate_t)); } /* Done. */ +#ifdef __sgi + assert(!((size_t)cd & 0x1)); +#endif return (iconv_t)cd; invalid: +#ifdef __sgi + /* Fallback to the system iconv_open(). Similar to the code above, + * on IRIX iconv_t is really a pointer to a malloc'd structure, so + * assume that its low order bit is always zero. + */ + { + iconv_t result = _iconv_open(tocode, fromcode); + if (result != (iconv_t)-1) { + iconv_t scd = (iconv_t)(((size_t) result) ^ 0x1); + assert(!((size_t)result & 0x1)); + return scd; + } else { + return result; + } + } +#endif errno = EINVAL; return (iconv_t)(-1); } @@ -418,6 +443,12 @@ char* * outbuf, size_t *outbytesleft) { conv_t cd = (conv_t) icd; +#ifdef __sgi + if ((size_t)icd & 0x1) { + iconv_t scd = (iconv_t)(((size_t) icd) ^ 0x1); + return _iconv(scd, inbuf, inbytesleft, outbuf, outbytesleft); + } +#endif if (inbuf == NULL || *inbuf == NULL) return cd->lfuncs.loop_reset(icd,outbuf,outbytesleft); else @@ -429,6 +460,12 @@ int iconv_close (iconv_t icd) { conv_t cd = (conv_t) icd; +#ifdef __sgi + if ((size_t)icd & 0x1) { + iconv_t scd = (iconv_t)(((size_t) icd) ^ 0x1); + return _iconv_close(scd); + } +#endif free(cd); return 0; } @@ -438,6 +475,12 @@ int iconvctl (iconv_t icd, int request, void* argument) { conv_t cd = (conv_t) icd; +#ifdef __sgi + if ((size_t)icd & 0x1) { + errno = EINVAL; + return -1; + } +#endif switch (request) { case ICONV_TRIVIALP: *(int *)argument = --- ./libcharset/lib/localcharset.c Fri May 10 06:37:09 2002 +++ ../libiconv-1.8/./libcharset/lib/localcharset.c Thu Nov 21 13:52:55 2002 @@ -116,6 +116,26 @@ const char *base = "charset.alias"; char *file_name; +#ifdef __sgi + /* Prepend $ROOT when set. */ + const char *root = getenv("ROOT"); + if (root != NULL && root[0] != '\0') + { + size_t root_len = strlen (root); + size_t dir_len = strlen (dir); + int add_slash = !ISSLASH (root[root_len - 1]); + char *tmp = malloc(root_len + add_slash + dir_len + 1); + if (tmp != NULL) + { + memcpy(tmp, root, root_len); + if (add_slash) + tmp[root_len] = DIRECTORY_SEPARATOR; + memcpy (tmp + root_len + add_slash, dir, dir_len + 1); + dir = tmp; + } + } +#endif + /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); @@ -366,4 +386,16 @@ codeset = "ASCII"; return codeset; +} + + +/* Aliases and internal functions required by glib2/2.0.6 */ +const char * _g_locale_charset () +{ + return locale_charset(); +} + +const char * _g_locale_get_charset_aliases () +{ + return get_charset_aliases(); } --- ./libcharset/include/libcharset.h.in Tue Mar 27 08:35:32 2001 +++ ../libiconv-1.8/./libcharset/include/libcharset.h.in Thu Nov 21 13:50:33 2002 @@ -33,6 +33,11 @@ extern const char * locale_charset (void); +/* Aliases and internal functions required by glib2/2.0.6 */ +extern const char * _g_locale_charset (void); +extern const char * _g_locale_get_charset_aliases (void); + + #ifdef __cplusplus } #endif --- ./autoconf/ltmain.sh Wed Feb 6 07:11:25 2002 +++ ../libiconv-1.8/./autoconf/ltmain.sh Tue Nov 19 10:44:46 2002 @@ -61,7 +61,7 @@ default_mode= help="Try \`$progname --help' for more information." magic="%%%MAGIC variable%%%" -mkdir="mkdir" +mkdir="mkdir -p" mv="mv -f" rm="rm -f"