summaryrefslogtreecommitdiffstats
path: root/gettext-tools/src/libexpat-compat.c
diff options
context:
space:
mode:
Diffstat (limited to 'gettext-tools/src/libexpat-compat.c')
-rw-r--r--gettext-tools/src/libexpat-compat.c327
1 files changed, 0 insertions, 327 deletions
diff --git a/gettext-tools/src/libexpat-compat.c b/gettext-tools/src/libexpat-compat.c
deleted file mode 100644
index 33d264a..0000000
--- a/gettext-tools/src/libexpat-compat.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/* xgettext libexpat compatibility.
- Copyright (C) 2002-2003, 2005-2009, 2013, 2015 Free Software
- Foundation, Inc.
-
- This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#if DYNLOAD_LIBEXPAT
-# include <dlfcn.h>
-#else
-# if HAVE_LIBEXPAT
-# include <expat.h>
-# endif
-#endif
-
-/* Keep the references to XML_GetCurrent{Line,Column}Number symbols
- before loading libexpat-compat.h, since they are redefined to
- rpl_XML_GetCurrent{Line,Column}Number . */
-#if !DYNLOAD_LIBEXPAT && XML_MAJOR_VERSION >= 2
-static void *p_XML_GetCurrentLineNumber = (void *) &XML_GetCurrentLineNumber;
-static void *p_XML_GetCurrentColumnNumber = (void *) &XML_GetCurrentColumnNumber;
-#endif
-
-#include "libexpat-compat.h"
-
-/* ======================= Different libexpat ABIs. ======================= */
-
-/* There are three different ABIs of libexpat, regarding the functions
- XML_GetCurrentLineNumber and XML_GetCurrentColumnNumber.
- In expat < 2.0, they return an 'int'.
- In expat >= 2.0, they return
- - a 'long' if expat was compiled with the default flags, or
- - a 'long long' if expat was compiled with -DXML_LARGE_SIZE.
- But the <expat.h> include file does not contain the information whether
- expat was compiled with -DXML_LARGE_SIZE; so the include file is lying!
- For this information, we need to call XML_GetFeatureList(), for
- expat >= 2.0.1; for expat = 2.0.0, we have to assume the default flags. */
-
-#if !DYNLOAD_LIBEXPAT && XML_MAJOR_VERSION >= 2
-
-/* expat >= 2.0 -> Return type is 'int64_t' worst-case. */
-
-/* Return true if libexpat was compiled with -DXML_LARGE_SIZE. */
-static bool
-is_XML_LARGE_SIZE_ABI (void)
-{
- static bool tested;
- static bool is_large;
-
- if (!tested)
- {
- const XML_Feature *features;
-
- is_large = false;
- for (features = XML_GetFeatureList (); features->name != NULL; features++)
- if (strcmp (features->name, "XML_LARGE_SIZE") == 0)
- {
- is_large = true;
- break;
- }
-
- tested = true;
- }
- return is_large;
-}
-
-int64_t
-rpl_XML_GetCurrentLineNumber (XML_Parser parser)
-{
- if (is_XML_LARGE_SIZE_ABI ())
- return ((int64_t (*) (XML_Parser)) p_XML_GetCurrentLineNumber) (parser);
- else
- return ((long (*) (XML_Parser)) p_XML_GetCurrentLineNumber) (parser);
-}
-
-int64_t
-rpl_XML_GetCurrentColumnNumber (XML_Parser parser)
-{
- if (is_XML_LARGE_SIZE_ABI ())
- return ((int64_t (*) (XML_Parser)) p_XML_GetCurrentColumnNumber) (parser);
- else
- return ((long (*) (XML_Parser)) p_XML_GetCurrentColumnNumber) (parser);
-}
-#endif
-
-
-/* ===================== Dynamic loading of libexpat. ===================== */
-
-#if DYNLOAD_LIBEXPAT
-
-static XML_Expat_Version (*p_XML_ExpatVersionInfo) (void);
-
-XML_Expat_Version
-XML_ExpatVersionInfo (void)
-{
- return (*p_XML_ExpatVersionInfo) ();
-}
-
-static const XML_Feature * (*p_XML_GetFeatureList) (void);
-
-const XML_Feature *
-XML_GetFeatureList (void)
-{
- return (*p_XML_GetFeatureList) ();
-}
-
-enum XML_Size_ABI
-get_XML_Size_ABI (void)
-{
- static bool tested;
- static enum XML_Size_ABI abi;
-
- if (!tested)
- {
- if (XML_ExpatVersionInfo () .major >= 2)
- /* expat >= 2.0 -> XML_Size is 'int64_t' or 'long'. */
- {
- const XML_Feature *features;
-
- abi = is_long;
- for (features = XML_GetFeatureList ();
- features->name != NULL;
- features++)
- if (strcmp (features->name, "XML_LARGE_SIZE") == 0)
- {
- abi = is_int64_t;
- break;
- }
- }
- else
- /* expat < 2.0 -> XML_Size is 'int'. */
- abi = is_int;
- tested = true;
- }
- return abi;
-}
-
-static XML_Parser (*p_XML_ParserCreate) (const XML_Char *encoding);
-
-XML_Parser
-XML_ParserCreate (const XML_Char *encoding)
-{
- return (*p_XML_ParserCreate) (encoding);
-}
-
-static void (*p_XML_SetElementHandler) (XML_Parser parser,
- XML_StartElementHandler start,
- XML_EndElementHandler end);
-
-void
-XML_SetElementHandler (XML_Parser parser,
- XML_StartElementHandler start,
- XML_EndElementHandler end)
-{
- (*p_XML_SetElementHandler) (parser, start, end);
-}
-
-
-static void (*p_XML_SetCharacterDataHandler) (XML_Parser parser,
- XML_CharacterDataHandler handler);
-
-void
-XML_SetCharacterDataHandler (XML_Parser parser,
- XML_CharacterDataHandler handler)
-{
- (*p_XML_SetCharacterDataHandler) (parser, handler);
-}
-
-
-static void (*p_XML_SetCommentHandler) (XML_Parser parser,
- XML_CommentHandler handler);
-
-void
-XML_SetCommentHandler (XML_Parser parser, XML_CommentHandler handler)
-{
- (*p_XML_SetCommentHandler) (parser, handler);
-}
-
-
-static int (*p_XML_Parse) (XML_Parser parser, const char *s,
- int len, int isFinal);
-
-int
-XML_Parse (XML_Parser parser, const char *s, int len, int isFinal)
-{
- return (*p_XML_Parse) (parser, s, len, isFinal);
-}
-
-
-static enum XML_Error (*p_XML_GetErrorCode) (XML_Parser parser);
-
-enum XML_Error
-XML_GetErrorCode (XML_Parser parser)
-{
- return (*p_XML_GetErrorCode) (parser);
-}
-
-
-static void *p_XML_GetCurrentLineNumber;
-
-int64_t
-XML_GetCurrentLineNumber (XML_Parser parser)
-{
- switch (get_XML_Size_ABI ())
- {
- case is_int:
- return ((int (*) (XML_Parser)) p_XML_GetCurrentLineNumber) (parser);
- case is_long:
- return ((long (*) (XML_Parser)) p_XML_GetCurrentLineNumber) (parser);
- case is_int64_t:
- return ((int64_t (*) (XML_Parser)) p_XML_GetCurrentLineNumber) (parser);
- default:
- abort ();
- }
-}
-
-static void *p_XML_GetCurrentColumnNumber;
-
-int64_t
-XML_GetCurrentColumnNumber (XML_Parser parser)
-{
- switch (get_XML_Size_ABI ())
- {
- case is_int:
- return ((int (*) (XML_Parser)) p_XML_GetCurrentColumnNumber) (parser);
- case is_long:
- return ((long (*) (XML_Parser)) p_XML_GetCurrentColumnNumber) (parser);
- case is_int64_t:
- return ((int64_t (*) (XML_Parser)) p_XML_GetCurrentColumnNumber) (parser);
- default:
- abort ();
- }
-}
-
-
-static const XML_LChar * (*p_XML_ErrorString) (int code);
-
-const XML_LChar *
-XML_ErrorString (int code)
-{
- return (*p_XML_ErrorString) (code);
-}
-
-static void (*p_XML_ParserFree) (XML_Parser parser);
-
-void
-XML_ParserFree (XML_Parser parser)
-{
- return (*p_XML_ParserFree) (parser);
-}
-
-static int libexpat_loaded = 0;
-
-bool
-load_libexpat ()
-{
- if (libexpat_loaded == 0)
- {
- void *handle;
-
- /* Try to load libexpat-2.x. */
- handle = dlopen ("libexpat.so.1", RTLD_LAZY);
- if (handle == NULL)
- /* Try to load libexpat-1.x. */
- handle = dlopen ("libexpat.so.0", RTLD_LAZY);
- if (handle != NULL
- && (p_XML_ExpatVersionInfo =
- (XML_Expat_Version (*) (void))
- dlsym (handle, "XML_ExpatVersionInfo")) != NULL
- && (p_XML_GetFeatureList =
- (const XML_Feature * (*) (void))
- dlsym (handle, "XML_GetFeatureList")) != NULL
- && (p_XML_ParserCreate =
- (XML_Parser (*) (const XML_Char *))
- dlsym (handle, "XML_ParserCreate")) != NULL
- && (p_XML_SetElementHandler =
- (void (*) (XML_Parser, XML_StartElementHandler, XML_EndElementHandler))
- dlsym (handle, "XML_SetElementHandler")) != NULL
- && (p_XML_SetCharacterDataHandler =
- (void (*) (XML_Parser, XML_CharacterDataHandler))
- dlsym (handle, "XML_SetCharacterDataHandler")) != NULL
- && (p_XML_SetCommentHandler =
- (void (*) (XML_Parser, XML_CommentHandler))
- dlsym (handle, "XML_SetCommentHandler")) != NULL
- && (p_XML_Parse =
- (int (*) (XML_Parser, const char *, int, int))
- dlsym (handle, "XML_Parse")) != NULL
- && (p_XML_GetErrorCode =
- (enum XML_Error (*) (XML_Parser))
- dlsym (handle, "XML_GetErrorCode")) != NULL
- && (p_XML_GetCurrentLineNumber =
- dlsym (handle, "XML_GetCurrentLineNumber")) != NULL
- && (p_XML_GetCurrentColumnNumber =
- dlsym (handle, "XML_GetCurrentColumnNumber")) != NULL
- && (p_XML_ParserFree =
- (void (*) (XML_Parser))
- dlsym (handle, "XML_ParserFree")) != NULL
- && (p_XML_ErrorString =
- (const XML_LChar * (*) (int))
- dlsym (handle, "XML_ErrorString")) != NULL)
- libexpat_loaded = 1;
- else
- libexpat_loaded = -1;
- }
- return libexpat_loaded >= 0;
-}
-
-#endif