This eliminates the weak symbol adventures and makes all of the calls back to the X server or Font server go through a table of functions instead, clarifying the required API.
As this is a rather major change to the API for the library, it now installs itself as libXfont_2 instead of libXfont, and the package config file is now xfont_2.pc. All of the installed headers remain the same as the original library; there's now a new include file, libxfont_2.h, which defines the X server and Font server interfaces. Signed-off-by: Keith Packard <[email protected]> --- Makefile.am | 7 +- configure.ac | 4 +- include/X11/fonts/bufio.h | 2 +- include/X11/fonts/fontmisc.h | 2 +- include/X11/fonts/libxfont_2.h | 81 +++++++++++++ include/libxfontint.h | 90 +++++++++++++++ src/FreeType/ft.h | 2 - src/FreeType/ftenc.c | 1 + src/FreeType/ftfuncs.c | 1 + src/FreeType/fttools.c | 1 + src/FreeType/xttcap.c | 1 + src/Makefile.am | 8 +- src/bitmap/bdfread.c | 1 + src/bitmap/bdfutils.c | 1 + src/bitmap/bitmap.c | 1 + src/bitmap/bitmapfunc.c | 1 + src/bitmap/bitmaputil.c | 1 + src/bitmap/bitscale.c | 4 +- src/bitmap/fontink.c | 1 + src/bitmap/pcfread.c | 1 + src/bitmap/pcfwrite.c | 7 +- src/bitmap/snfread.c | 1 + src/builtins/dir.c | 1 + src/builtins/file.c | 1 + src/builtins/fonts.c | 1 + src/builtins/fpe.c | 36 +++--- src/builtins/render.c | 1 + src/fc/fsconvert.c | 1 + src/fc/fserve.c | 44 ++++---- src/fc/fserve.h | 9 -- src/fc/fsio.c | 1 + src/fc/fstrans.c | 2 + src/fontfile/bitsource.c | 1 + src/fontfile/bufio.c | 3 +- src/fontfile/bunzip2.c | 1 + src/fontfile/catalogue.c | 36 +++--- src/fontfile/decompress.c | 1 + src/fontfile/defaults.c | 1 + src/fontfile/dirfile.c | 1 + src/fontfile/fileio.c | 1 + src/fontfile/filewr.c | 1 + src/fontfile/fontdir.c | 1 + src/fontfile/fontencc.c | 3 +- src/fontfile/fontfile.c | 36 +++--- src/fontfile/fontscale.c | 1 + src/fontfile/gunzip.c | 1 + src/fontfile/register.c | 1 + src/fontfile/renderers.c | 3 +- src/stubs/Makefile.am | 19 +--- src/stubs/atom.c | 234 ++++++++++++++++++++++++++++++++++++++ src/stubs/cauthgen.c | 15 --- src/stubs/csignal.c | 15 --- src/stubs/delfntcid.c | 14 --- src/stubs/errorf.c | 14 --- src/stubs/findoldfnt.c | 15 --- src/stubs/getcres.c | 15 --- src/stubs/getdefptsize.c | 15 --- src/stubs/getnewfntcid.c | 15 --- src/stubs/gettime.c | 15 --- src/stubs/initfshdl.c | 16 --- src/stubs/libxfontstubs.c | 169 ++++++++++++++++++++++++++++ src/stubs/regfpefunc.c | 32 ------ src/stubs/rmfshdl.c | 16 --- src/stubs/servclient.c | 19 ---- src/stubs/setfntauth.c | 15 --- src/stubs/stfntcfnt.c | 15 --- src/stubs/stubs.h | 88 --------------- src/stubs/stubsinit.c | 82 -------------- src/util/Makefile.am | 1 - src/util/atom.c | 250 ----------------------------------------- src/util/fontaccel.c | 1 + src/util/fontnames.c | 1 + src/util/fontutil.c | 1 + src/util/fontxlfd.c | 1 + src/util/format.c | 1 + src/util/miscutil.c | 23 +--- src/util/patcache.c | 1 + src/util/private.c | 1 + src/util/utilbitmap.c | 1 + xfont.pc.in | 13 --- xfont_2.pc.in | 13 +++ 81 files changed, 738 insertions(+), 816 deletions(-) create mode 100644 include/X11/fonts/libxfont_2.h create mode 100644 include/libxfontint.h create mode 100644 src/stubs/atom.c delete mode 100644 src/stubs/cauthgen.c delete mode 100644 src/stubs/csignal.c delete mode 100644 src/stubs/delfntcid.c delete mode 100644 src/stubs/errorf.c delete mode 100644 src/stubs/findoldfnt.c delete mode 100644 src/stubs/getcres.c delete mode 100644 src/stubs/getdefptsize.c delete mode 100644 src/stubs/getnewfntcid.c delete mode 100644 src/stubs/gettime.c delete mode 100644 src/stubs/initfshdl.c create mode 100644 src/stubs/libxfontstubs.c delete mode 100644 src/stubs/regfpefunc.c delete mode 100644 src/stubs/rmfshdl.c delete mode 100644 src/stubs/servclient.c delete mode 100644 src/stubs/setfntauth.c delete mode 100644 src/stubs/stfntcfnt.c delete mode 100644 src/stubs/stubs.h delete mode 100644 src/stubs/stubsinit.c delete mode 100644 src/util/atom.c delete mode 100644 xfont.pc.in create mode 100644 xfont_2.pc.in diff --git a/Makefile.am b/Makefile.am index 7ec3188..cf8c9df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,13 +35,18 @@ libXfontinclude_HEADERS = \ include/X11/fonts/fontutil.h \ include/X11/fonts/fontxlfd.h \ include/X11/fonts/pcf.h \ + include/X11/fonts/libxfont_2.h \ src/FreeType/ft.h \ src/FreeType/ftfuncs.h + +noinst_HEADERS = \ + include/libxfontint.h + nodist_libXfontinclude_HEADERS = \ include/X11/fonts/fontconf.h pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = xfont.pc +pkgconfig_DATA = xfont_2.pc MAINTAINERCLEANFILES = ChangeLog INSTALL diff --git a/configure.ac b/configure.ac index 7cb6bdf..cc27079 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) -AC_INIT([libXfont], [1.5.1], +AC_INIT([libXfont], [2.0.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXfont]) AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_HEADERS([config.h include/X11/fonts/fontconf.h]) @@ -232,5 +232,5 @@ AC_CONFIG_FILES([Makefile src/fc/Makefile src/util/Makefile src/stubs/Makefile - xfont.pc]) + xfont_2.pc]) AC_OUTPUT diff --git a/include/X11/fonts/bufio.h b/include/X11/fonts/bufio.h index e7a9f4a..387533d 100644 --- a/include/X11/fonts/bufio.h +++ b/include/X11/fonts/bufio.h @@ -66,7 +66,7 @@ extern BufFilePtr BufFilePushBZIP2 ( BufFilePtr ); #endif extern int BufFileClose ( BufFilePtr, int ); extern int BufFileRead ( BufFilePtr, char*, int ); -extern int BufFileWrite ( BufFilePtr, char*, int ); +extern int BufFileWrite ( BufFilePtr, const char*, int ); #define BufFileGet(f) ((f)->left-- ? *(f)->bufp++ : ((f)->eof = (*(f)->input) (f))) #define BufFilePut(c,f) (--(f)->left ? *(f)->bufp++ = ((unsigned char)(c)) : (*(f)->output) ((unsigned char)(c),f)) diff --git a/include/X11/fonts/fontmisc.h b/include/X11/fonts/fontmisc.h index d3926a7..06e49f5 100644 --- a/include/X11/fonts/fontmisc.h +++ b/include/X11/fonts/fontmisc.h @@ -54,7 +54,7 @@ in this Software without prior written authorization from The Open Group. extern Atom MakeAtom ( const char *string, unsigned len, int makeit ); extern int ValidAtom ( Atom atom ); -extern char *NameForAtom (Atom atom); +extern const char *NameForAtom (Atom atom); #define lowbit(x) ((x) & (~(x) + 1)) diff --git a/include/X11/fonts/libxfont_2.h b/include/X11/fonts/libxfont_2.h new file mode 100644 index 0000000..bcf53f6 --- /dev/null +++ b/include/X11/fonts/libxfont_2.h @@ -0,0 +1,81 @@ +/* + * Copyright © 2015 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _LIBXFONT_H_ +#define _LIBXFONT_H_ + +#include <stdarg.h> +#include <X11/Xfuncproto.h> + +#define FONT_FPE_FUNCS_VERSION 1 + +typedef struct _font_fpe_funcs { + int version; + NameCheckFunc name_func; + InitFpeFunc init_func; + FreeFpeFunc free_func; + ResetFpeFunc reset_func; + OpenFontFunc open_func; + CloseFontFunc close_func; + ListFontsFunc list_func; + StartLfwiFunc start_lfwi_func; + NextLfwiFunc next_lfwi_func; + WakeupFpeFunc wakeup_func; + ClientDiedFunc client_died; + LoadGlyphsFunc load_glyphs; + StartLaFunc start_list_alias_func; + NextLaFunc next_list_alias_func; + SetPathFunc set_path_func; +} font_fpe_funcs_rec, *font_fpe_funcs_ptr; + +#define FONT_CLIENT_FUNCS_VERSION 1 + +typedef struct _font_client_funcs { + int version; + int (*client_auth_generation)(ClientPtr client); + Bool (*client_signal)(ClientPtr client); + void (*delete_font_client_id)(Font id); + void (*verrorf)(const char *f, va_list ap) _X_ATTRIBUTE_PRINTF(1,0); + FontPtr (*find_old_font)(FSID id); + FontResolutionPtr (*get_client_resolutions)(int *num); + int (*get_default_point_size)(void); + Font (*get_new_font_client_id)(void); + uint32_t (*get_time_in_millis)(void); + int (*init_fs_handlers)(FontPathElementPtr fpe, + BlockHandlerProcPtr block_handler); + int (*register_fpe_funcs)(const font_fpe_funcs_rec *funcs); + void (*remove_fs_handlers)(FontPathElementPtr fpe, + BlockHandlerProcPtr block_handler, + Bool all ); + void *(*get_server_client)(void); + int (*set_font_authorizations)(char **authorizations, + int *authlen, void *client); + int (*store_font_client_font)(FontPtr pfont, Font id); + Atom (*make_atom)(const char *string, unsigned len, int makeit); + int (*valid_atom)(Atom atom); + const char *(*name_for_atom)(Atom atom); + unsigned long (*get_server_generation)(void); +} font_client_funcs_rec, *font_client_funcs_ptr; + +extern void font_register_client_funcs(font_client_funcs_rec const *client_funcs); + +#endif /* _LIBXFONT_H_ */ diff --git a/include/libxfontint.h b/include/libxfontint.h new file mode 100644 index 0000000..d690631 --- /dev/null +++ b/include/libxfontint.h @@ -0,0 +1,90 @@ +/* + * Copyright © 2015 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _LIBXFONTINT_H_ +#define _LIBXFONTINT_H_ + +#define client_auth_generation __libxfont__client_auth_generation +#define ClientSignal __libxfont__ClientSignal +#define DeleteFontClientID __libxfont__DeleteFontClientID +#define ErrorF __libxfont__ErrorF +#define find_old_font __libxfont__find_old_font +#define GetClientResolutions __libxfont__GetClientResolutions +#define GetDefaultPointSize __libxfont__GetDefaultPointSize +#define GetNewFontClientID __libxfont__GetNewFontClientID +#define GetTimeInMillis __libxfont__GetTimeInMillis +#define init_fs_handlers __libxfont__init_fs_handlers +#define remove_fs_handlers __libxfont__remove_fs_handlers +#define __GetServerClient __libxfont____GetServerClient +#define set_font_authorizations __libxfont__set_font_authorizations +#define StoreFontClientFont __libxfont__StoreFontClientFont +#define MakeAtom __libxfont__MakeAtom +#define ValidAtom __libxfont__ValidAtom +#define NameForAtom __libxfont__NameForAtom + +#include <X11/fonts/FS.h> +#include <X11/fonts/FSproto.h> +#include <X11/X.h> +#include <X11/Xos.h> +#include <X11/fonts/fontmisc.h> +#include <X11/fonts/fontstruct.h> +#include <X11/fonts/fontutil.h> +#include <X11/fonts/fontproto.h> +#include <errno.h> +#include <limits.h> +#include <stdint.h> + +#include <X11/fonts/libxfont_2.h> + +#ifndef LIBXFONT_SKIP_ERRORF +void +ErrorF(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2); +#endif + +FontPtr +find_old_font(FSID id); + +unsigned long +GetTimeInMillis (void); + +int +register_fpe_funcs(const font_fpe_funcs_rec *funcs); + +void * +__GetServerClient(void); + +int +set_font_authorizations(char **authorizations, int *authlen, ClientPtr client); + +unsigned long +__GetServerGeneration (void); + +Atom +__libxfont_internal__MakeAtom(const char *string, unsigned len, int makeit); + +int +__libxfont_internal__ValidAtom(Atom atom); + +const char * +__libxfont_internal__NameForAtom(Atom atom); + +#endif /* _LIBXFONTINT_H_ */ diff --git a/src/FreeType/ft.h b/src/FreeType/ft.h index 8cf31d4..7fa86b0 100644 --- a/src/FreeType/ft.h +++ b/src/FreeType/ft.h @@ -82,6 +82,4 @@ unsigned FTRemap(FT_Face face, FTMappingPtr, unsigned code); int FTtoXReturnCode(int); int FTGetEnglishName(FT_Face, int, char *, int); -extern void ErrorF(const char*, ...); - #endif /* _FT_H_ */ diff --git a/src/FreeType/ftenc.c b/src/FreeType/ftenc.c index 9e31d75..dfa5cab 100644 --- a/src/FreeType/ftenc.c +++ b/src/FreeType/ftenc.c @@ -23,6 +23,7 @@ THE SOFTWARE. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <string.h> #include <X11/fonts/fntfilst.h> diff --git a/src/FreeType/ftfuncs.c b/src/FreeType/ftfuncs.c index a4969d1..77344cd 100644 --- a/src/FreeType/ftfuncs.c +++ b/src/FreeType/ftfuncs.c @@ -29,6 +29,7 @@ THE SOFTWARE. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <string.h> diff --git a/src/FreeType/fttools.c b/src/FreeType/fttools.c index 8c5d08e..7c0bd9b 100644 --- a/src/FreeType/fttools.c +++ b/src/FreeType/fttools.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <ctype.h> #include <string.h> diff --git a/src/FreeType/xttcap.c b/src/FreeType/xttcap.c index cee752e..c6be080 100644 --- a/src/FreeType/xttcap.c +++ b/src/FreeType/xttcap.c @@ -41,6 +41,7 @@ static char const * const releaseID = #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <string.h> #include <ctype.h> diff --git a/src/Makefile.am b/src/Makefile.am index 33fd135..363a3ba 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -19,7 +19,7 @@ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -lib_LTLIBRARIES = libXfont.la +lib_LTLIBRARIES = libXfont_2.la AM_CFLAGS = $(OS_CFLAGS) $(CWARNFLAGS) @@ -58,11 +58,11 @@ SUBDIRS=\ $(FONTFILE_DIR) $(FREETYPE_DIR) $(BITMAP_DIR) \ $(BUILTINS_DIR) $(FC_DIR) $(UTIL_DIR) $(STUBS_DIR) -libXfont_la_LIBADD = \ +libXfont_2_la_LIBADD = \ $(FONTFILE_LIB) $(FREETYPE_LIB) $(BITMAP_LIB) \ $(BUILTINS_LIB) $(FC_LIB) $(UTIL_LIB) $(STUBS_LIB) \ $(FREETYPE_LIBS) $(Z_LIBS) $(MATH_LIBS) $(XFONT_LIBS) -libXfont_la_SOURCES = dummy.c +libXfont_2_la_SOURCES = dummy.c -libXfont_la_LDFLAGS = -version-number 1:4:1 -no-undefined +libXfont_2_la_LDFLAGS = -version-number 2:0:0 -no-undefined diff --git a/src/bitmap/bdfread.c b/src/bitmap/bdfread.c index eccd7b7..1689a3b 100644 --- a/src/bitmap/bdfread.c +++ b/src/bitmap/bdfread.c @@ -52,6 +52,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <ctype.h> #include <X11/fonts/fntfilst.h> diff --git a/src/bitmap/bdfutils.c b/src/bitmap/bdfutils.c index 288148b..91069ed 100644 --- a/src/bitmap/bdfutils.c +++ b/src/bitmap/bdfutils.c @@ -52,6 +52,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <ctype.h> #include <stdio.h> diff --git a/src/bitmap/bitmap.c b/src/bitmap/bitmap.c index 0a379eb..a780506 100644 --- a/src/bitmap/bitmap.c +++ b/src/bitmap/bitmap.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> diff --git a/src/bitmap/bitmapfunc.c b/src/bitmap/bitmapfunc.c index 8c6b3d8..3087e47 100644 --- a/src/bitmap/bitmapfunc.c +++ b/src/bitmap/bitmapfunc.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> diff --git a/src/bitmap/bitmaputil.c b/src/bitmap/bitmaputil.c index 0a1c87e..232729f 100644 --- a/src/bitmap/bitmaputil.c +++ b/src/bitmap/bitmaputil.c @@ -29,6 +29,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> diff --git a/src/bitmap/bitscale.c b/src/bitmap/bitscale.c index c9af4c0..22747a9 100644 --- a/src/bitmap/bitscale.c +++ b/src/bitmap/bitscale.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> @@ -43,9 +44,6 @@ from The Open Group. #define MAX(a,b) (((a)>(b)) ? a : b) #endif -/* Should get this from elsewhere */ -extern unsigned long __GetServerGeneration(void); - static void bitmapUnloadScalable (FontPtr pFont); static void ScaleBitmap ( FontPtr pFont, CharInfoPtr opci, CharInfoPtr pci, double *inv_xform, diff --git a/src/bitmap/fontink.c b/src/bitmap/fontink.c index f4898da..ea915e4 100644 --- a/src/bitmap/fontink.c +++ b/src/bitmap/fontink.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> diff --git a/src/bitmap/pcfread.c b/src/bitmap/pcfread.c index 34eeeb7..69af059 100644 --- a/src/bitmap/pcfread.c +++ b/src/bitmap/pcfread.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> diff --git a/src/bitmap/pcfwrite.c b/src/bitmap/pcfwrite.c index 0874c4b..61ae83d 100644 --- a/src/bitmap/pcfwrite.c +++ b/src/bitmap/pcfwrite.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/bitmap.h> @@ -43,7 +44,7 @@ from The Open Group. static CARD32 current_position; static int -pcfWrite(FontFilePtr file, char *b, int c) +pcfWrite(FontFilePtr file, const char *b, int c) { current_position += c; return FontFileWrite(file, b, c); @@ -189,7 +190,7 @@ pcfPutAccel(FontFilePtr file, CARD32 format, FontInfoPtr pFontInfo) #define CanCompressMetrics(min,max) (CanCompressMetric(min) && CanCompressMetric(max)) -static char * +static const char * pcfNameForAtom(Atom a) { return NameForAtom(a); @@ -218,7 +219,7 @@ pcfWriteFont(FontPtr pFont, FontFilePtr file) int header_size; FontPropPtr offsetProps; int prop_pad = 0; - char *atom_name; + const char *atom_name; int glyph; CARD32 offset; diff --git a/src/bitmap/snfread.c b/src/bitmap/snfread.c index da362c8..452b99d 100644 --- a/src/bitmap/snfread.c +++ b/src/bitmap/snfread.c @@ -52,6 +52,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <ctype.h> #include <X11/fonts/fntfilst.h> diff --git a/src/builtins/dir.c b/src/builtins/dir.c index 0225bfc..bda5647 100644 --- a/src/builtins/dir.c +++ b/src/builtins/dir.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include "builtin.h" static BuiltinDirPtr diff --git a/src/builtins/file.c b/src/builtins/file.c index 93527c1..3cfcf0c 100644 --- a/src/builtins/file.c +++ b/src/builtins/file.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <string.h> #include "builtin.h" diff --git a/src/builtins/fonts.c b/src/builtins/fonts.c index 3892178..bb593d7 100644 --- a/src/builtins/fonts.c +++ b/src/builtins/fonts.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include "builtin.h" static const char file_cursor[] = { diff --git a/src/builtins/fpe.c b/src/builtins/fpe.c index 4f5d4cf..207ff51 100644 --- a/src/builtins/fpe.c +++ b/src/builtins/fpe.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include "builtin.h" @@ -65,24 +66,29 @@ BuiltinFreeFPE (FontPathElementPtr fpe) return Successful; } +static const font_fpe_funcs_rec builtin_fpe_funcs = { + .version = FONT_FPE_FUNCS_VERSION, + .name_func = BuiltinNameCheck, + .init_func = BuiltinInitFPE, + .free_func = BuiltinFreeFPE, + .reset_func = BuiltinResetFPE, + .open_func = FontFileOpenFont, + .close_func = FontFileCloseFont, + .list_func = FontFileListFonts, + .start_lfwi_func = FontFileStartListFontsWithInfo, + .next_lfwi_func = FontFileListNextFontWithInfo, + .wakeup_func = (WakeupFpeFunc) 0, + .client_died = (ClientDiedFunc) 0, + .load_glyphs = (LoadGlyphsFunc) 0, + .start_list_alias_func = (StartLaFunc) 0, + .next_list_alias_func = (NextLaFunc) 0, + .set_path_func = (SetPathFunc) 0 +}; + void BuiltinRegisterFpeFunctions(void) { BuiltinRegisterFontFileFunctions (); - font_file_type = RegisterFPEFunctions(BuiltinNameCheck, - BuiltinInitFPE, - BuiltinFreeFPE, - BuiltinResetFPE, - FontFileOpenFont, - FontFileCloseFont, - FontFileListFonts, - FontFileStartListFontsWithInfo, - FontFileListNextFontWithInfo, - (WakeupFpeFunc) 0, - (ClientDiedFunc) 0, - (LoadGlyphsFunc) 0, - (StartLaFunc) 0, - (NextLaFunc) 0, - (SetPathFunc) 0); + font_file_type = register_fpe_funcs(&builtin_fpe_funcs); } diff --git a/src/builtins/render.c b/src/builtins/render.c index 2be0053..7676c87 100644 --- a/src/builtins/render.c +++ b/src/builtins/render.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/fonts/fontutil.h> #include <X11/fonts/pcf.h> diff --git a/src/fc/fsconvert.c b/src/fc/fsconvert.c index 18b0c0d..312bacb 100644 --- a/src/fc/fsconvert.c +++ b/src/fc/fsconvert.c @@ -28,6 +28,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/X.h> #include <X11/Xtrans/Xtrans.h> #include <X11/Xpoll.h> diff --git a/src/fc/fserve.c b/src/fc/fserve.c index 92b0d53..cccd76f 100644 --- a/src/fc/fserve.c +++ b/src/fc/fserve.c @@ -53,6 +53,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #ifdef WIN32 #define _WILLWINSOCK_ @@ -71,6 +72,7 @@ in this Software without prior written authorization from The Open Group. #include <X11/fonts/fontutil.h> #include <errno.h> #include <limits.h> +#include <X11/fonts/libxfont.h> #include <time.h> #define Time_t time_t @@ -101,8 +103,6 @@ in this Software without prior written authorization from The Open Group. /* Somewhat arbitrary limit on maximum reply size we'll try to read. */ #define MAX_REPLY_LENGTH ((64 * 1024 * 1024) >> 2) -extern void ErrorF(const char *f, ...); - static int fs_read_glyphs ( FontPathElementPtr fpe, FSBlockDataPtr blockrec ); static int fs_read_list ( FontPathElementPtr fpe, FSBlockDataPtr blockrec ); static int fs_read_list_info ( FontPathElementPtr fpe, @@ -2160,11 +2160,6 @@ fs_send_load_glyphs(pointer client, FontPtr pfont, return Suspended; } - -extern pointer __GetServerClient(void); /* This could be any number that - doesn't conflict with existing - client values. */ - static int _fs_load_glyphs(pointer client, FontPtr pfont, Bool range_flag, unsigned int nchars, int item_size, unsigned char *data) @@ -3395,22 +3390,27 @@ _fs_free_conn (FSFpePtr conn) * called at server init time */ +static const font_fpe_funcs_rec fs_fpe_funcs = { + .version = FONT_FPE_FUNCS_VERSION, + .name_func = fs_name_check, + .init_func = fs_init_fpe, + .free_func = fs_free_fpe, + .reset_func = fs_reset_fpe, + .open_func = fs_open_font, + .close_func = fs_close_font, + .list_func = fs_list_fonts, + .start_lfwi_func = fs_start_list_with_info, + .next_lfwi_func = fs_next_list_with_info, + .wakeup_func = fs_wakeup, + .client_died = fs_client_died, + .load_glyphs = _fs_load_glyphs, + .start_list_alias_func = (StartLaFunc) 0, + .next_list_alias_func = (NextLaFunc) 0, + .set_path_func = (SetPathFunc) 0 +}; + void fs_register_fpe_functions(void) { - RegisterFPEFunctions(fs_name_check, - fs_init_fpe, - fs_free_fpe, - fs_reset_fpe, - fs_open_font, - fs_close_font, - fs_list_fonts, - fs_start_list_with_info, - fs_next_list_with_info, - fs_wakeup, - fs_client_died, - _fs_load_glyphs, - NULL, - NULL, - NULL); + register_fpe_funcs(&fs_fpe_funcs); } diff --git a/src/fc/fserve.h b/src/fc/fserve.h index 502e201..27c12a7 100644 --- a/src/fc/fserve.h +++ b/src/fc/fserve.h @@ -79,13 +79,4 @@ extern FontPtr fs_create_font (FontPathElementPtr fpe, extern int fs_load_all_glyphs ( FontPtr pfont ); -/* - * These should be declared elsewhere, but I'm concerned that moving them - * would cause problems building other pieces - */ -extern FontPtr find_old_font (Font id); -extern int set_font_authorizations (char **a, int *len, pointer client); -extern long GetTimeInMillis (void); - - #endif /* _FSERVE_H_ */ diff --git a/src/fc/fsio.c b/src/fc/fsio.c index 4deab88..3be81ed 100644 --- a/src/fc/fsio.c +++ b/src/fc/fsio.c @@ -29,6 +29,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #ifdef WIN32 #define _WILLWINSOCK_ diff --git a/src/fc/fstrans.c b/src/fc/fstrans.c index 24fceee..902ef36 100644 --- a/src/fc/fstrans.c +++ b/src/fc/fstrans.c @@ -23,6 +23,8 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#define LIBXFONT_SKIP_ERRORF +#include "libxfontint.h" #define FONT_t #define TRANS_CLIENT #include <X11/Xtrans/transport.c> diff --git a/src/fontfile/bitsource.c b/src/fontfile/bitsource.c index c73f41f..3a6a20f 100644 --- a/src/fontfile/bitsource.c +++ b/src/fontfile/bitsource.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> BitmapSourcesRec FontFileBitmapSources; diff --git a/src/fontfile/bufio.c b/src/fontfile/bufio.c index d8d4f29..de06e1a 100644 --- a/src/fontfile/bufio.c +++ b/src/fontfile/bufio.c @@ -34,6 +34,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/Xos.h> #include <X11/fonts/fontmisc.h> #include <X11/fonts/bufio.h> @@ -184,7 +185,7 @@ BufFileRead (BufFilePtr f, char *b, int n) } int -BufFileWrite (BufFilePtr f, char *b, int n) +BufFileWrite (BufFilePtr f, const char *b, int n) { int cnt; cnt = n; diff --git a/src/fontfile/bunzip2.c b/src/fontfile/bunzip2.c index 4078796..34065f8 100644 --- a/src/fontfile/bunzip2.c +++ b/src/fontfile/bunzip2.c @@ -29,6 +29,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/bufio.h> diff --git a/src/fontfile/catalogue.c b/src/fontfile/catalogue.c index 81a1e13..41fb0b4 100644 --- a/src/fontfile/catalogue.c +++ b/src/fontfile/catalogue.c @@ -27,6 +27,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #ifdef HAVE_READLINK #include <X11/fonts/fntfilst.h> @@ -450,24 +451,29 @@ CatalogueListNextFontOrAlias(pointer client, FontPathElementPtr fpe, return ret; } +static const font_fpe_funcs_rec catalogue_fpe_funcs = { + .version = FONT_FPE_FUNCS_VERSION, + .name_func = CatalogueNameCheck, + .init_func = CatalogueInitFPE, + .free_func = CatalogueFreeFPE, + .reset_func = CatalogueResetFPE, + .open_func = CatalogueOpenFont, + .close_func = CatalogueCloseFont, + .list_func = CatalogueListFonts, + .start_lfwi_func = CatalogueStartListFontsWithInfo, + .next_lfwi_func = CatalogueListNextFontWithInfo, + .wakeup_func = (WakeupFpeFunc) 0, + .client_died = (ClientDiedFunc) 0, + .load_glyphs = (LoadGlyphsFunc) 0, + .start_list_alias_func = CatalogueStartListFontsAndAliases, + .next_list_alias_func = CatalogueListNextFontOrAlias, + .set_path_func = FontFileEmptyBitmapSource, +}; + void CatalogueRegisterLocalFpeFunctions (void) { - RegisterFPEFunctions(CatalogueNameCheck, - CatalogueInitFPE, - CatalogueFreeFPE, - CatalogueResetFPE, - CatalogueOpenFont, - CatalogueCloseFont, - CatalogueListFonts, - CatalogueStartListFontsWithInfo, - CatalogueListNextFontWithInfo, - NULL, - NULL, - NULL, - CatalogueStartListFontsAndAliases, - CatalogueListNextFontOrAlias, - FontFileEmptyBitmapSource); + register_fpe_funcs(&catalogue_fpe_funcs); } #endif /* HAVE_READLINK */ diff --git a/src/fontfile/decompress.c b/src/fontfile/decompress.c index 20971df..42e7aa0 100644 --- a/src/fontfile/decompress.c +++ b/src/fontfile/decompress.c @@ -51,6 +51,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/bufio.h> diff --git a/src/fontfile/defaults.c b/src/fontfile/defaults.c index 1ad7d7c..62b4dd5 100644 --- a/src/fontfile/defaults.c +++ b/src/fontfile/defaults.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/X.h> #include <X11/Xproto.h> diff --git a/src/fontfile/dirfile.c b/src/fontfile/dirfile.c index 38ced75..04cfa40 100644 --- a/src/fontfile/dirfile.c +++ b/src/fontfile/dirfile.c @@ -37,6 +37,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <stdio.h> #include <sys/types.h> diff --git a/src/fontfile/fileio.c b/src/fontfile/fileio.c index d44cecd..074ebcb 100644 --- a/src/fontfile/fileio.c +++ b/src/fontfile/fileio.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilio.h> #include <X11/Xos.h> #ifndef O_BINARY diff --git a/src/fontfile/filewr.c b/src/fontfile/filewr.c index 859a0be..2431784 100644 --- a/src/fontfile/filewr.c +++ b/src/fontfile/filewr.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilio.h> #include <X11/Xos.h> #ifndef O_BINARY diff --git a/src/fontfile/fontdir.c b/src/fontfile/fontdir.c index 7271603..f4f704d 100644 --- a/src/fontfile/fontdir.c +++ b/src/fontfile/fontdir.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/keysym.h> diff --git a/src/fontfile/fontencc.c b/src/fontfile/fontencc.c index 4bdb495..b5c684b 100644 --- a/src/fontfile/fontencc.c +++ b/src/fontfile/fontencc.c @@ -30,11 +30,10 @@ THE SOFTWARE. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontenc.h> #include <X11/fonts/fontencc.h> -extern void ErrorF(const char *f, ...); - char * font_encoding_from_xlfd(const char * name, int length) { diff --git a/src/fontfile/fontfile.c b/src/fontfile/fontfile.c index 05a9610..97adbcf 100644 --- a/src/fontfile/fontfile.c +++ b/src/fontfile/fontfile.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <X11/keysym.h> #ifdef WIN32 @@ -1115,22 +1116,27 @@ FontFileListNextFontOrAlias(pointer client, FontPathElementPtr fpe, return ret; } +static const font_fpe_funcs_rec fontfile_fpe_funcs = { + .version = FONT_FPE_FUNCS_VERSION, + .name_func = FontFileNameCheck, + .init_func = FontFileInitFPE, + .free_func = FontFileFreeFPE, + .reset_func = FontFileResetFPE, + .open_func = FontFileOpenFont, + .close_func = FontFileCloseFont, + .list_func = FontFileListFonts, + .start_lfwi_func = FontFileStartListFontsWithInfo, + .next_lfwi_func = FontFileListNextFontWithInfo, + .wakeup_func = (WakeupFpeFunc) 0, + .client_died = (ClientDiedFunc) 0, + .load_glyphs = (LoadGlyphsFunc) 0, + .start_list_alias_func = FontFileStartListFontsAndAliases, + .next_list_alias_func = FontFileListNextFontOrAlias, + .set_path_func = FontFileEmptyBitmapSource, +}; + void FontFileRegisterLocalFpeFunctions (void) { - RegisterFPEFunctions(FontFileNameCheck, - FontFileInitFPE, - FontFileFreeFPE, - FontFileResetFPE, - FontFileOpenFont, - FontFileCloseFont, - FontFileListFonts, - FontFileStartListFontsWithInfo, - FontFileListNextFontWithInfo, - NULL, - NULL, - NULL, - FontFileStartListFontsAndAliases, - FontFileListNextFontOrAlias, - FontFileEmptyBitmapSource); + register_fpe_funcs(&fontfile_fpe_funcs); } diff --git a/src/fontfile/fontscale.c b/src/fontfile/fontscale.c index a21802f..bbc8e10 100644 --- a/src/fontfile/fontscale.c +++ b/src/fontfile/fontscale.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> #include <math.h> diff --git a/src/fontfile/gunzip.c b/src/fontfile/gunzip.c index 84a4eaf..36f020a 100644 --- a/src/fontfile/gunzip.c +++ b/src/fontfile/gunzip.c @@ -5,6 +5,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/bufio.h> #include <zlib.h> diff --git a/src/fontfile/register.c b/src/fontfile/register.c index 4faeb8f..c3c8972 100644 --- a/src/fontfile/register.c +++ b/src/fontfile/register.c @@ -29,6 +29,7 @@ in this Software without prior written authorization from The Open Group. #else #define XFONT_BITMAP 1 #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fntfilst.h> diff --git a/src/fontfile/renderers.c b/src/fontfile/renderers.c index bbcd466..d0c4064 100644 --- a/src/fontfile/renderers.c +++ b/src/fontfile/renderers.c @@ -31,8 +31,8 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fntfilst.h> -extern void ErrorF(const char *f, ...); static FontRenderersRec renderers; @@ -40,7 +40,6 @@ static FontRenderersRec renderers; * XXX Maybe should allow unregistering renders. For now, just clear the * list at each new generation. */ -extern unsigned long __GetServerGeneration(void); static unsigned long rendererGeneration = 0; Bool diff --git a/src/stubs/Makefile.am b/src/stubs/Makefile.am index 7eb16d4..65950cc 100644 --- a/src/stubs/Makefile.am +++ b/src/stubs/Makefile.am @@ -6,20 +6,5 @@ AM_CFLAGS = $(XFONT_CFLAGS) $(OS_CFLAGS) $(CWARNFLAGS) noinst_LTLIBRARIES = libstubs.la libstubs_la_SOURCES = \ - cauthgen.c \ - csignal.c \ - delfntcid.c \ - errorf.c \ - findoldfnt.c \ - getcres.c \ - getdefptsize.c \ - getnewfntcid.c \ - gettime.c \ - initfshdl.c \ - regfpefunc.c \ - rmfshdl.c \ - servclient.c \ - setfntauth.c \ - stfntcfnt.c \ - stubsinit.c \ - stubs.h + atom.c \ + libxfontstubs.c diff --git a/src/stubs/atom.c b/src/stubs/atom.c new file mode 100644 index 0000000..61ee85c --- /dev/null +++ b/src/stubs/atom.c @@ -0,0 +1,234 @@ +/* + +Copyright 1990, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +*/ + +/* + * Author: Keith Packard, MIT X Consortium + */ + +/* lame atom replacement routines for font applications */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "libxfontint.h" +#include <X11/fonts/fontmisc.h> + +typedef struct _AtomList { + char *name; + int len; + int hash; + Atom atom; +} AtomListRec, *AtomListPtr; + +static AtomListPtr *hashTable; + +static int hashSize, hashUsed; +static int hashMask; +static int rehash; + +static AtomListPtr *reverseMap; +static int reverseMapSize; +static Atom lastAtom; + +static int +Hash(const char *string, int len) +{ + int h; + + h = 0; + while (len--) + h = (h << 3) ^ *string++; + if (h < 0) + return -h; + return h; +} + +static int +ResizeHashTable (void) +{ + int newHashSize; + int newHashMask; + AtomListPtr *newHashTable; + int i; + int h; + int newRehash; + int r; + + if (hashSize == 0) + newHashSize = 1024; + else + newHashSize = hashSize * 2; + newHashTable = calloc (newHashSize, sizeof (AtomListPtr)); + if (!newHashTable) { + fprintf(stderr, "ResizeHashTable(): Error: Couldn't allocate" + " newHashTable (%ld)\n", + newHashSize * (unsigned long)sizeof (AtomListPtr)); + return FALSE; + } + newHashMask = newHashSize - 1; + newRehash = (newHashMask - 2); + for (i = 0; i < hashSize; i++) + { + if (hashTable[i]) + { + h = (hashTable[i]->hash) & newHashMask; + if (newHashTable[h]) + { + r = hashTable[i]->hash % newRehash | 1; + do { + h += r; + if (h >= newHashSize) + h -= newHashSize; + } while (newHashTable[h]); + } + newHashTable[h] = hashTable[i]; + } + } + free (hashTable); + hashTable = newHashTable; + hashSize = newHashSize; + hashMask = newHashMask; + rehash = newRehash; + return TRUE; +} + +static int +ResizeReverseMap (void) +{ + AtomListPtr *newMap; + int newMapSize; + + if (reverseMapSize == 0) + newMapSize = 1000; + else + newMapSize = reverseMapSize * 2; + newMap = realloc (reverseMap, newMapSize * sizeof (AtomListPtr)); + if (newMap == NULL) { + fprintf(stderr, "ResizeReverseMap(): Error: Couldn't reallocate" + " reverseMap (%ld)\n", + newMapSize * (unsigned long)sizeof(AtomListPtr)); + return FALSE; + } + reverseMap = newMap; + reverseMapSize = newMapSize; + return TRUE; +} + +static int +NameEqual (const char *a, const char *b, int l) +{ + while (l--) + if (*a++ != *b++) + return FALSE; + return TRUE; +} + +Atom +__libxfont_internal__MakeAtom(const char *string, unsigned len, int makeit) +{ + AtomListPtr a; + int hash; + int h = 0; + int r; + + hash = Hash (string, len); + if (hashTable) + { + h = hash & hashMask; + if (hashTable[h]) + { + if (hashTable[h]->hash == hash && hashTable[h]->len == len && + NameEqual (hashTable[h]->name, string, len)) + { + return hashTable[h]->atom; + } + r = (hash % rehash) | 1; + for (;;) + { + h += r; + if (h >= hashSize) + h -= hashSize; + if (!hashTable[h]) + break; + if (hashTable[h]->hash == hash && hashTable[h]->len == len && + NameEqual (hashTable[h]->name, string, len)) + { + return hashTable[h]->atom; + } + } + } + } + if (!makeit) + return None; + a = malloc (sizeof (AtomListRec) + len + 1); + if (a == NULL) { + fprintf(stderr, "MakeAtom(): Error: Couldn't allocate AtomListRec" + " (%ld)\n", (unsigned long)sizeof (AtomListRec) + len + 1); + return None; + } + a->name = (char *) (a + 1); + a->len = len; + strncpy (a->name, string, len); + a->name[len] = '\0'; + a->atom = ++lastAtom; + a->hash = hash; + if (hashUsed >= hashSize / 2) + { + ResizeHashTable (); + h = hash & hashMask; + if (hashTable[h]) + { + r = (hash % rehash) | 1; + do { + h += r; + if (h >= hashSize) + h -= hashSize; + } while (hashTable[h]); + } + } + hashTable[h] = a; + hashUsed++; + if (reverseMapSize <= a->atom) { + if (!ResizeReverseMap()) + return None; + } + reverseMap[a->atom] = a; + return a->atom; +} + +int +__libxfont_internal__ValidAtom(Atom atom) +{ + return (atom != None) && (atom <= lastAtom); +} + +const char * +__libxfont_internal__NameForAtom(Atom atom) +{ + if (atom != None && atom <= lastAtom) + return reverseMap[atom]->name; + return NULL; +} diff --git a/src/stubs/cauthgen.c b/src/stubs/cauthgen.c deleted file mode 100644 index 10086e4..0000000 --- a/src/stubs/cauthgen.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak client_auth_generation -#endif - -weak int -client_auth_generation(ClientPtr client) -{ - OVERRIDE_SYMBOL(client_auth_generation, client); - return 0; -} diff --git a/src/stubs/csignal.c b/src/stubs/csignal.c deleted file mode 100644 index dd88b3d..0000000 --- a/src/stubs/csignal.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak ClientSignal -#endif - -weak Bool -ClientSignal(ClientPtr client) -{ - OVERRIDE_SYMBOL(ClientSignal,client); - return True; -} diff --git a/src/stubs/delfntcid.c b/src/stubs/delfntcid.c deleted file mode 100644 index 8113b9f..0000000 --- a/src/stubs/delfntcid.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak DeleteFontClientID -#endif - -weak void -DeleteFontClientID(Font id) -{ - OVERRIDE_SYMBOL(DeleteFontClientID, id); -} diff --git a/src/stubs/errorf.c b/src/stubs/errorf.c deleted file mode 100644 index d2de6c6..0000000 --- a/src/stubs/errorf.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak ErrorF -#endif - -weak void -ErrorF(const char *f, ...) -{ - OVERRIDE_VA_SYMBOL(VErrorF, f); -} diff --git a/src/stubs/findoldfnt.c b/src/stubs/findoldfnt.c deleted file mode 100644 index c73279e..0000000 --- a/src/stubs/findoldfnt.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak find_old_font -#endif - -weak FontPtr -find_old_font(FSID id) -{ - OVERRIDE_SYMBOL(find_old_font, id); - return (FontPtr)NULL; -} diff --git a/src/stubs/getcres.c b/src/stubs/getcres.c deleted file mode 100644 index 27a9180..0000000 --- a/src/stubs/getcres.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak GetClientResolutions -#endif - -weak FontResolutionPtr -GetClientResolutions(int *num) -{ - OVERRIDE_SYMBOL(GetClientResolutions, num); - return (FontResolutionPtr) 0; -} diff --git a/src/stubs/getdefptsize.c b/src/stubs/getdefptsize.c deleted file mode 100644 index 50c1b18..0000000 --- a/src/stubs/getdefptsize.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak GetDefaultPointSize -#endif - -weak int -GetDefaultPointSize(void) -{ - OVERRIDE_SYMBOL(GetDefaultPointSize); - return 0; -} diff --git a/src/stubs/getnewfntcid.c b/src/stubs/getnewfntcid.c deleted file mode 100644 index d31ccf1..0000000 --- a/src/stubs/getnewfntcid.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak GetNewFontClientID -#endif - -weak Font -GetNewFontClientID(void) -{ - OVERRIDE_SYMBOL(GetNewFontClientID); - return (Font)0; -} diff --git a/src/stubs/gettime.c b/src/stubs/gettime.c deleted file mode 100644 index 1b20f62..0000000 --- a/src/stubs/gettime.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak GetTimeInMillis -#endif - -weak unsigned long -GetTimeInMillis (void) -{ - OVERRIDE_SYMBOL(GetTimeInMillis); - return 0; -} diff --git a/src/stubs/initfshdl.c b/src/stubs/initfshdl.c deleted file mode 100644 index e1c0b24..0000000 --- a/src/stubs/initfshdl.c +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak init_fs_handlers -#endif - -weak int -init_fs_handlers(FontPathElementPtr fpe, - BlockHandlerProcPtr block_handler) -{ - OVERRIDE_SYMBOL(init_fs_handlers, fpe, block_handler); - return Successful; -} diff --git a/src/stubs/libxfontstubs.c b/src/stubs/libxfontstubs.c new file mode 100644 index 0000000..f72caec --- /dev/null +++ b/src/stubs/libxfontstubs.c @@ -0,0 +1,169 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "libxfontint.h" + +static font_client_funcs_rec const *_f; + +int +client_auth_generation(ClientPtr client) +{ + if (_f) + return _f->client_auth_generation(client); + return 0; +} + +Bool +ClientSignal(ClientPtr client) +{ + if (_f) + return _f->client_signal(client); + return TRUE; +} + +void +DeleteFontClientID(Font id) +{ + if (_f) + _f->delete_font_client_id(id); +} + +void +ErrorF(const char *f, ...) +{ + if (_f) { + va_list ap; + va_start(ap, f); + _f->verrorf(f, ap); + va_end(ap); + } +} + +FontPtr +find_old_font(FSID id) +{ + if (_f) + return _f->find_old_font(id); + return (FontPtr)NULL; +} + +FontResolutionPtr +GetClientResolutions(int *num) +{ + if (_f) + return _f->get_client_resolutions(num); + return (FontResolutionPtr) 0; +} + +int +GetDefaultPointSize(void) +{ + if (_f) + return _f->get_default_point_size(); + return 12; +} + +Font +GetNewFontClientID(void) +{ + if (_f) + return _f->get_new_font_client_id(); + return (Font)0; +} + +unsigned long +GetTimeInMillis (void) +{ + if (_f) + return _f->get_time_in_millis(); + return 0; +} + +int +init_fs_handlers(FontPathElementPtr fpe, + BlockHandlerProcPtr block_handler) +{ + if (_f) + return _f->init_fs_handlers(fpe, block_handler); + return Successful; +} + +int +register_fpe_funcs(const font_fpe_funcs_rec *funcs) +{ + if (_f) + return _f->register_fpe_funcs(funcs); + return 0; +} + +void +remove_fs_handlers(FontPathElementPtr fpe, + BlockHandlerProcPtr blockHandler, + Bool all) +{ + if (_f) + _f->remove_fs_handlers(fpe, blockHandler, all); +} + +void * +__GetServerClient(void) +{ + if (_f) + return _f->get_server_client(); + return NULL; +} + +int +set_font_authorizations(char **authorizations, int *authlen, ClientPtr client) +{ + if (_f) + return _f->set_font_authorizations(authorizations, authlen, client); + return 0; +} + +int +StoreFontClientFont(FontPtr pfont, Font id) +{ + if (_f) + return _f->store_font_client_font(pfont, id); + return 0; +} + +Atom +MakeAtom(const char *string, unsigned len, int makeit) +{ + if (_f && _f->make_atom) + return _f->make_atom(string, len, makeit); + return __libxfont_internal__MakeAtom(string, len, makeit); +} + +int +ValidAtom(Atom atom) +{ + if (_f && _f->valid_atom) + return _f->valid_atom(atom); + return __libxfont_internal__ValidAtom(atom); +} + +const char * +NameForAtom(Atom atom) +{ + if (_f && _f->name_for_atom) + return _f->name_for_atom(atom); + return __libxfont_internal__NameForAtom(atom); +} + +unsigned long +__GetServerGeneration (void) +{ + if (_f) + return _f->get_server_generation(); + return 1; +} + +void +font_register_client_funcs(font_client_funcs_rec const *client_funcs) +{ + _f = client_funcs; +} diff --git a/src/stubs/regfpefunc.c b/src/stubs/regfpefunc.c deleted file mode 100644 index ae12a01..0000000 --- a/src/stubs/regfpefunc.c +++ /dev/null @@ -1,32 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak RegisterFPEFunctions -#endif - -weak int -RegisterFPEFunctions(NameCheckFunc name_func, - InitFpeFunc init_func, - FreeFpeFunc free_func, - ResetFpeFunc reset_func, - OpenFontFunc open_func, - CloseFontFunc close_func, - ListFontsFunc list_func, - StartLfwiFunc start_lfwi_func, - NextLfwiFunc next_lfwi_func, - WakeupFpeFunc wakeup_func, - ClientDiedFunc client_died, - LoadGlyphsFunc load_glyphs, - StartLaFunc start_list_alias_func, - NextLaFunc next_list_alias_func, - SetPathFunc set_path_func) -{ - OVERRIDE_SYMBOL(RegisterFPEFunctions, name_func, init_func, free_func, - reset_func, open_func, close_func, list_func, start_lfwi_func, - next_lfwi_func, wakeup_func, client_died, load_glyphs, - start_list_alias_func, next_list_alias_func, set_path_func); - return 0; -} diff --git a/src/stubs/rmfshdl.c b/src/stubs/rmfshdl.c deleted file mode 100644 index 22a3091..0000000 --- a/src/stubs/rmfshdl.c +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak remove_fs_handlers -#endif - -weak void -remove_fs_handlers(FontPathElementPtr fpe, - BlockHandlerProcPtr blockHandler, - Bool all) -{ - OVERRIDE_SYMBOL(remove_fs_handlers, fpe, blockHandler, all); -} diff --git a/src/stubs/servclient.c b/src/stubs/servclient.c deleted file mode 100644 index f85e08e..0000000 --- a/src/stubs/servclient.c +++ /dev/null @@ -1,19 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak serverClient -#endif - -weak void *serverClient = 0; - -void *__GetServerClient(void); - -void * -__GetServerClient(void) -{ - OVERRIDE_DATA(serverClient); - return serverClient; -} diff --git a/src/stubs/setfntauth.c b/src/stubs/setfntauth.c deleted file mode 100644 index 371807e..0000000 --- a/src/stubs/setfntauth.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak set_font_authorizations -#endif - -weak int -set_font_authorizations(char **authorizations, int *authlen, ClientPtr client) -{ - OVERRIDE_SYMBOL(set_font_authorizations, authorizations, authlen, client); - return 0; -} diff --git a/src/stubs/stfntcfnt.c b/src/stubs/stfntcfnt.c deleted file mode 100644 index d490988..0000000 --- a/src/stubs/stfntcfnt.c +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "stubs.h" - -#ifdef __SUNPRO_C -#pragma weak StoreFontClientFont -#endif - -weak int -StoreFontClientFont(FontPtr pfont, Font id) -{ - OVERRIDE_SYMBOL(StoreFontClientFont, pfont, id); - return 0; -} diff --git a/src/stubs/stubs.h b/src/stubs/stubs.h deleted file mode 100644 index 7d499d5..0000000 --- a/src/stubs/stubs.h +++ /dev/null @@ -1,88 +0,0 @@ -#include <stdio.h> -#include <X11/fonts/fntfilst.h> -#include <X11/fonts/font.h> - -#ifndef True -#define True (-1) -#endif -#ifndef False -#define False (0) -#endif - -/* this probably works for Mach-O too, but probably not for PE */ -#if (defined(__APPLE__) || defined(__ELF__)) && defined(__GNUC__) && (__GNUC__ >= 3) -#define weak __attribute__((weak)) -#else -#define weak -#ifndef __SUNPRO_C /* Sun compilers use #pragma weak in .c files instead */ -#define NO_WEAK_SYMBOLS -#endif -#endif - -#if defined(NO_WEAK_SYMBOLS) && defined(PIC) -#include <stdarg.h> -extern int _font_init_stubs(void); -#define OVERRIDE_DATA(sym) \ - _font_init_stubs(); \ - if (__ptr_##sym && __ptr_##sym != &sym) \ - sym = *__ptr_##sym -#define OVERRIDE_SYMBOL(sym,...) \ - _font_init_stubs(); \ - if (__##sym && __##sym != sym) \ - return (*__##sym)(__VA_ARGS__) -#define OVERRIDE_VA_SYMBOL(sym,f) \ - va_list _args; \ - _font_init_stubs(); \ - va_start(_args, f); \ - if (__##sym) \ - (*__##sym)(f, _args); \ - va_end(_args) - -int (*__client_auth_generation)(ClientPtr); -Bool (*__ClientSignal)(ClientPtr); -void (*__DeleteFontClientID)(Font); -void (*__VErrorF)(const char *, va_list); -FontPtr (*__find_old_font)(FSID); -FontResolutionPtr (*__GetClientResolutions)(int *); -int (*__GetDefaultPointSize)(void); -Font (*__GetNewFontClientID)(void); -unsigned long (*__GetTimeInMillis)(void); -int (*__init_fs_handlers)(FontPathElementPtr, BlockHandlerProcPtr); -int (*__RegisterFPEFunctions)(NameCheckFunc, InitFpeFunc, FreeFpeFunc, - ResetFpeFunc, OpenFontFunc, CloseFontFunc, ListFontsFunc, - StartLfwiFunc, NextLfwiFunc, WakeupFpeFunc, ClientDiedFunc, - LoadGlyphsFunc, StartLaFunc, NextLaFunc, SetPathFunc); -void (*__remove_fs_handlers)(FontPathElementPtr, BlockHandlerProcPtr, Bool); -void **__ptr_serverClient; -int (*__set_font_authorizations)(char **, int *, ClientPtr); -int (*__StoreFontClientFont)(FontPtr, Font); -Atom (*__MakeAtom)(const char *, unsigned, int); -int (*__ValidAtom)(Atom); -char *(*__NameForAtom)(Atom); -unsigned long *__ptr_serverGeneration; -void (*__register_fpe_functions)(void); -#else /* NO_WEAK_SYMBOLS && PIC */ -#define OVERRIDE_DATA(sym) -#define OVERRIDE_SYMBOL(sym,...) -#define OVERRIDE_VA_SYMBOL(sym,f) -#endif - -/* This is really just a hack for now... __APPLE__ really should be using - * the weak symbols route above, but it's causing an as-yet unresolved issue, - * so we're instead building with flat_namespace. - */ -#ifdef __APPLE__ -#undef weak -#define weak -#endif - -extern FontPtr find_old_font ( FSID id ); -extern int set_font_authorizations ( char **authorizations, - int *authlen, - ClientPtr client ); - -extern unsigned long GetTimeInMillis (void); - -extern void ErrorF(const char *format, ...); - -/* end of file */ diff --git a/src/stubs/stubsinit.c b/src/stubs/stubsinit.c deleted file mode 100644 index fc52332..0000000 --- a/src/stubs/stubsinit.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "stubs.h" - -#if defined(NO_WEAK_SYMBOLS) && defined(PIC) - -#ifdef WIN32 -#include <X11/Xwindows.h> -#define DLOPEN_SELF() GetModuleHandle(NULL) -#define DLSYM(h,f) GetProcAddress(h,f) -#else -#include <dlfcn.h> -#define DLOPEN_SELF() dlopen(NULL, RTLD_LOCAL) -#define DLSYM(h,f) dlsym(h, f) -#endif - -int (*__client_auth_generation)(ClientPtr) = NULL; -Bool (*__ClientSignal)(ClientPtr) = NULL; -void (*__DeleteFontClientID)(Font) = NULL; -void (*__VErrorF)(const char *, va_list) = NULL; -FontPtr (*__find_old_font)(FSID) = NULL; -FontResolutionPtr (*__GetClientResolutions)(int *) = NULL; -int (*__GetDefaultPointSize)(void) = NULL; -Font (*__GetNewFontClientID)(void) = NULL; -unsigned long (*__GetTimeInMillis)(void) = NULL; -int (*__init_fs_handlers)(FontPathElementPtr, BlockHandlerProcPtr) = NULL; -int (*__RegisterFPEFunctions)(NameCheckFunc, InitFpeFunc, FreeFpeFunc, - ResetFpeFunc, OpenFontFunc, CloseFontFunc, ListFontsFunc, - StartLfwiFunc, NextLfwiFunc, WakeupFpeFunc, ClientDiedFunc, - LoadGlyphsFunc, StartLaFunc, NextLaFunc, SetPathFunc) = NULL; -void (*__remove_fs_handlers)(FontPathElementPtr, BlockHandlerProcPtr, Bool) = NULL; -void **__ptr_serverClient = NULL; -int (*__set_font_authorizations)(char **, int *, ClientPtr) = NULL; -int (*__StoreFontClientFont)(FontPtr, Font) = NULL; -Atom (*__MakeAtom)(const char *, unsigned, int) = NULL; -int (*__ValidAtom)(Atom) = NULL; -char *(*__NameForAtom)(Atom) = NULL; -unsigned long *__ptr_serverGeneration = NULL; -void (*__register_fpe_functions)(void) = NULL; - -#define INIT_SYMBOL(sym) \ - if (!__##sym) \ - __##sym = (typeof(__##sym)) DLSYM(handle, #sym) -#define INIT_DATA(sym) \ - if (!__ptr_##sym) \ - __ptr_##sym = (typeof(__ptr_##sym)) DLSYM(handle, #sym) - -int -_font_init_stubs (void) -{ - static int inited = FALSE; - static void *handle = NULL; - - if (inited) - return inited; - if (!handle) - handle = DLOPEN_SELF(); - - INIT_SYMBOL(client_auth_generation); - INIT_SYMBOL(ClientSignal); - INIT_SYMBOL(DeleteFontClientID); - INIT_SYMBOL(VErrorF); - INIT_SYMBOL(find_old_font); - INIT_SYMBOL(GetClientResolutions); - INIT_SYMBOL(GetDefaultPointSize); - INIT_SYMBOL(GetNewFontClientID); - INIT_SYMBOL(GetTimeInMillis); - INIT_SYMBOL(init_fs_handlers); - INIT_SYMBOL(RegisterFPEFunctions); - INIT_SYMBOL(remove_fs_handlers); - INIT_SYMBOL(set_font_authorizations); - INIT_SYMBOL(StoreFontClientFont); - INIT_SYMBOL(MakeAtom); - INIT_SYMBOL(ValidAtom); - INIT_SYMBOL(NameForAtom); - INIT_SYMBOL(register_fpe_functions); - INIT_DATA(serverClient); - INIT_DATA(serverGeneration); - - inited = TRUE; - return inited; -} - -#endif /* NO_WEAK_SYMBOLS && PIC */ diff --git a/src/util/Makefile.am b/src/util/Makefile.am index 32a8f37..d802b59 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -7,7 +7,6 @@ AM_CFLAGS = $(XFONT_CFLAGS) $(OS_CFLAGS) $(CWARNFLAGS) noinst_LTLIBRARIES = libutil.la libutil_la_SOURCES = \ - atom.c \ fontaccel.c \ fontnames.c \ fontutil.c \ diff --git a/src/util/atom.c b/src/util/atom.c deleted file mode 100644 index 5f7f1c6..0000000 --- a/src/util/atom.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - -Copyright 1990, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ - -/* - * Author: Keith Packard, MIT X Consortium - */ - -/* lame atom replacement routines for font applications */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <X11/fonts/fontmisc.h> -#include "stubs.h" - -typedef struct _AtomList { - char *name; - int len; - int hash; - Atom atom; -} AtomListRec, *AtomListPtr; - -static AtomListPtr *hashTable; - -static int hashSize, hashUsed; -static int hashMask; -static int rehash; - -static AtomListPtr *reverseMap; -static int reverseMapSize; -static Atom lastAtom; - -static int -Hash(const char *string, int len) -{ - int h; - - h = 0; - while (len--) - h = (h << 3) ^ *string++; - if (h < 0) - return -h; - return h; -} - -static int -ResizeHashTable (void) -{ - int newHashSize; - int newHashMask; - AtomListPtr *newHashTable; - int i; - int h; - int newRehash; - int r; - - if (hashSize == 0) - newHashSize = 1024; - else - newHashSize = hashSize * 2; - newHashTable = calloc (newHashSize, sizeof (AtomListPtr)); - if (!newHashTable) { - fprintf(stderr, "ResizeHashTable(): Error: Couldn't allocate" - " newHashTable (%ld)\n", - newHashSize * (unsigned long)sizeof (AtomListPtr)); - return FALSE; - } - newHashMask = newHashSize - 1; - newRehash = (newHashMask - 2); - for (i = 0; i < hashSize; i++) - { - if (hashTable[i]) - { - h = (hashTable[i]->hash) & newHashMask; - if (newHashTable[h]) - { - r = hashTable[i]->hash % newRehash | 1; - do { - h += r; - if (h >= newHashSize) - h -= newHashSize; - } while (newHashTable[h]); - } - newHashTable[h] = hashTable[i]; - } - } - free (hashTable); - hashTable = newHashTable; - hashSize = newHashSize; - hashMask = newHashMask; - rehash = newRehash; - return TRUE; -} - -static int -ResizeReverseMap (void) -{ - AtomListPtr *newMap; - int newMapSize; - - if (reverseMapSize == 0) - newMapSize = 1000; - else - newMapSize = reverseMapSize * 2; - newMap = realloc (reverseMap, newMapSize * sizeof (AtomListPtr)); - if (newMap == NULL) { - fprintf(stderr, "ResizeReverseMap(): Error: Couldn't reallocate" - " reverseMap (%ld)\n", - newMapSize * (unsigned long)sizeof(AtomListPtr)); - return FALSE; - } - reverseMap = newMap; - reverseMapSize = newMapSize; - return TRUE; -} - -static int -NameEqual (const char *a, const char *b, int l) -{ - while (l--) - if (*a++ != *b++) - return FALSE; - return TRUE; -} - -#ifdef __SUNPRO_C -#pragma weak MakeAtom -#endif - -weak Atom -MakeAtom(const char *string, unsigned len, int makeit) -{ - AtomListPtr a; - int hash; - int h = 0; - int r; - - OVERRIDE_SYMBOL(MakeAtom, string, len, makeit); - - hash = Hash (string, len); - if (hashTable) - { - h = hash & hashMask; - if (hashTable[h]) - { - if (hashTable[h]->hash == hash && hashTable[h]->len == len && - NameEqual (hashTable[h]->name, string, len)) - { - return hashTable[h]->atom; - } - r = (hash % rehash) | 1; - for (;;) - { - h += r; - if (h >= hashSize) - h -= hashSize; - if (!hashTable[h]) - break; - if (hashTable[h]->hash == hash && hashTable[h]->len == len && - NameEqual (hashTable[h]->name, string, len)) - { - return hashTable[h]->atom; - } - } - } - } - if (!makeit) - return None; - a = malloc (sizeof (AtomListRec) + len + 1); - if (a == NULL) { - fprintf(stderr, "MakeAtom(): Error: Couldn't allocate AtomListRec" - " (%ld)\n", (unsigned long)sizeof (AtomListRec) + len + 1); - return None; - } - a->name = (char *) (a + 1); - a->len = len; - strncpy (a->name, string, len); - a->name[len] = '\0'; - a->atom = ++lastAtom; - a->hash = hash; - if (hashUsed >= hashSize / 2) - { - ResizeHashTable (); - h = hash & hashMask; - if (hashTable[h]) - { - r = (hash % rehash) | 1; - do { - h += r; - if (h >= hashSize) - h -= hashSize; - } while (hashTable[h]); - } - } - hashTable[h] = a; - hashUsed++; - if (reverseMapSize <= a->atom) { - if (!ResizeReverseMap()) - return None; - } - reverseMap[a->atom] = a; - return a->atom; -} - -#ifdef __SUNPRO_C -#pragma weak ValidAtom -#endif - -weak int -ValidAtom(Atom atom) -{ - OVERRIDE_SYMBOL(ValidAtom, atom); - return (atom != None) && (atom <= lastAtom); -} - -#ifdef __SUNPRO_C -#pragma weak NameForAtom -#endif - -weak char * -NameForAtom(Atom atom) -{ - OVERRIDE_SYMBOL(NameForAtom, atom); - if (atom != None && atom <= lastAtom) - return reverseMap[atom]->name; - return NULL; -} diff --git a/src/util/fontaccel.c b/src/util/fontaccel.c index db03e73..c8395c4 100644 --- a/src/util/fontaccel.c +++ b/src/util/fontaccel.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fontstruct.h> #include <X11/fonts/fontutil.h> diff --git a/src/util/fontnames.c b/src/util/fontnames.c index ceafce5..dd50f2b 100644 --- a/src/util/fontnames.c +++ b/src/util/fontnames.c @@ -34,6 +34,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fontstruct.h> diff --git a/src/util/fontutil.c b/src/util/fontutil.c index 2c5ea6f..7b69c33 100644 --- a/src/util/fontutil.c +++ b/src/util/fontutil.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fontstruct.h> #include <X11/fonts/FSproto.h> diff --git a/src/util/fontxlfd.c b/src/util/fontxlfd.c index 974128e..c8f9596 100644 --- a/src/util/fontxlfd.c +++ b/src/util/fontxlfd.c @@ -33,6 +33,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fontstruct.h> #include <X11/fonts/fontxlfd.h> diff --git a/src/util/format.c b/src/util/format.c index c1f9762..0baeb3a 100644 --- a/src/util/format.c +++ b/src/util/format.c @@ -53,6 +53,7 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/FSproto.h> #include <X11/fonts/font.h> #include <X11/fonts/fontstruct.h> diff --git a/src/util/miscutil.c b/src/util/miscutil.c index 61c9d11..e015972 100644 --- a/src/util/miscutil.c +++ b/src/util/miscutil.c @@ -29,38 +29,19 @@ from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/Xosdefs.h> #include <stdlib.h> #include <X11/fonts/fontmisc.h> -#include "stubs.h" #define XK_LATIN1 #include <X11/keysymdef.h> - -#ifdef __SUNPRO_C -#pragma weak serverGeneration -#pragma weak register_fpe_functions -#endif - extern void BuiltinRegisterFpeFunctions(void); -/* make sure everything initializes themselves at least once */ -weak unsigned long serverGeneration = 1; - -unsigned long __GetServerGeneration (void); - -unsigned long -__GetServerGeneration (void) -{ - OVERRIDE_DATA(serverGeneration); - return serverGeneration; -} - -weak void +void register_fpe_functions (void) { - OVERRIDE_SYMBOL(register_fpe_functions); BuiltinRegisterFpeFunctions(); FontFileRegisterFpeFunctions(); #ifdef XFONT_FC diff --git a/src/util/patcache.c b/src/util/patcache.c index 2101015..29e2d75 100644 --- a/src/util/patcache.c +++ b/src/util/patcache.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fontstruct.h> diff --git a/src/util/private.c b/src/util/private.c index e55e193..f4f2d57 100644 --- a/src/util/private.c +++ b/src/util/private.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> #include <X11/fonts/fontstruct.h> diff --git a/src/util/utilbitmap.c b/src/util/utilbitmap.c index ec726b8..fe1c412 100644 --- a/src/util/utilbitmap.c +++ b/src/util/utilbitmap.c @@ -31,6 +31,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "libxfontint.h" #include <X11/fonts/fontmisc.h> /* Utility functions for reformating font bitmaps */ diff --git a/xfont.pc.in b/xfont.pc.in deleted file mode 100644 index f08dea0..0000000 --- a/xfont.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: Xfont -Description: X font Library -Version: @VERSION@ -Requires: xproto fontsproto -Requires.private: fontenc @FREETYPE_REQUIRES@ -Cflags: -I${includedir} -Libs: -L${libdir} -lXfont -Libs.private: @Z_LIBS@ -lm diff --git a/xfont_2.pc.in b/xfont_2.pc.in new file mode 100644 index 0000000..8527d7f --- /dev/null +++ b/xfont_2.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: Xfont_2 +Description: X font Library version 2 +Version: @VERSION@ +Requires: xproto fontsproto +Requires.private: fontenc @FREETYPE_REQUIRES@ +Cflags: -I${includedir} +Libs: -L${libdir} -lXfont_2 +Libs.private: @Z_LIBS@ -lm -- 2.5.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
