2001-03-27 16:47:33 +04:00
/*************************************************************************
*
* $ Id $
*
* Copyright ( C ) 1998 Bjorn Reese and Daniel Stenberg .
*
* Permission to use , copy , modify , and distribute this software for any
* purpose with or without fee is hereby granted , provided that the above
* copyright notice and this permission notice appear in all copies .
*
* THIS SOFTWARE IS PROVIDED ` ` AS IS ' ' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES , INCLUDING , WITHOUT LIMITATION , THE IMPLIED WARRANTIES OF
2020-03-08 19:19:42 +03:00
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE . THE AUTHORS AND
2001-03-27 16:47:33 +04:00
* CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER .
*
2002-01-19 18:40:18 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* http : //ctrio.sourceforge.net/
*
2001-03-27 16:47:33 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-04-21 20:57:29 +04:00
# ifndef TRIO_TRIO_H
# define TRIO_TRIO_H
2001-03-27 16:47:33 +04:00
2002-09-26 02:44:43 +04:00
# if !defined(WITHOUT_TRIO)
2001-03-27 16:47:33 +04:00
2001-04-21 20:57:29 +04:00
/*
* Use autoconf defines if present . Packages using trio must define
* HAVE_CONFIG_H as a compiler option themselves .
*/
Various "make distcheck" and portability fixups
Makefile.am:
* Don't use @VAR@, use $(VAR). Autoconf's AC_SUBST provides us the Make
variable, it allows overriding the value at the command line, and
(notably) it avoids a Make parse error in the libxml2_la_LDFLAGS
assignment when @MODULE_PLATFORM_LIBS@ is empty
* Changed how the THREADS_W32 mechanism switches the build between
testThreads.c and testThreadsWin32.c as appropriate; using AM_CONDITIONAL
allows this to work cleanly and plays well with dependencies
* testapi.c should be specified as BUILT_SOURCES
* Create symlinks to the test/ and result/ subdirs so that the runtests
target is usable in out-of-source-tree builds
* Don't do MAKEFLAGS+=--silent as this is not portable to non-GNU Makes
* Fixed incorrect find(1) syntax in the "cleanup" rule, and doing "rm -f"
instead of just "rm" is good form
* (DIST)CLEANFILES needed a bit more coverage to allow "make distcheck" to
pass
configure.in:
* Need AC_PROG_LN_S to create test/ and result/ symlinks in Makefile.am
* AC_LIBTOOL_WIN32_DLL and AM_PROG_LIBTOOL are obsolete; these have been
superceded by LT_INIT
* Don't rebuild docs by default, as this requires GNU Make (as
implemented)
* Check for uint32_t as some platforms don't provide it
* Check for some more functions, and undefine HAVE_MMAP if we don't also
HAVE_MUNMAP (one system I tested on actually needed this)
* Changed THREADS_W32 from a filename insert into an Automake conditional
* The "Copyright" file will not be in the current directory if builddir !=
srcdir
doc/Makefile.am:
* EXTRA_DIST cannot use wildcards when they refer to generated files; this
breaks dependencies. What I did was define EXTRA_DIST_wc, which uses GNU
Make $(wildcard) directives to build up a list of files, and EXTRA_DIST,
as a literal expansion of EXTRA_DIST_wc. I also added a new rule,
"check-extra-dist", to simplify checking that the two variables are
equivalent. (Note that this works only when builddir == srcdir)
(I can implement this differently if desired; this is just one way of
doing it)
* Don't define an "all" target; this steps on Automake's toes
* Fixed up the "libxml2-api.xml ..." rule by using $(wildcard) for
dependencies (as Make doesn't process the wildcards otherwise) and
qualifying appropriate files with $(srcdir)
(Note that $(srcdir) is not needed in the dependencies, thanks to VPATH,
which we can count on as this is GNU-Make-only code anyway)
doc/devhelp/Makefile.am:
* Qualified appropriate files with $(srcdir)
* Added an "uninstall-local" rule so that "make distcheck" passes
doc/examples/Makefile.am:
* Rather than use a wildcard that doesn't work, use a substitution that
most Make programs can handle
doc/examples/index.py:
* Do the same here
include/libxml/nanoftp.h:
* Some platforms (e.g. MSVC 6) already #define INVALID_SOCKET:
user@host:/cygdrive/c/Program Files/Microsoft Visual Studio/VC98/\
Include$ grep -R INVALID_SOCKET .
./WINSOCK.H:#define INVALID_SOCKET (SOCKET)(~0)
./WINSOCK2.H:#define INVALID_SOCKET (SOCKET)(~0)
include/libxml/xmlversion.h.in:
* Support ancient GCCs (I was actually able to build the library with 2.5
but for this bit)
python/Makefile.am:
* Expanded CLEANFILES to allow "make distcheck" to pass
python/tests/Makefile.am:
* Define CLEANFILES instead of a "clean" rule, and added tmp.xml to allow
"make distcheck" to pass
testRelax.c:
* Use HAVE_MMAP instead of the less explicit HAVE_SYS_MMAN_H (as some
systems have the header but not the function)
testSchemas.c:
* Use HAVE_MMAP instead of the less explicit HAVE_SYS_MMAN_H
testapi.c:
* Don't use putenv() if it's not available
threads.c:
* This fixes the following build error on Solaris 8:
libtool: compile: cc -DHAVE_CONFIG_H -I. -I./include -I./include \
-D_REENTRANT -D__EXTENSIONS__ -D_REENTRANT -Dsparc -Xa -mt -v \
-xarch=v9 -xcrossfile -xO5 -c threads.c -KPIC -DPIC -o threads.o
"threads.c", line 442: controlling expressions must have scalar type
"threads.c", line 512: controlling expressions must have scalar type
cc: acomp failed for threads.c
*** Error code 1
trio.c:
* Define isascii() if the system doesn't provide it
trio.h:
* The trio library's HAVE_CONFIG_H header is not the same as LibXML2's
HAVE_CONFIG_H header; this change is needed to avoid a double-inclusion
win32/configure.js:
* Added support for the LZMA compression option
win32/Makefile.{bcb,mingw,msvc}:
* Added appropriate bits to support WITH_LZMA=1
* Install the header files under $(INCPREFIX)\libxml2\libxml instead of
$(INCPREFIX)\libxml, to mirror the install location on Unix+Autotools
xml2-config.in:
* @MODULE_PLATFORM_LIBS@ (usually "-ldl") needs to be in there in order for
`xml2-config --libs` to provide a complete set of dependencies
xmllint.c:
* Use HAVE_MMAP instead of the less-explicit HAVE_SYS_MMAN_H
2012-08-06 07:32:54 +04:00
# if defined(TRIO_HAVE_CONFIG_H)
2009-03-03 09:31:43 +03:00
# include "config.h"
2001-04-21 20:57:29 +04:00
# endif
2002-09-26 02:44:43 +04:00
# include "triodef.h"
2001-04-21 20:57:29 +04:00
2003-04-03 19:28:28 +04:00
# include <stdio.h>
# include <stdlib.h>
# if defined(TRIO_COMPILER_ANCIENT)
# include <varargs.h>
# else
# include <stdarg.h>
# endif
2001-06-05 16:46:33 +04:00
# ifdef __cplusplus
extern " C " {
# endif
2001-03-27 16:47:33 +04:00
/*
* Error codes .
*
* Remember to add a textual description to trio_strerror .
*/
enum {
TRIO_EOF = 1 ,
TRIO_EINVAL = 2 ,
TRIO_ETOOMANY = 3 ,
TRIO_EDBLREF = 4 ,
TRIO_EGAP = 5 ,
TRIO_ENOMEM = 6 ,
2002-01-19 18:40:18 +03:00
TRIO_ERANGE = 7 ,
2002-09-26 02:44:43 +04:00
TRIO_ERRNO = 8 ,
TRIO_ECUSTOM = 9
2001-03-27 16:47:33 +04:00
} ;
2002-09-26 02:44:43 +04:00
/* Error macros */
# define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
# define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
# define TRIO_ERROR_NAME(x) trio_strerror(x)
typedef int ( * trio_outstream_t ) TRIO_PROTO ( ( trio_pointer_t , int ) ) ;
typedef int ( * trio_instream_t ) TRIO_PROTO ( ( trio_pointer_t ) ) ;
TRIO_CONST char * trio_strerror TRIO_PROTO ( ( int ) ) ;
2001-04-21 20:57:29 +04:00
/*************************************************************************
* Print Functions
2001-03-27 16:47:33 +04:00
*/
2002-09-26 02:44:43 +04:00
int trio_printf TRIO_PROTO ( ( TRIO_CONST char * format , . . . ) ) ;
int trio_vprintf TRIO_PROTO ( ( TRIO_CONST char * format , va_list args ) ) ;
int trio_printfv TRIO_PROTO ( ( TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_fprintf TRIO_PROTO ( ( FILE * file , TRIO_CONST char * format , . . . ) ) ;
int trio_vfprintf TRIO_PROTO ( ( FILE * file , TRIO_CONST char * format , va_list args ) ) ;
int trio_fprintfv TRIO_PROTO ( ( FILE * file , TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_dprintf TRIO_PROTO ( ( int fd , TRIO_CONST char * format , . . . ) ) ;
int trio_vdprintf TRIO_PROTO ( ( int fd , TRIO_CONST char * format , va_list args ) ) ;
int trio_dprintfv TRIO_PROTO ( ( int fd , TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_cprintf TRIO_PROTO ( ( trio_outstream_t stream , trio_pointer_t closure ,
TRIO_CONST char * format , . . . ) ) ;
int trio_vcprintf TRIO_PROTO ( ( trio_outstream_t stream , trio_pointer_t closure ,
TRIO_CONST char * format , va_list args ) ) ;
int trio_cprintfv TRIO_PROTO ( ( trio_outstream_t stream , trio_pointer_t closure ,
TRIO_CONST char * format , void * * args ) ) ;
int trio_sprintf TRIO_PROTO ( ( char * buffer , TRIO_CONST char * format , . . . ) ) ;
int trio_vsprintf TRIO_PROTO ( ( char * buffer , TRIO_CONST char * format , va_list args ) ) ;
int trio_sprintfv TRIO_PROTO ( ( char * buffer , TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_snprintf TRIO_PROTO ( ( char * buffer , size_t max , TRIO_CONST char * format , . . . ) ) ;
int trio_vsnprintf TRIO_PROTO ( ( char * buffer , size_t bufferSize , TRIO_CONST char * format ,
va_list args ) ) ;
int trio_snprintfv TRIO_PROTO ( ( char * buffer , size_t bufferSize , TRIO_CONST char * format ,
void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_snprintfcat TRIO_PROTO ( ( char * buffer , size_t max , TRIO_CONST char * format , . . . ) ) ;
int trio_vsnprintfcat TRIO_PROTO ( ( char * buffer , size_t bufferSize , TRIO_CONST char * format ,
va_list args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
char * trio_aprintf TRIO_PROTO ( ( TRIO_CONST char * format , . . . ) ) ;
char * trio_vaprintf TRIO_PROTO ( ( TRIO_CONST char * format , va_list args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_asprintf TRIO_PROTO ( ( char * * ret , TRIO_CONST char * format , . . . ) ) ;
int trio_vasprintf TRIO_PROTO ( ( char * * ret , TRIO_CONST char * format , va_list args ) ) ;
2001-03-27 16:47:33 +04:00
2001-04-21 20:57:29 +04:00
/*************************************************************************
* Scan Functions
*/
2002-09-26 02:44:43 +04:00
int trio_scanf TRIO_PROTO ( ( TRIO_CONST char * format , . . . ) ) ;
int trio_vscanf TRIO_PROTO ( ( TRIO_CONST char * format , va_list args ) ) ;
int trio_scanfv TRIO_PROTO ( ( TRIO_CONST char * format , void * * args ) ) ;
int trio_fscanf TRIO_PROTO ( ( FILE * file , TRIO_CONST char * format , . . . ) ) ;
int trio_vfscanf TRIO_PROTO ( ( FILE * file , TRIO_CONST char * format , va_list args ) ) ;
int trio_fscanfv TRIO_PROTO ( ( FILE * file , TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_dscanf TRIO_PROTO ( ( int fd , TRIO_CONST char * format , . . . ) ) ;
int trio_vdscanf TRIO_PROTO ( ( int fd , TRIO_CONST char * format , va_list args ) ) ;
int trio_dscanfv TRIO_PROTO ( ( int fd , TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_cscanf TRIO_PROTO ( ( trio_instream_t stream , trio_pointer_t closure ,
TRIO_CONST char * format , . . . ) ) ;
int trio_vcscanf TRIO_PROTO ( ( trio_instream_t stream , trio_pointer_t closure ,
TRIO_CONST char * format , va_list args ) ) ;
int trio_cscanfv TRIO_PROTO ( ( trio_instream_t stream , trio_pointer_t closure ,
TRIO_CONST char * format , void * * args ) ) ;
2001-04-21 20:57:29 +04:00
2002-09-26 02:44:43 +04:00
int trio_sscanf TRIO_PROTO ( ( TRIO_CONST char * buffer , TRIO_CONST char * format , . . . ) ) ;
int trio_vsscanf TRIO_PROTO ( ( TRIO_CONST char * buffer , TRIO_CONST char * format , va_list args ) ) ;
int trio_sscanfv TRIO_PROTO ( ( TRIO_CONST char * buffer , TRIO_CONST char * format , void * * args ) ) ;
/*************************************************************************
* Locale Functions
*/
void trio_locale_set_decimal_point TRIO_PROTO ( ( char * decimalPoint ) ) ;
void trio_locale_set_thousand_separator TRIO_PROTO ( ( char * thousandSeparator ) ) ;
void trio_locale_set_grouping TRIO_PROTO ( ( char * grouping ) ) ;
2001-03-27 16:47:33 +04:00
2001-04-21 20:57:29 +04:00
/*************************************************************************
* Renaming
*/
2001-03-27 16:47:33 +04:00
# ifdef TRIO_REPLACE_STDIO
/* Replace the <stdio.h> functions */
2001-04-21 20:57:29 +04:00
# ifndef HAVE_PRINTF
2013-12-12 11:00:46 +04:00
# undef printf
2001-04-21 20:57:29 +04:00
# define printf trio_printf
# endif
# ifndef HAVE_VPRINTF
2013-12-12 11:00:46 +04:00
# undef vprintf
2001-04-21 20:57:29 +04:00
# define vprintf trio_vprintf
# endif
# ifndef HAVE_FPRINTF
2013-12-12 11:00:46 +04:00
# undef fprintf
2001-04-21 20:57:29 +04:00
# define fprintf trio_fprintf
# endif
# ifndef HAVE_VFPRINTF
2013-12-12 11:00:46 +04:00
# undef vfprintf
2001-04-21 20:57:29 +04:00
# define vfprintf trio_vfprintf
# endif
# ifndef HAVE_SPRINTF
2013-12-12 11:00:46 +04:00
# undef sprintf
2001-04-21 20:57:29 +04:00
# define sprintf trio_sprintf
# endif
# ifndef HAVE_VSPRINTF
2013-12-12 11:00:46 +04:00
# undef vsprintf
2001-04-21 20:57:29 +04:00
# define vsprintf trio_vsprintf
# endif
# ifndef HAVE_SNPRINTF
2013-12-12 11:00:46 +04:00
# undef snprintf
2001-04-21 20:57:29 +04:00
# define snprintf trio_snprintf
# endif
# ifndef HAVE_VSNPRINTF
2013-12-12 11:00:46 +04:00
# undef vsnprintf
2001-04-21 20:57:29 +04:00
# define vsnprintf trio_vsnprintf
# endif
# ifndef HAVE_SCANF
2013-12-12 11:00:46 +04:00
# undef scanf
2001-04-21 20:57:29 +04:00
# define scanf trio_scanf
# endif
# ifndef HAVE_VSCANF
2013-12-12 11:00:46 +04:00
# undef vscanf
2001-04-21 20:57:29 +04:00
# define vscanf trio_vscanf
# endif
# ifndef HAVE_FSCANF
2013-12-12 11:00:46 +04:00
# undef fscanf
2001-04-21 20:57:29 +04:00
# define fscanf trio_fscanf
# endif
# ifndef HAVE_VFSCANF
2013-12-12 11:00:46 +04:00
# undef vfscanf
2001-04-21 20:57:29 +04:00
# define vfscanf trio_vfscanf
# endif
# ifndef HAVE_SSCANF
2013-12-12 11:00:46 +04:00
# undef sscanf
2001-04-21 20:57:29 +04:00
# define sscanf trio_sscanf
# endif
# ifndef HAVE_VSSCANF
2013-12-12 11:00:46 +04:00
# undef vsscanf
2001-04-21 20:57:29 +04:00
# define vsscanf trio_vsscanf
# endif
2001-03-27 16:47:33 +04:00
/* These aren't stdio functions, but we make them look similar */
# define dprintf trio_dprintf
# define vdprintf trio_vdprintf
# define aprintf trio_aprintf
# define vaprintf trio_vaprintf
# define asprintf trio_asprintf
# define vasprintf trio_vasprintf
# define dscanf trio_dscanf
# define vdscanf trio_vdscanf
# endif
2001-06-05 16:46:33 +04:00
# ifdef __cplusplus
} /* extern "C" */
# endif
# endif /* WITHOUT_TRIO */
2001-04-21 20:57:29 +04:00
# endif /* TRIO_TRIO_H */