diff options
author | Keith Packard <keithp@keithp.com> | 2015-09-02 00:04:32 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2015-12-08 20:37:48 -0800 |
commit | 135fb032e940ce226c9feb13e6e903f3ecbc5eb0 (patch) | |
tree | b6cea9b925c7be27a13964924b7811823f52f2e2 /src | |
parent | eb67d10ae82b364a4324e96ce53baaa4e5e75f97 (diff) |
Eliminate calls back to X server or font server functions by name (v4)libXfont2-2.0.0
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 libXfont2 instead of libXfont, and the package
config file is now xfont2.pc.
All of the installed headers remain the same as the original library;
there's now a new include file, libxfont2.h, which defines the X
server and Font server interfaces.
This moves util/atom.c to stubs/atom.c and reformats that file, hence
the diff being larger than it would otherwise be.
v2: Rename to libXfont2 instead of libXfont_2 as suggested by Emil Velikov
Fix whitespace in stubs/atom.c, which was moved from util/
v3: Remove select masks from API. Expose single 'font_init' function
for all library initialization.
v4: Change name of distributed tarballs to libXfont2 as well
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
74 files changed, 672 insertions, 894 deletions
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 df64f5e..bbd4db4 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 e30e0f9..f54f76c 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..03c704a 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 = libXfont2.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 = \ +libXfont2_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 +libXfont2_la_SOURCES = dummy.c -libXfont_la_LDFLAGS = -version-number 1:4:1 -no-undefined +libXfont2_la_LDFLAGS = -version-number 2:0:0 -no-undefined diff --git a/src/bitmap/bdfread.c b/src/bitmap/bdfread.c index f343eed..f2b1e22 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 438d197..253cb93 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 33871ae..dab1c44 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..e1b6973 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 xfont2_fpe_funcs_rec builtin_fpe_funcs = { + .version = XFONT2_FPE_FUNCS_VERSION, + .name_check = BuiltinNameCheck, + .init_fpe = BuiltinInitFPE, + .free_fpe = BuiltinFreeFPE, + .reset_fpe = BuiltinResetFPE, + .open_font = FontFileOpenFont, + .close_font = FontFileCloseFont, + .list_fonts = FontFileListFonts, + .start_list_fonts_with_info = FontFileStartListFontsWithInfo, + .list_next_font_with_info = FontFileListNextFontWithInfo, + .wakeup_fpe = 0, + .client_died = 0, + .load_glyphs = 0, + .start_list_fonts_and_aliases = 0, + .list_next_font_or_alias = 0, + .set_path_hook = 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..42c4028 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_ @@ -101,18 +102,14 @@ 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, FSBlockDataPtr blockrec ); -extern fd_set _fs_fd_mask; +static void fs_block_handler ( void *wt ); -static void fs_block_handler ( pointer data, OSTimePtr wt, - pointer LastSelectMask ); -static int fs_wakeup ( FontPathElementPtr fpe, unsigned long *mask ); +static int fs_wakeup ( FontPathElementPtr fpe ); /* * List of all FPEs @@ -147,7 +144,7 @@ static void _fs_close_server (FSFpePtr conn); static FSFpePtr -_fs_init_conn (const char *servername); +_fs_init_conn (const char *servername, FontPathElementPtr fpe); static int _fs_wait_connect (FSFpePtr conn); @@ -167,6 +164,9 @@ _fs_free_conn (FSFpePtr conn); static int fs_free_fpe(FontPathElementPtr fpe); +static void +fs_fd_handler(int fd, void *data); + /* * Font server access * @@ -305,12 +305,12 @@ fs_init_fpe(FontPathElementPtr fpe) if (*name == ':') name++; /* skip ':' */ - conn = _fs_init_conn (name); + conn = _fs_init_conn (name, fpe); if (!conn) err = AllocError; else { - err = init_fs_handlers (fpe, fs_block_handler); + err = init_fs_handlers2 (fpe, fs_block_handler); if (err != Successful) { _fs_free_conn (conn); @@ -383,7 +383,7 @@ fs_free_fpe(FontPathElementPtr fpe) } _fs_unmark_block (conn, conn->blockState); fs_close_conn(conn); - remove_fs_handlers(fpe, fs_block_handler, fs_fpes == 0); + remove_fs_handlers2(fpe, fs_block_handler, fs_fpes == 0); _fs_free_conn (conn); fpe->private = (pointer) 0; @@ -515,6 +515,24 @@ _fs_add_clients_depending(FSClientsDependingPtr *clients_depending, pointer clie return Suspended; } +static void +conn_start_listening(FSFpePtr conn) +{ + if (!conn->fs_listening) { + add_fs_fd(conn->fs_fd, fs_fd_handler, conn->fpe); + conn->fs_listening = TRUE; + } +} + +static void +conn_stop_listening(FSFpePtr conn) +{ + if (conn->fs_listening) { + remove_fs_fd(conn->fs_fd); + conn->fs_listening = FALSE; + } +} + /* * When a request is aborted due to a font server failure, * signal any depending clients to restart their dependant @@ -546,7 +564,7 @@ _fs_clean_aborted_blockrec(FSFpePtr conn, FSBlockDataPtr blockrec) FSBlockedListInfoPtr binfo; binfo = (FSBlockedListInfoPtr) blockrec->data; if (binfo->status == FS_LFWI_REPLY) - FD_SET(conn->fs_fd, &_fs_fd_mask); + conn_start_listening(conn); _fs_free_props (&binfo->info); } default: @@ -608,7 +626,7 @@ fs_get_reply (FSFpePtr conn, int *error) int ret; /* block if the connection is down or paused in lfwi */ - if (conn->fs_fd == -1 || !FD_ISSET (conn->fs_fd, &_fs_fd_mask)) + if (conn->fs_fd == -1 || !conn->fs_listening) { *error = FSIO_BLOCK; return 0; @@ -655,7 +673,7 @@ fs_reply_ready (FSFpePtr conn) { fsGenericReply *rep; - if (conn->fs_fd == -1 || !FD_ISSET (conn->fs_fd, &_fs_fd_mask)) + if (conn->fs_fd == -1 || !conn->fs_listening) return FALSE; if (fs_data_read (conn) < sizeof (fsGenericReply)) return FALSE; @@ -1300,15 +1318,12 @@ _fs_unmark_block (FSFpePtr conn, CARD32 mask) /* ARGSUSED */ static void -fs_block_handler(pointer data, OSTimePtr wt, pointer LastSelectMask) +fs_block_handler(void *wt) { - static struct timeval block_timeout; CARD32 now, earliest, wakeup; int soonest; FSFpePtr conn; - XFD_ORSET((fd_set *)LastSelectMask, (fd_set *)LastSelectMask, - &_fs_fd_mask); /* * Flush all pending output */ @@ -1320,14 +1335,7 @@ fs_block_handler(pointer data, OSTimePtr wt, pointer LastSelectMask) * Check for any fpe with a complete reply, set sleep time to zero */ if (fs_blockState & FS_COMPLETE_REPLY) - { - block_timeout.tv_sec = 0; - block_timeout.tv_usec = 0; - if (*wt == NULL) - *wt = &block_timeout; - else - **wt = block_timeout; - } + adjust_fs_wait_for_delay(wt, 0); /* * Walk through fpe list computing sleep time */ @@ -1368,12 +1376,7 @@ fs_block_handler(pointer data, OSTimePtr wt, pointer LastSelectMask) soonest = earliest - now; if (soonest < 0) soonest = 0; - block_timeout.tv_sec = soonest / 1000; - block_timeout.tv_usec = (soonest % 1000) * 1000; - if (*wt == NULL) - *wt = &block_timeout; - else if (soonest < (*wt)->tv_sec * 1000 + (*wt)->tv_usec / 1000) - **wt = block_timeout; + adjust_fs_wait_for_delay(wt, soonest); } } @@ -1460,11 +1463,11 @@ fs_read_reply (FontPathElementPtr fpe, pointer client) } } -static int -fs_wakeup(FontPathElementPtr fpe, unsigned long *mask) +static void +fs_fd_handler(int fd, void *data) { - fd_set *LastSelectMask = (fd_set *) mask; - FSFpePtr conn = (FSFpePtr) fpe->private; + FontPathElementPtr fpe = data; + FSFpePtr conn = (FSFpePtr) fpe->private; /* * Don't continue if the fd is -1 (which will be true when the @@ -1472,11 +1475,19 @@ fs_wakeup(FontPathElementPtr fpe, unsigned long *mask) */ if ((conn->blockState & FS_RECONNECTING)) _fs_check_reconnect (conn); - else if ((conn->blockState & FS_COMPLETE_REPLY) || - (conn->fs_fd != -1 && FD_ISSET(conn->fs_fd, LastSelectMask))) + else if ((conn->fs_fd != -1)) fs_read_reply (fpe, 0); +} + +static int +fs_wakeup(FontPathElementPtr fpe) +{ + FSFpePtr conn = (FSFpePtr) fpe->private; + if (conn->blockState & (FS_PENDING_REPLY|FS_BROKEN_CONNECTION|FS_BROKEN_WRITE)) _fs_do_blocked (conn); + if (conn->blockState & FS_COMPLETE_REPLY) + fs_read_reply (fpe, 0); #ifdef DEBUG { FSBlockDataPtr blockrec; @@ -2160,11 +2171,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) @@ -2392,7 +2398,7 @@ fs_read_list(FontPathElementPtr fpe, FSBlockDataPtr blockrec) err = BadFontName; break; } - err = AddFontNamesName(blist->names, data, length); + err = xfont2_add_font_names_name(blist->names, data, length); if (err != Successful) break; data += length; @@ -2621,7 +2627,7 @@ fs_read_list_info(FontPathElementPtr fpe, FSBlockDataPtr blockrec) /* disable this font server until we've processed this response */ _fs_unmark_block (conn, FS_COMPLETE_REPLY); - FD_CLR(conn->fs_fd, &_fs_fd_mask); + conn_stop_listening(conn); done: _fs_done_read (conn, rep->length << 2); return err; @@ -2724,7 +2730,7 @@ fs_next_list_with_info(pointer client, FontPathElementPtr fpe, *numFonts = binfo->remaining; /* Restart reply processing from this font server */ - FD_SET(conn->fs_fd, &_fs_fd_mask); + conn_start_listening(conn); if (fs_reply_ready (conn)) _fs_mark_block (conn, FS_COMPLETE_REPLY); @@ -2887,7 +2893,7 @@ _fs_check_connect (FSFpePtr conn) switch (ret) { case FSIO_READY: conn->fs_fd = _FontTransGetConnectionNumber (conn->trans_conn); - FD_SET (conn->fs_fd, &_fs_fd_mask); + conn_start_listening(conn); break; case FSIO_BLOCK: break; @@ -3228,7 +3234,7 @@ _fs_close_server (FSFpePtr conn) } if (conn->fs_fd >= 0) { - FD_CLR (conn->fs_fd, &_fs_fd_mask); + conn_stop_listening(conn); conn->fs_fd = -1; } conn->fs_conn_state = FS_CONN_UNCONNECTED; @@ -3362,7 +3368,7 @@ _fs_start_reconnect (FSFpePtr conn) static FSFpePtr -_fs_init_conn (const char *servername) +_fs_init_conn (const char *servername, FontPathElementPtr fpe) { FSFpePtr conn; @@ -3377,6 +3383,7 @@ _fs_init_conn (const char *servername) conn->servername = (char *) (conn + 1); conn->fs_conn_state = FS_CONN_UNCONNECTED; conn->fs_fd = -1; + conn->fpe = fpe; strcpy (conn->servername, servername); return conn; } @@ -3395,22 +3402,27 @@ _fs_free_conn (FSFpePtr conn) * called at server init time */ +static const xfont2_fpe_funcs_rec fs_fpe_funcs = { + .version = XFONT2_FPE_FUNCS_VERSION, + .name_check = fs_name_check, + .init_fpe = fs_init_fpe, + .free_fpe = fs_free_fpe, + .reset_fpe = fs_reset_fpe, + .open_font = fs_open_font, + .close_font = fs_close_font, + .list_fonts = fs_list_fonts, + .start_list_fonts_with_info = fs_start_list_with_info, + .list_next_font_with_info = fs_next_list_with_info, + .wakeup_fpe = fs_wakeup, + .client_died = fs_client_died, + .load_glyphs = _fs_load_glyphs, + .start_list_fonts_and_aliases = (StartLaFunc) 0, + .list_next_font_or_alias = (NextLaFunc) 0, + .set_path_hook = (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..a5fe5b0 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_ @@ -65,7 +66,6 @@ static int padlength[4] = {0, 3, 2, 1}; -fd_set _fs_fd_mask; static int _fs_resize (FSBufPtr buf, long size); diff --git a/src/fc/fsio.h b/src/fc/fsio.h index fa1e7d8..9d0255a 100644 --- a/src/fc/fsio.h +++ b/src/fc/fsio.h @@ -81,7 +81,9 @@ typedef struct _fs_buf { /* FS specific font FontPathElement data */ typedef struct _fs_fpe_data { FSFpePtr next; /* list of all active fs fpes */ + FontPathElementPtr fpe; /* Back pointer to FPE */ int fs_fd; /* < 0 when not running */ + Bool fs_listening; /* Listening for input */ int fs_conn_state; /* connection state */ int current_seq; char *servername; diff --git a/src/fc/fstrans.c b/src/fc/fstrans.c index 9b21864..66bc978 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..2087232 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 xfont2_fpe_funcs_rec catalogue_fpe_funcs = { + .version = XFONT2_FPE_FUNCS_VERSION, + .name_check = CatalogueNameCheck, + .init_fpe = CatalogueInitFPE, + .free_fpe = CatalogueFreeFPE, + .reset_fpe = CatalogueResetFPE, + .open_font = CatalogueOpenFont, + .close_font = CatalogueCloseFont, + .list_fonts = CatalogueListFonts, + .start_list_fonts_with_info = CatalogueStartListFontsWithInfo, + .list_next_font_with_info = CatalogueListNextFontWithInfo, + .wakeup_fpe = 0, + .client_died = 0, + .load_glyphs = 0, + .start_list_fonts_and_aliases = CatalogueStartListFontsAndAliases, + .list_next_font_or_alias = CatalogueListNextFontOrAlias, + .set_path_hook = 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..4ce2473 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> @@ -513,7 +514,7 @@ FontFileFindNamesInScalableDir(FontTablePtr table, FontNamePtr pat, int max, { name = &table->entries[i].name; if (newmax) *newmax = max - 1; - return AddFontNamesName(names, name->name, name->length); + return xfont2_add_font_names_name(names, name->name, name->length); } start = i; stop = i + 1; @@ -550,7 +551,7 @@ FontFileFindNamesInScalableDir(FontTablePtr table, FontNamePtr pat, int max, continue; } - ret = AddFontNamesName(names, fname->name.name, fname->name.length); + ret = xfont2_add_font_names_name(names, fname->name.name, fname->name.length); if (ret != Successful) goto bail; @@ -562,7 +563,7 @@ FontFileFindNamesInScalableDir(FontTablePtr table, FontNamePtr pat, int max, { names->length[names->nnames - 1] = -names->length[names->nnames - 1]; - ret = AddFontNamesName(names, fname->u.alias.resolved, + ret = xfont2_add_font_names_name(names, fname->u.alias.resolved, strlen(fname->u.alias.resolved)); if (ret != Successful) goto bail; 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..b2f1a6f 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 @@ -629,7 +630,7 @@ _FontFileAddScalableNames(FontNamesPtr names, FontNamesPtr scaleNames, Otherwise we're done. */ if (scaleNames->length[i] >= 0) { - (void) AddFontNamesName (names, nameChars, + (void) xfont2_add_font_names_name (names, nameChars, strlen (nameChars)); /* If our original pattern matches the name from the table and that name doesn't duplicate what @@ -641,7 +642,7 @@ _FontFileAddScalableNames(FontNamesPtr names, FontNamesPtr scaleNames, *max) { --*max; - (void) AddFontNamesName (names, scaleNames->names[i], + (void) xfont2_add_font_names_name (names, scaleNames->names[i], scaleNames->length[i]); } } @@ -655,11 +656,11 @@ _FontFileAddScalableNames(FontNamesPtr names, FontNamesPtr scaleNames, scaleNames->names[++i], &aliasName, vals)) { - (void) AddFontNamesName (names, nameChars, + (void) xfont2_add_font_names_name (names, nameChars, strlen (nameChars)); names->length[names->nnames - 1] = -names->length[names->nnames - 1]; - (void) AddFontNamesName (names, aliasName, + (void) xfont2_add_font_names_name (names, aliasName, strlen (aliasName)); /* If our original pattern matches the name from the table and that name doesn't duplicate what @@ -671,12 +672,12 @@ _FontFileAddScalableNames(FontNamesPtr names, FontNamesPtr scaleNames, *max) { --*max; - (void) AddFontNamesName (names, + (void) xfont2_add_font_names_name (names, scaleNames->names[i - 1], -scaleNames->length[i - 1]); names->length[names->nnames - 1] = -names->length[names->nnames - 1]; - (void) AddFontNamesName (names, aliasName, + (void) xfont2_add_font_names_name (names, aliasName, strlen (aliasName)); } } @@ -733,7 +734,7 @@ _FontFileListFonts (pointer client, FontPathElementPtr fpe, them to the output */ /* Scalable names... */ - scaleNames = MakeFontNamesRecord (0); + scaleNames = xfont2_make_font_names_record (0); if (!scaleNames) { if (ranges) free(ranges); @@ -747,10 +748,10 @@ _FontFileListFonts (pointer client, FontPathElementPtr fpe, _FontFileAddScalableNames(names, scaleNames, &lowerName, zeroChars, &vals, ranges, nranges, &max); - FreeFontNames (scaleNames); + xfont2_free_font_names (scaleNames); /* Scalable aliases... */ - scaleNames = MakeFontNamesRecord (0); + scaleNames = xfont2_make_font_names_record (0); if (!scaleNames) { if (ranges) free(ranges); @@ -764,7 +765,7 @@ _FontFileListFonts (pointer client, FontPathElementPtr fpe, _FontFileAddScalableNames(names, scaleNames, &lowerName, zeroChars, &vals, ranges, nranges, &max); - FreeFontNames (scaleNames); + xfont2_free_font_names (scaleNames); if (ranges) free(ranges); } @@ -811,7 +812,7 @@ FontFileStartListFonts(pointer client, FontPathElementPtr fpe, data = malloc (sizeof *data); if (!data) return AllocError; - data->names = MakeFontNamesRecord (0); + data->names = xfont2_make_font_names_record (0); if (!data->names) { free (data); @@ -821,7 +822,7 @@ FontFileStartListFonts(pointer client, FontPathElementPtr fpe, max, data->names, mark_aliases); if (ret != Successful) { - FreeFontNames (data->names); + xfont2_free_font_names (data->names); free (data); return ret; } @@ -1049,7 +1050,7 @@ FontFileListNextFontWithInfo(pointer client, FontPathElementPtr fpe, if (data->current == data->names->nnames) { - FreeFontNames (data->names); + xfont2_free_font_names (data->names); free (data); return BadFontName; } @@ -1085,7 +1086,7 @@ FontFileListNextFontOrAlias(pointer client, FontPathElementPtr fpe, if (data->current == data->names->nnames) { - FreeFontNames (data->names); + xfont2_free_font_names (data->names); free (data); return BadFontName; } @@ -1115,22 +1116,27 @@ FontFileListNextFontOrAlias(pointer client, FontPathElementPtr fpe, return ret; } +static const xfont2_fpe_funcs_rec fontfile_fpe_funcs = { + .version = XFONT2_FPE_FUNCS_VERSION, + .name_check = FontFileNameCheck, + .init_fpe = FontFileInitFPE, + .free_fpe = FontFileFreeFPE, + .reset_fpe = FontFileResetFPE, + .open_font = FontFileOpenFont, + .close_font = FontFileCloseFont, + .list_fonts = FontFileListFonts, + .start_list_fonts_with_info = FontFileStartListFontsWithInfo, + .list_next_font_with_info = FontFileListNextFontWithInfo, + .wakeup_fpe = 0, + .client_died = 0, + .load_glyphs = 0, + .start_list_fonts_and_aliases = FontFileStartListFontsAndAliases, + .list_next_font_or_alias = FontFileListNextFontOrAlias, + .set_path_hook = 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..82c8ca3 --- /dev/null +++ b/src/stubs/atom.c @@ -0,0 +1,224 @@ +/* + + 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..b083dd4 --- /dev/null +++ b/src/stubs/libxfontstubs.c @@ -0,0 +1,198 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "libxfontint.h" + +static xfont2_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_handlers2(FontPathElementPtr fpe, + FontBlockHandlerProcPtr block_handler) +{ + if (_f) + return _f->init_fs_handlers(fpe, block_handler); + return Successful; +} + +int +register_fpe_funcs(const xfont2_fpe_funcs_rec *funcs) +{ + if (_f) + return _f->register_fpe_funcs(funcs); + return 0; +} + +void +remove_fs_handlers2(FontPathElementPtr fpe, + FontBlockHandlerProcPtr 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; +} + + +int +add_fs_fd(int fd, FontFdHandlerProcPtr handler, void *data) +{ + if (_f) + return _f->add_fs_fd(fd, handler, data); + return 0; +} + +void +remove_fs_fd(int fd) +{ + if (_f) + _f->remove_fs_fd(fd); +} + +void +adjust_fs_wait_for_delay(void *wt, unsigned long newdelay) +{ + if (_f) + _f->adjust_fs_wait_for_delay(wt, newdelay); +} + +int +xfont2_init(xfont2_client_funcs_rec const *client_funcs) +{ + _f = client_funcs; + + ResetFontPrivateIndex(); + + register_fpe_functions(); + + return Successful; +} 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 9e71806..0000000 --- a/src/stubs/stubs.h +++ /dev/null @@ -1,79 +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(__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) - -extern int (*__client_auth_generation)(ClientPtr); -extern Bool (*__ClientSignal)(ClientPtr); -extern void (*__DeleteFontClientID)(Font); -extern void (*__VErrorF)(const char *, va_list); -extern FontPtr (*__find_old_font)(FSID); -extern FontResolutionPtr (*__GetClientResolutions)(int *); -extern int (*__GetDefaultPointSize)(void); -extern Font (*__GetNewFontClientID)(void); -extern unsigned long (*__GetTimeInMillis)(void); -extern int (*__init_fs_handlers)(FontPathElementPtr, BlockHandlerProcPtr); -extern int (*__RegisterFPEFunctions)(NameCheckFunc, InitFpeFunc, FreeFpeFunc, - ResetFpeFunc, OpenFontFunc, CloseFontFunc, ListFontsFunc, - StartLfwiFunc, NextLfwiFunc, WakeupFpeFunc, ClientDiedFunc, - LoadGlyphsFunc, StartLaFunc, NextLaFunc, SetPathFunc); -extern void (*__remove_fs_handlers)(FontPathElementPtr, BlockHandlerProcPtr, Bool); -extern void **__ptr_serverClient; -extern int (*__set_font_authorizations)(char **, int *, ClientPtr); -extern int (*__StoreFontClientFont)(FontPtr, Font); -extern Atom (*__MakeAtom)(const char *, unsigned, int); -extern int (*__ValidAtom)(Atom); -extern char *(*__NameForAtom)(Atom); -extern unsigned long *__ptr_serverGeneration; -extern 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 - -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..b292480 100644 --- a/src/util/fontnames.c +++ b/src/util/fontnames.c @@ -34,11 +34,12 @@ 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> void -FreeFontNames(FontNamesPtr pFN) +xfont2_free_font_names(FontNamesPtr pFN) { int i; @@ -53,7 +54,7 @@ FreeFontNames(FontNamesPtr pFN) } FontNamesPtr -MakeFontNamesRecord(unsigned int size) +xfont2_make_font_names_record(unsigned size) { FontNamesPtr pFN; @@ -82,7 +83,9 @@ MakeFontNamesRecord(unsigned int size) } int -AddFontNamesName(FontNamesPtr names, char *name, int length) +xfont2_add_font_names_name(FontNamesPtr names, + char *name, + int length) { int index = names->nnames; char *nelt; diff --git a/src/util/fontutil.c b/src/util/fontutil.c index 2c5ea6f..d1b845b 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> @@ -44,25 +45,14 @@ from The Open Group. static int defaultGlyphCachingMode = DEFAULT_GLYPH_CACHING_MODE; int glyphCachingMode = DEFAULT_GLYPH_CACHING_MODE; -void -GetGlyphs(FontPtr font, - unsigned long count, - unsigned char *chars, - FontEncoding fontEncoding, - unsigned long *glyphcount, /* RETURN */ - CharInfoPtr *glyphs) /* RETURN */ -{ - (*font->get_glyphs) (font, count, chars, fontEncoding, glyphcount, glyphs); -} - #define MIN(a,b) ((a)<(b)?(a):(b)) #define MAX(a,b) ((a)>(b)?(a):(b)) void -QueryGlyphExtents(FontPtr pFont, - CharInfoPtr *charinfo, - unsigned long count, - ExtentInfoRec *info) +xfont2_query_glyph_extents(FontPtr pFont, + CharInfoPtr *charinfo, + unsigned long count, + ExtentInfoRec *info) { register unsigned long i; xCharInfo *pCI; @@ -131,10 +121,10 @@ QueryGlyphExtents(FontPtr pFont, } Bool -QueryTextExtents(FontPtr pFont, - unsigned long count, - unsigned char *chars, - ExtentInfoRec *info) +xfont2_query_text_extents(FontPtr pFont, + unsigned long count, + unsigned char *chars, + ExtentInfoRec *info) { xCharInfo **charinfo; unsigned long n; @@ -182,15 +172,15 @@ QueryTextExtents(FontPtr pFont, } cm = pFont->info.constantMetrics; pFont->info.constantMetrics = FALSE; - QueryGlyphExtents(pFont, (CharInfoPtr*) charinfo + firstReal, - n - firstReal, info); + xfont2_query_glyph_extents(pFont, (CharInfoPtr*) charinfo + firstReal, + n - firstReal, info); pFont->info.constantMetrics = cm; free(charinfo); return TRUE; } Bool -ParseGlyphCachingMode(char *str) +xfont2_parse_glyph_caching_mode(char *str) { if (!strcmp(str, "none")) defaultGlyphCachingMode = CACHING_OFF; else if (!strcmp(str, "all")) defaultGlyphCachingMode = CACHE_ALL_GLYPHS; @@ -200,7 +190,7 @@ ParseGlyphCachingMode(char *str) } void -InitGlyphCaching(void) +xfont2_init_glyph_caching(void) { /* Set glyphCachingMode to the mode the server hopes to support. DDX drivers that do not support the requested level @@ -215,7 +205,7 @@ InitGlyphCaching(void) * caching they can support. */ void -SetGlyphCachingMode(int newmode) +xfont2_set_glyph_caching_mode(int newmode) { if ( (glyphCachingMode > newmode) && (newmode >= 0) ) glyphCachingMode = newmode; diff --git a/src/util/fontxlfd.c b/src/util/fontxlfd.c index 99a3679..0bd1140 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..e76f1f4 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> @@ -55,15 +56,15 @@ typedef struct _FontPatternCacheEntry { FontPtr pFont; /* associated font */ } FontPatternCacheEntryRec, *FontPatternCacheEntryPtr; -typedef struct _FontPatternCache { +typedef struct _xfont2_pattern_cache { FontPatternCacheEntryPtr buckets[NBUCKETS]; FontPatternCacheEntryRec entries[NENTRIES]; FontPatternCacheEntryPtr free; -} FontPatternCacheRec; +} xfont2_pattern_cache_rec; /* Empty cache (for rehash) */ void -EmptyFontPatternCache (FontPatternCachePtr cache) +xfont2_empty_font_pattern_cache(xfont2_pattern_cache_ptr cache) { int i; @@ -83,10 +84,10 @@ EmptyFontPatternCache (FontPatternCachePtr cache) } /* Create and initialize cache */ -FontPatternCachePtr -MakeFontPatternCache (void) +xfont2_pattern_cache_ptr +xfont2_make_font_pattern_cache(void) { - FontPatternCachePtr cache; + xfont2_pattern_cache_ptr cache; int i; cache = malloc (sizeof *cache); if (!cache) @@ -96,13 +97,13 @@ MakeFontPatternCache (void) cache->entries[i].pattern = 0; cache->entries[i].pFont = 0; } - EmptyFontPatternCache (cache); + xfont2_empty_font_pattern_cache (cache); return cache; } /* toss cache */ void -FreeFontPatternCache (FontPatternCachePtr cache) +xfont2_free_font_pattern_cache(xfont2_pattern_cache_ptr cache) { int i; @@ -127,10 +128,10 @@ Hash (const char *string, int len) /* add entry */ void -CacheFontPattern (FontPatternCachePtr cache, - const char *pattern, - int patlen, - FontPtr pFont) +xfont2_cache_font_pattern(xfont2_pattern_cache_ptr cache, + const char * pattern, + int patlen, + FontPtr pFont) { FontPatternCacheEntryPtr e; char *newpat; @@ -173,9 +174,9 @@ CacheFontPattern (FontPatternCachePtr cache, /* find matching entry */ FontPtr -FindCachedFontPattern (FontPatternCachePtr cache, - const char *pattern, - int patlen) +xfont2_find_cached_font_pattern(xfont2_pattern_cache_ptr cache, + const char * pattern, + int patlen) { int hash; int i; @@ -195,8 +196,8 @@ FindCachedFontPattern (FontPatternCachePtr cache, } void -RemoveCachedFontPattern (FontPatternCachePtr cache, - FontPtr pFont) +xfont2_remove_cached_font_pattern(xfont2_pattern_cache_ptr cache, + FontPtr pFont) { FontPatternCacheEntryPtr e; int i; diff --git a/src/util/private.c b/src/util/private.c index e55e193..92075c2 100644 --- a/src/util/private.c +++ b/src/util/private.c @@ -31,13 +31,14 @@ 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> static int _FontPrivateAllocateIndex = 0; int -AllocateFontPrivateIndex (void) +xfont2_allocate_font_private_index (void) { return _FontPrivateAllocateIndex++; } @@ -77,7 +78,7 @@ ResetFontPrivateIndex (void) } Bool -_FontSetNewPrivate (FontPtr pFont, int n, pointer ptr) +xfont2_font_set_private(FontPtr pFont, int n, pointer ptr) { pointer *new; 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 */ |