[PATCH xserver 10/24] dix: Switch to the libXfont2 API (v2)

Daniel Martin consume.noise at gmail.com
Mon Sep 21 00:58:58 PDT 2015


On 21 September 2015 at 08:16, Keith Packard <keithp at keithp.com> wrote:
> This new libXfont API eliminates exposing internal X server symbols to
> the font library, replacing those with a struct full of the entire API
> needed to use that library.
>
> v2: Use libXfont2 instead of libXfont_2
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> ---
>  Xext/xf86bigfont.c     |   4 +-
>  configure.ac           |   2 +-
>  dix/dispatch.c         |   4 +-
>  dix/dixfonts.c         | 323 +++++++++++++++++++++++++++++--------------------
>  dix/main.c             |   4 +-
>  glamor/glamor_font.c   |   6 +-
>  hw/dmx/dmxfont.c       |   9 +-
>  hw/dmx/dmxscrinit.c    |   4 +-
>  hw/xfree86/sdksyms.sh  |   1 -
>  hw/xnest/Font.c        |   7 +-
>  hw/xnest/Init.c        |   3 +-
>  include/dixfont.h      |  18 +--
>  include/dixfontstr.h   |   1 +
>  include/dixfontstubs.h |  43 -------
>  mi/miglblt.c           |   6 +-
>  miext/damage/damage.c  |   4 +-
>  os/utils.c             |   4 +-
>  17 files changed, 231 insertions(+), 212 deletions(-)
>  delete mode 100644 include/dixfontstubs.h
>
> diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c
> index 95b5371..682d84f 100644
> --- a/Xext/xf86bigfont.c
> +++ b/Xext/xf86bigfont.c
> @@ -439,7 +439,7 @@ ProcXF86BigfontQueryFont(ClientPtr client)
>  #ifdef HAS_SHM
>              if (pDesc && !badSysCall) {
>                  *(CARD32 *) (pCI + nCharInfos) = signature;
> -                if (!FontSetPrivate(pFont, FontShmdescIndex, pDesc)) {
> +                if (!xfont2_font_set_private(pFont, FontShmdescIndex, pDesc)) {
>                      shmdealloc(pDesc);
>                      return BadAlloc;
>                  }
> @@ -723,7 +723,7 @@ XFree86BigfontExtensionInit(void)
>              + (unsigned int) (65536.0 / (RAND_MAX + 1.0) * rand());
>          /* fprintf(stderr, "signature = 0x%08X\n", signature); */
>
> -        FontShmdescIndex = AllocateFontPrivateIndex();
> +        FontShmdescIndex = xfont2_allocate_font_private_index();
>
>  #if !defined(CSRG_BASED) && !defined(__CYGWIN__)
>          pagesize = SHMLBA;
> diff --git a/configure.ac b/configure.ac
> index ec6b1a7..9520b8d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -794,7 +794,7 @@ LIBEGL="egl"
>  LIBGBM="gbm >= 10.2.0"
>  LIBGL="gl >= 7.1.0"
>  LIBXEXT="xext >= 1.0.99.4"
> -LIBXFONT="xfont >= 1.4.2"
> +LIBXFONT="xfont2 >= 2.0.0"
>  LIBXI="xi >= 1.2.99.1"
>  LIBXTST="xtst >= 1.0.99.2"
>  LIBPCIACCESS="pciaccess >= 0.12.901"
> diff --git a/dix/dispatch.c b/dix/dispatch.c
> index aa4ec7c..76a5484 100644
> --- a/dix/dispatch.c
> +++ b/dix/dispatch.c
> @@ -108,7 +108,7 @@ int ProcInitialConnection();
>
>  #include "windowstr.h"
>  #include <X11/fonts/fontstruct.h>
> -#include <X11/fonts/fontutil.h>
> +#include <X11/fonts/libxfont2.h>
>  #include "dixfontstr.h"
>  #include "gcstruct.h"
>  #include "selection.h"
> @@ -1291,7 +1291,7 @@ ProcQueryTextExtents(ClientPtr client)
>              return BadLength;
>          length--;
>      }
> -    if (!QueryTextExtents(pFont, length, (unsigned char *) &stuff[1], &info))
> +    if (!xfont2_query_text_extents(pFont, length, (unsigned char *) &stuff[1], &info))
>          return BadAlloc;
>      reply = (xQueryTextExtentsReply) {
>          .type = X_Reply,
> diff --git a/dix/dixfonts.c b/dix/dixfonts.c
> index 19db141..d217d12 100644
> --- a/dix/dixfonts.c
> +++ b/dix/dixfonts.c
> @@ -65,6 +65,7 @@ Equipment Corporation.
>  #include "closestr.h"
>  #include "dixfont.h"
>  #include "xace.h"
> +#include <X11/fonts/libxfont2.h>
>
>  #ifdef XF86BIGFONT
>  #include "xf86bigfontsrv.h"
> @@ -75,7 +76,7 @@ extern FontPtr defaultFont;
>
>  static FontPathElementPtr *font_path_elements = (FontPathElementPtr *) 0;
>  static int num_fpes = 0;
> -static FPEFunctions *fpe_functions = (FPEFunctions *) 0;
> +static xfont2_fpe_funcs_rec const **fpe_functions;
>  static int num_fpe_types = 0;
>
>  static unsigned char *font_path_string;
> @@ -83,7 +84,7 @@ static unsigned char *font_path_string;
>  static int num_slept_fpes = 0;
>  static int size_slept_fpes = 0;
>  static FontPathElementPtr *slept_fpes = (FontPathElementPtr *) 0;
> -static FontPatternCachePtr patternCache;
> +static xfont2_pattern_cache_ptr patternCache;
>
>  static int
>  FontToXError(int err)
> @@ -108,18 +109,18 @@ static int
>  LoadGlyphs(ClientPtr client, FontPtr pfont, unsigned nchars, int item_size,
>             unsigned char *data)
>  {
> -    if (fpe_functions[pfont->fpe->type].load_glyphs)
> -        return (*fpe_functions[pfont->fpe->type].load_glyphs)
> +    if (fpe_functions[pfont->fpe->type]->load_glyphs)
> +        return (*fpe_functions[pfont->fpe->type]->load_glyphs)
>              (client, pfont, 0, nchars, item_size, data);
>      else
>          return Successful;
>  }
>
>  void
> -dixGetGlyphs(FontPtr font, unsigned long count, unsigned char *chars,
> -             FontEncoding fontEncoding,
> -             unsigned long *glyphcount,    /* RETURN */
> -             CharInfoPtr *glyphs)          /* RETURN */
> +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);
>  }
> @@ -206,7 +207,7 @@ FontWakeup(void *data, int count, void *LastSelectMask)
>      /* wake up any fpe's that may be waiting for information */
>      for (i = 0; i < num_slept_fpes; i++) {
>          fpe = slept_fpes[i];
> -        (void) (*fpe_functions[fpe->type].wakeup_fpe) (fpe, LastSelectMask);
> +        (void) (*fpe_functions[fpe->type]->wakeup_fpe) (fpe);
>      }
>  }
>
> @@ -222,7 +223,7 @@ FreeFPE(FontPathElementPtr fpe)
>  {
>      fpe->refcount--;
>      if (fpe->refcount == 0) {
> -        (*fpe_functions[fpe->type].free_fpe) (fpe);
> +        (*fpe_functions[fpe->type]->free_fpe) (fpe);
>          free((void *) fpe->name);
>          free(fpe);
>      }
> @@ -266,14 +267,14 @@ doOpenFont(ClientPtr client, OFclosurePtr c)
>      if (client->clientGone) {
>          if (c->current_fpe < c->num_fpes) {
>              fpe = c->fpe_list[c->current_fpe];
> -            (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +            (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>          }
>          err = Successful;
>          goto bail;
>      }
>      while (c->current_fpe < c->num_fpes) {
>          fpe = c->fpe_list[c->current_fpe];
> -        err = (*fpe_functions[fpe->type].open_font)
> +        err = (*fpe_functions[fpe->type]->open_font)
>              ((void *) client, fpe, c->flags,
>               c->fontname, c->fnamelen, FontFormat,
>               BitmapFormatMaskByte |
> @@ -352,8 +353,8 @@ doOpenFont(ClientPtr client, OFclosurePtr c)
>          goto bail;
>      }
>      if (patternCache && pfont != c->non_cachable_font)
> -        CacheFontPattern(patternCache, c->origFontName, c->origFontNameLen,
> -                         pfont);
> +        xfont2_cache_font_pattern(patternCache, c->origFontName, c->origFontNameLen,
> +                                  pfont);
>   bail:
>      if (err != Successful && c->client != serverClient) {
>          SendErrorToClient(c->client, X_OpenFont, 0,
> @@ -398,7 +399,7 @@ OpenFont(ClientPtr client, XID fid, Mask flags, unsigned lenfname,
>           ** having to create another instance of a font that already exists.
>           */
>
> -        cached = FindCachedFontPattern(patternCache, pfontname, lenfname);
> +        cached = xfont2_find_cached_font_pattern(patternCache, pfontname, lenfname);
>          if (cached && cached->info.cachable) {
>              if (!AddResource(fid, RT_FONT, (void *) cached))
>                  return BadAlloc;
> @@ -460,7 +461,7 @@ CloseFont(void *value, XID fid)
>          return Success;
>      if (--pfont->refcnt == 0) {
>          if (patternCache)
> -            RemoveCachedFontPattern(patternCache, pfont);
> +            xfont2_remove_cached_font_pattern(patternCache, pfont);
>          /*
>           * since the last reference is gone, ask each screen to free any
>           * storage it may have allocated locally for it.
> @@ -476,7 +477,7 @@ CloseFont(void *value, XID fid)
>          XF86BigfontFreeFontShm(pfont);
>  #endif
>          fpe = pfont->fpe;
> -        (*fpe_functions[fpe->type].close_font) (fpe, pfont);
> +        (*fpe_functions[fpe->type]->close_font) (fpe, pfont);
>          FreeFPE(fpe);
>      }
>      return Success;
> @@ -567,7 +568,7 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>      if (client->clientGone) {
>          if (c->current.current_fpe < c->num_fpes) {
>              fpe = c->fpe_list[c->current.current_fpe];
> -            (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +            (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>          }
>          err = Successful;
>          goto bail;
> @@ -580,10 +581,10 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>          fpe = c->fpe_list[c->current.current_fpe];
>          err = Successful;
>
> -        if (!fpe_functions[fpe->type].start_list_fonts_and_aliases) {
> +        if (!fpe_functions[fpe->type]->start_list_fonts_and_aliases) {
>              /* This FPE doesn't support/require list_fonts_and_aliases */
>
> -            err = (*fpe_functions[fpe->type].list_fonts)
> +            err = (*fpe_functions[fpe->type]->list_fonts)
>                  ((void *) c->client, fpe, c->current.pattern,
>                   c->current.patlen, c->current.max_names - c->names->nnames,
>                   c->names);
> @@ -608,7 +609,7 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>                 the FPEs.  */
>
>              if (!c->current.list_started) {
> -                err = (*fpe_functions[fpe->type].start_list_fonts_and_aliases)
> +                err = (*fpe_functions[fpe->type]->start_list_fonts_and_aliases)
>                      ((void *) c->client, fpe, c->current.pattern,
>                       c->current.patlen, c->current.max_names - c->names->nnames,
>                       &c->current.private);
> @@ -626,7 +627,7 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>                  char *tmpname;
>
>                  name = 0;
> -                err = (*fpe_functions[fpe->type].list_next_font_or_alias)
> +                err = (*fpe_functions[fpe->type]->list_next_font_or_alias)
>                      ((void *) c->client, fpe, &name, &namelen, &tmpname,
>                       &resolvedlen, c->current.private);
>                  if (err == Suspended) {
> @@ -647,11 +648,11 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>              if (err == Successful) {
>                  if (c->haveSaved) {
>                      if (c->savedName)
> -                        (void) AddFontNamesName(c->names, c->savedName,
> +                        (void) xfont2_add_font_names_name(c->names, c->savedName,
>                                                  c->savedNameLen);
>                  }
>                  else
> -                    (void) AddFontNamesName(c->names, name, namelen);
> +                    (void) xfont2_add_font_names_name(c->names, name, namelen);
>              }
>
>              /*
> @@ -676,7 +677,7 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>                      int tmpnamelen;
>
>                      tmpname = 0;
> -                    (void) (*fpe_functions[fpe->type].list_next_font_or_alias)
> +                    (void) (*fpe_functions[fpe->type]->list_next_font_or_alias)
>                          ((void *) c->client, fpe, &tmpname, &tmpnamelen,
>                           &tmpname, &tmpnamelen, c->current.private);
>                      if (--aliascount <= 0) {
> @@ -782,7 +783,7 @@ doListFontsAndAliases(ClientPtr client, LFclosurePtr c)
>          FreeFPE(c->fpe_list[i]);
>      free(c->fpe_list);
>      free(c->savedName);
> -    FreeFontNames(names);
> +    xfont2_free_font_names(names);
>      free(c);
>      free(resolved);
>      return TRUE;
> @@ -815,7 +816,7 @@ ListFonts(ClientPtr client, unsigned char *pattern, unsigned length,
>          free(c);
>          return BadAlloc;
>      }
> -    c->names = MakeFontNamesRecord(max_names < 100 ? max_names : 100);
> +    c->names = xfont2_make_font_names_record(max_names < 100 ? max_names : 100);
>      if (!c->names) {
>          free(c->fpe_list);
>          free(c);
> @@ -858,7 +859,7 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
>      if (client->clientGone) {
>          if (c->current.current_fpe < c->num_fpes) {
>              fpe = c->fpe_list[c->current.current_fpe];
> -            (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +            (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>          }
>          err = Successful;
>          goto bail;
> @@ -870,7 +871,7 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
>          fpe = c->fpe_list[c->current.current_fpe];
>          err = Successful;
>          if (!c->current.list_started) {
> -            err = (*fpe_functions[fpe->type].start_list_fonts_with_info)
> +            err = (*fpe_functions[fpe->type]->start_list_fonts_with_info)
>                  (client, fpe, c->current.pattern, c->current.patlen,
>                   c->current.max_names, &c->current.private);
>              if (err == Suspended) {
> @@ -885,7 +886,7 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
>          if (err == Successful) {
>              name = 0;
>              pFontInfo = &fontInfo;
> -            err = (*fpe_functions[fpe->type].list_next_font_with_info)
> +            err = (*fpe_functions[fpe->type]->list_next_font_with_info)
>                  (client, fpe, &name, &namelen, &pFontInfo,
>                   &numFonts, c->current.private);
>              if (err == Suspended) {
> @@ -915,7 +916,7 @@ doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
>
>                  tmpname = 0;
>                  tmpFontInfo = &fontInfo;
> -                (void) (*fpe_functions[fpe->type].list_next_font_with_info)
> +                (void) (*fpe_functions[fpe->type]->list_next_font_with_info)
>                      (client, fpe, &tmpname, &tmpnamelen, &tmpFontInfo,
>                       &numFonts, c->current.private);
>                  if (--aliascount <= 0) {
> @@ -1102,7 +1103,7 @@ doPolyText(ClientPtr client, PTclosurePtr c)
>
>      if (client->clientGone) {
>          fpe = c->pGC->font->fpe;
> -        (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +        (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>
>          if (ClientIsAsleep(client)) {
>              /* Client has died, but we cannot bail out right now.  We
> @@ -1128,7 +1129,7 @@ doPolyText(ClientPtr client, PTclosurePtr c)
>                 the FPE code to clean up after client and avoid further
>                 rendering while we clean up after ourself.  */
>              fpe = c->pGC->font->fpe;
> -            (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +            (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>              c->pDraw = (DrawablePtr) 0;
>          }
>      }
> @@ -1380,7 +1381,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
>
>      if (client->clientGone) {
>          fpe = c->pGC->font->fpe;
> -        (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +        (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>          err = Success;
>          goto bail;
>      }
> @@ -1394,7 +1395,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
>              /* Our drawable has disappeared.  Treat like client died... ask
>                 the FPE code to clean up after client. */
>              fpe = c->pGC->font->fpe;
> -            (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +            (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>              err = Success;
>              goto bail;
>          }
> @@ -1520,7 +1521,7 @@ DetermineFPEType(const char *pathname)
>      int i;
>
>      for (i = 0; i < num_fpe_types; i++) {
> -        if ((*fpe_functions[i].name_check) (pathname))
> +        if ((*fpe_functions[i]->name_check) (pathname))
>              return i;
>      }
>      return -1;
> @@ -1581,8 +1582,8 @@ SetFontPathElements(int npaths, unsigned char *paths, int *bad, Bool persist)
>          return BadAlloc;
>      }
>      for (i = 0; i < num_fpe_types; i++) {
> -        if (fpe_functions[i].set_path_hook)
> -            (*fpe_functions[i].set_path_hook) ();
> +        if (fpe_functions[i]->set_path_hook)
> +            (*fpe_functions[i]->set_path_hook) ();
>      }
>      for (i = 0; i < npaths; i++) {
>          len = (unsigned int) (*cp++);
> @@ -1601,7 +1602,7 @@ SetFontPathElements(int npaths, unsigned char *paths, int *bad, Bool persist)
>               */
>              fpe = find_existing_fpe(font_path_elements, num_fpes, cp, len);
>              if (fpe) {
> -                err = (*fpe_functions[fpe->type].reset_fpe) (fpe);
> +                err = (*fpe_functions[fpe->type]->reset_fpe) (fpe);
>                  if (err == Successful) {
>                      UseFPE(fpe);        /* since it'll be decref'd later when freed
>                                           * from the old list */
> @@ -1633,7 +1634,7 @@ SetFontPathElements(int npaths, unsigned char *paths, int *bad, Bool persist)
>                  if (fpe->type == -1)
>                      err = BadValue;
>                  else
> -                    err = (*fpe_functions[fpe->type].init_fpe) (fpe);
> +                    err = (*fpe_functions[fpe->type]->init_fpe) (fpe);
>                  if (err != Successful) {
>                      if (persist) {
>                          DebugF
> @@ -1658,7 +1659,7 @@ SetFontPathElements(int npaths, unsigned char *paths, int *bad, Bool persist)
>      FreeFontPath(font_path_elements, num_fpes, FALSE);
>      font_path_elements = fplist;
>      if (patternCache)
> -        EmptyFontPatternCache(patternCache);
> +        xfont2_empty_font_pattern_cache(patternCache);
>      num_fpes = valid_paths;
>
>      return Success;
> @@ -1799,31 +1800,47 @@ DeleteClientFontStuff(ClientPtr client)
>
>      for (i = 0; i < num_fpes; i++) {
>          fpe = font_path_elements[i];
> -        if (fpe_functions[fpe->type].client_died)
> -            (*fpe_functions[fpe->type].client_died) ((void *) client, fpe);
> +        if (fpe_functions[fpe->type]->client_died)
> +            (*fpe_functions[fpe->type]->client_died) ((void *) client, fpe);
>      }
>  }
>
> -void
> -InitFonts(void)
> +static int
> +register_fpe_funcs(const xfont2_fpe_funcs_rec *funcs)
>  {
> -    patternCache = MakeFontPatternCache();
> +    xfont2_fpe_funcs_rec const **new;
>
> -    ResetFontPrivateIndex();
> +    /* grow the list */
> +    new = reallocarray(fpe_functions, num_fpe_types + 1, sizeof(xfont2_fpe_funcs_ptr));
> +    if (!new)
> +        return -1;
> +    fpe_functions = new;
> +
> +    fpe_functions[num_fpe_types] = funcs;
>
> -    register_fpe_functions();
> +    return num_fpe_types++;
>  }
>
> -_X_EXPORT
> -int
> -GetDefaultPointSize(void)
> +static unsigned long
> +get_server_generation(void)
> +{
> +    return serverGeneration;
> +}
> +
> +static void *
> +get_server_client(void)
> +{
> +    return serverClient;
> +}
> +
> +static int
> +get_default_point_size(void)
>  {
>      return 120;
>  }
>
> -_X_EXPORT
> -FontResolutionPtr
> -GetClientResolutions(int *num)
> +static FontResolutionPtr
> +get_client_resolutions(int *num)
>  {
>      static struct _FontResolution res;
>      ScreenPtr pScreen;
> @@ -1848,62 +1865,11 @@ GetClientResolutions(int *num)
>      return &res;
>  }
>
> -/*
> - * returns the type index of the new fpe
> - *
> - * should be called (only once!) by each type of fpe when initialized
> - */
> -
> -_X_EXPORT
> -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)
> -{
> -    FPEFunctions *new;
> -
> -    /* grow the list */
> -    new = reallocarray(fpe_functions, num_fpe_types + 1, sizeof(FPEFunctions));
> -    if (!new)
> -        return -1;
> -    fpe_functions = new;
> -
> -    fpe_functions[num_fpe_types].name_check = name_func;
> -    fpe_functions[num_fpe_types].open_font = open_func;
> -    fpe_functions[num_fpe_types].close_font = close_func;
> -    fpe_functions[num_fpe_types].wakeup_fpe = wakeup_func;
> -    fpe_functions[num_fpe_types].list_fonts = list_func;
> -    fpe_functions[num_fpe_types].start_list_fonts_with_info = start_lfwi_func;
> -    fpe_functions[num_fpe_types].list_next_font_with_info = next_lfwi_func;
> -    fpe_functions[num_fpe_types].init_fpe = init_func;
> -    fpe_functions[num_fpe_types].free_fpe = free_func;
> -    fpe_functions[num_fpe_types].reset_fpe = reset_func;
> -    fpe_functions[num_fpe_types].client_died = client_died;
> -    fpe_functions[num_fpe_types].load_glyphs = load_glyphs;
> -    fpe_functions[num_fpe_types].start_list_fonts_and_aliases =
> -        start_list_alias_func;
> -    fpe_functions[num_fpe_types].list_next_font_or_alias = next_list_alias_func;
> -    fpe_functions[num_fpe_types].set_path_hook = set_path_func;
> -
> -    return num_fpe_types++;
> -}
> -
>  void
>  FreeFonts(void)
>  {
>      if (patternCache) {
> -        FreeFontPatternCache(patternCache);
> +        xfont2_free_font_pattern_cache(patternCache);
>          patternCache = 0;
>      }
>      FreeFontPath(font_path_elements, num_fpes, TRUE);
> @@ -1911,12 +1877,12 @@ FreeFonts(void)
>      num_fpes = 0;
>      free(fpe_functions);
>      num_fpe_types = 0;
> -    fpe_functions = (FPEFunctions *) 0;
> +    fpe_functions = NULL;
>  }
>
>  /* convenience functions for FS interface */
>
> -FontPtr
> +static FontPtr
>  find_old_font(XID id)
>  {
>      void *pFont;
> @@ -1925,30 +1891,26 @@ find_old_font(XID id)
>      return (FontPtr) pFont;
>  }
>
> -_X_EXPORT
> -Font
> -GetNewFontClientID(void)
> +static Font
> +get_new_font_client_id(void)
>  {
>      return FakeClientID(0);
>  }
>
> -_X_EXPORT
> -int
> -StoreFontClientFont(FontPtr pfont, Font id)
> +static int
> +store_font_Client_font(FontPtr pfont, Font id)
>  {
>      return AddResource(id, RT_NONE, (void *) pfont);
>  }
>
> -_X_EXPORT
> -void
> -DeleteFontClientID(Font id)
> +static void
> +delete_font_client_id(Font id)
>  {
>      FreeResource(id, RT_NONE);
>  }
>
> -_X_EXPORT
> -int
> -client_auth_generation(ClientPtr client)
> +static int
> +_client_auth_generation(ClientPtr client)

This.

>  {
>      return 0;
>  }
> @@ -1956,9 +1918,73 @@ client_auth_generation(ClientPtr client)
>  static int fs_handlers_installed = 0;
>  static unsigned int last_server_gen;
>
> -_X_EXPORT
> -int
> -init_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler)
> +static void
> +fs_block_handler(void *blockData, OSTimePtr timeout, void *readmask)
> +{
> +    FontBlockHandlerProcPtr block_handler = blockData;
> +
> +    (*block_handler)(timeout);
> +}
> +
> +struct fs_fd_entry {
> +    struct xorg_list            entry;
> +    int                         fd;
> +    void                        *data;
> +    FontFdHandlerProcPtr        handler;
> +};
> +
> +static void
> +fs_fd_handler(int fd, int ready, void *data)
> +{
> +    struct fs_fd_entry    *entry = data;
> +
> +    entry->handler(fd, entry->data);
> +}
> +
> +static struct xorg_list fs_fd_list;
> +
> +static int
> +add_fs_fd(int fd, FontFdHandlerProcPtr handler, void *data)
> +{
> +    struct fs_fd_entry  *entry = calloc(1, sizeof (struct fs_fd_entry));
> +
> +    if (!entry)
> +        return FALSE;
> +
> +    entry->fd = fd;
> +    entry->data = data;
> +    entry->handler = handler;
> +    if (!SetNotifyFd(fd, fs_fd_handler, X_NOTIFY_READ, entry)) {
> +        free(entry);
> +        return FALSE;
> +    }
> +    xorg_list_add(&entry->entry, &fs_fd_list);
> +    return TRUE;
> +}
> +
> +static void
> +remove_fs_fd(int fd)
> +{
> +    struct fs_fd_entry  *entry, *temp;
> +
> +    xorg_list_for_each_entry_safe(entry, temp, &fs_fd_list, entry) {
> +        if (entry->fd == fd) {
> +            xorg_list_del(&entry->entry);
> +            free(entry);
> +            break;
> +        }
> +    }
> +    RemoveNotifyFd(fd);
> +}
> +
> +static void
> +adjust_fs_wait_for_delay(void *wt, unsigned long newdelay)
> +{
> +    AdjustWaitForDelay(wt, newdelay);
> +}
> +
> +static int
> +_init_fs_handlers(FontPathElementPtr fpe, FontBlockHandlerProcPtr block_handler)

This.

>  {
>      /* if server has reset, make sure the b&w handlers are reinstalled */
>      if (last_server_gen < serverGeneration) {
> @@ -1966,26 +1992,63 @@ init_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler)
>          fs_handlers_installed = 0;
>      }
>      if (fs_handlers_installed == 0) {
> -        if (!RegisterBlockAndWakeupHandlers(block_handler,
> -                                            FontWakeup, (void *) 0))
> +        if (!RegisterBlockAndWakeupHandlers(fs_block_handler,
> +                                            FontWakeup, (void *) block_handler))
>              return AllocError;
> +        xorg_list_init(&fs_fd_list);
>          fs_handlers_installed++;
>      }
>      QueueFontWakeup(fpe);
>      return Successful;
>  }
>
> -_X_EXPORT
> -void
> -remove_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler,
> +static void
> +_remove_fs_handlers(FontPathElementPtr fpe, FontBlockHandlerProcPtr block_handler,
>                     Bool all)

And this. Those renamings don't look necessary.
Do they otherwise conflict with something, I don't see atm.?

>  {
>      if (all) {
>          /* remove the handlers if no one else is using them */
>          if (--fs_handlers_installed == 0) {
> -            RemoveBlockAndWakeupHandlers(block_handler, FontWakeup,
> -                                         (void *) 0);
> +            RemoveBlockAndWakeupHandlers(fs_block_handler, FontWakeup,
> +                                         (void *) block_handler);
>          }
>      }
>      RemoveFontWakeup(fpe);
>  }
> +
> +static const xfont2_client_funcs_rec xfont2_client_funcs = {
> +    .version = XFONT2_CLIENT_FUNCS_VERSION,
> +    .client_auth_generation = _client_auth_generation,
> +    .client_signal = ClientSignal,
> +    .delete_font_client_id = delete_font_client_id,
> +    .verrorf = VErrorF,
> +    .find_old_font = find_old_font,
> +    .get_client_resolutions = get_client_resolutions,
> +    .get_default_point_size = get_default_point_size,
> +    .get_new_font_client_id = get_new_font_client_id,
> +    .get_time_in_millis = GetTimeInMillis,
> +    .init_fs_handlers = _init_fs_handlers,
> +    .register_fpe_funcs = register_fpe_funcs,
> +    .remove_fs_handlers = _remove_fs_handlers,
> +    .get_server_client = get_server_client,
> +    .set_font_authorizations = set_font_authorizations,
> +    .store_font_client_font = store_font_Client_font,
> +    .make_atom = MakeAtom,
> +    .valid_atom = ValidAtom,
> +    .name_for_atom = NameForAtom,
> +    .get_server_generation = get_server_generation,
> +    .add_fs_fd = add_fs_fd,
> +    .remove_fs_fd = remove_fs_fd,
> +    .adjust_fs_wait_for_delay = adjust_fs_wait_for_delay,
> +};
> +
> +xfont2_pattern_cache_ptr fontPatternCache;
> +
> +void
> +InitFonts(void)
> +{
> +    if (fontPatternCache)
> +       xfont2_free_font_pattern_cache(fontPatternCache);
> +    fontPatternCache = xfont2_make_font_pattern_cache();
> +    xfont2_init(&xfont2_client_funcs);
> +}
> diff --git a/dix/main.c b/dix/main.c
> index ddb2f95..b30f1a1 100644
> --- a/dix/main.c
> +++ b/dix/main.c
> @@ -96,7 +96,7 @@ Equipment Corporation.
>  #include "selection.h"
>  #include <X11/fonts/font.h>
>  #include <X11/fonts/fontstruct.h>
> -#include <X11/fonts/fontutil.h>
> +#include <X11/fonts/libxfont2.h>
>  #include "opaque.h"
>  #include "servermd.h"
>  #include "hotplug.h"
> @@ -197,7 +197,7 @@ dix_main(int argc, char *argv[], char *envp[])
>
>          InitAtoms();
>          InitEvents();
> -        InitGlyphCaching();
> +        xfont2_init_glyph_caching();
>          dixResetRegistry();
>          InitFonts();
>          InitCallbackManager();
> diff --git a/glamor/glamor_font.c b/glamor/glamor_font.c
> index 6b3a16a..4ba6eb6 100644
> --- a/glamor/glamor_font.c
> +++ b/glamor/glamor_font.c
> @@ -55,7 +55,7 @@ glamor_font_get(ScreenPtr screen, FontPtr font)
>          privates = calloc(glamor_font_screen_count, sizeof (glamor_font_t));
>          if (!privates)
>              return NULL;
> -        FontSetPrivate(font, glamor_font_private_index, privates);
> +        xfont2_font_set_private(font, glamor_font_private_index, privates);
>      }
>
>      glamor_font = &privates[screen->myNum];
> @@ -174,7 +174,7 @@ glamor_unrealize_font(ScreenPtr screen, FontPtr font)
>              return TRUE;
>
>      free(privates);
> -    FontSetPrivate(font, glamor_font_private_index, NULL);
> +    xfont2_font_set_private(font, glamor_font_private_index, NULL);
>      return TRUE;
>  }
>
> @@ -187,7 +187,7 @@ glamor_font_init(ScreenPtr screen)
>          return TRUE;
>
>      if (glamor_font_generation != serverGeneration) {
> -        glamor_font_private_index = AllocateFontPrivateIndex();
> +        glamor_font_private_index = xfont2_allocate_font_private_index();
>          if (glamor_font_private_index == -1)
>              return FALSE;
>          glamor_font_screen_count = 0;
> diff --git a/hw/dmx/dmxfont.c b/hw/dmx/dmxfont.c
> index 25a04a6..addfa6a 100644
> --- a/hw/dmx/dmxfont.c
> +++ b/hw/dmx/dmxfont.c
> @@ -46,6 +46,7 @@
>  #include "dmxlog.h"
>
>  #include <X11/fonts/fontstruct.h>
> +#include <X11/fonts/libxfont2.h>
>  #include "dixfont.h"
>  #include "dixstruct.h"
>
> @@ -447,7 +448,7 @@ dmxRealizeFont(ScreenPtr pScreen, FontPtr pFont)
>      dmxFontPrivPtr pFontPriv;
>
>      if (!(pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex))) {
> -        FontSetPrivate(pFont, dmxFontPrivateIndex, NULL);
> +        xfont2_font_set_private(pFont, dmxFontPrivateIndex, NULL);
>          pFontPriv = malloc(sizeof(dmxFontPrivRec));
>          if (!pFontPriv)
>              return FALSE;
> @@ -460,7 +461,7 @@ dmxRealizeFont(ScreenPtr pScreen, FontPtr pFont)
>          pFontPriv->refcnt = 0;
>      }
>
> -    FontSetPrivate(pFont, dmxFontPrivateIndex, (void *) pFontPriv);
> +    xfont2_font_set_private(pFont, dmxFontPrivateIndex, (void *) pFontPriv);
>
>      if (dmxScreen->beDisplay) {
>          if (!dmxBELoadFont(pScreen, pFont))
> @@ -504,7 +505,7 @@ dmxUnrealizeFont(ScreenPtr pScreen, FontPtr pFont)
>          if (!pFontPriv->refcnt) {
>              MAXSCREENSFREE(pFontPriv->font);
>              free(pFontPriv);
> -            FontSetPrivate(pFont, dmxFontPrivateIndex, NULL);
> +            xfont2_font_set_private(pFont, dmxFontPrivateIndex, NULL);
>          }
>          else if (pFontPriv->font[pScreen->myNum]) {
>              if (dmxScreen->beDisplay)
> @@ -563,7 +564,7 @@ dmxUnrealizeFont(ScreenPtr pScreen, FontPtr pFont)
>                  ) {
>                  MAXSCREENSFREE(pFontPriv->font);
>                  free(pFontPriv);
> -                FontSetPrivate(pFont, dmxFontPrivateIndex, NULL);
> +                xfont2_font_set_private(pFont, dmxFontPrivateIndex, NULL);
>              }
>          }
>      }
> diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
> index 097418d..e441dce 100644
> --- a/hw/dmx/dmxscrinit.c
> +++ b/hw/dmx/dmxscrinit.c
> @@ -58,6 +58,8 @@
>  #include "mipointer.h"
>  #include "micmap.h"
>
> +#include <X11/fonts/libxfont2.h>
> +
>  extern Bool dmxCloseScreen(ScreenPtr pScreen);
>  static Bool dmxSaveScreen(ScreenPtr pScreen, int what);
>
> @@ -187,7 +189,7 @@ dmxScreenInit(ScreenPtr pScreen, int argc, char *argv[])
>
>      if (dmxGeneration != serverGeneration) {
>          /* Allocate font private index */
> -        dmxFontPrivateIndex = AllocateFontPrivateIndex();
> +        dmxFontPrivateIndex = xfont2_allocate_font_private_index();
>          if (dmxFontPrivateIndex == -1)
>              return FALSE;
>
> diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
> index 5391b72..cf26892 100755
> --- a/hw/xfree86/sdksyms.sh
> +++ b/hw/xfree86/sdksyms.sh
> @@ -251,7 +251,6 @@ cat > sdksyms.c << EOF
>  #define _FONTPROTO_H
>  #include "dixfont.h"
>  #include "dixfontstr.h"
> -#include "dixfontstubs.h"
>  #include "dixgrabs.h"
>  #include "dixstruct.h"
>  #include "exevents.h"
> diff --git a/hw/xnest/Font.c b/hw/xnest/Font.c
> index ffdfd24..192b80f 100644
> --- a/hw/xnest/Font.c
> +++ b/hw/xnest/Font.c
> @@ -23,6 +23,7 @@ is" without express or implied warranty.
>  #include "regionstr.h"
>  #include <X11/fonts/font.h>
>  #include <X11/fonts/fontstruct.h>
> +#include "dixfontstr.h"
>  #include "scrnintstr.h"
>
>  #include "Xnest.h"
> @@ -42,7 +43,7 @@ xnestRealizeFont(ScreenPtr pScreen, FontPtr pFont)
>      int i;
>      const char *name;
>
> -    FontSetPrivate(pFont, xnestFontPrivateIndex, NULL);
> +    xfont2_font_set_private(pFont, xnestFontPrivateIndex, NULL);
>
>      name_atom = MakeAtom("FONT", 4, True);
>      value_atom = 0L;
> @@ -65,7 +66,7 @@ xnestRealizeFont(ScreenPtr pScreen, FontPtr pFont)
>          return False;
>
>      priv = (void *) malloc(sizeof(xnestPrivFont));
> -    FontSetPrivate(pFont, xnestFontPrivateIndex, priv);
> +    xfont2_font_set_private(pFont, xnestFontPrivateIndex, priv);
>
>      xnestFontPriv(pFont)->font_struct = XLoadQueryFont(xnestDisplay, name);
>
> @@ -82,7 +83,7 @@ xnestUnrealizeFont(ScreenPtr pScreen, FontPtr pFont)
>          if (xnestFontStruct(pFont))
>              XFreeFont(xnestDisplay, xnestFontStruct(pFont));
>          free(xnestFontPriv(pFont));
> -        FontSetPrivate(pFont, xnestFontPrivateIndex, NULL);
> +        xfont2_font_set_private(pFont, xnestFontPrivateIndex, NULL);
>      }
>      return True;
>  }
> diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
> index d9f490b..bec2c51 100644
> --- a/hw/xnest/Init.c
> +++ b/hw/xnest/Init.c
> @@ -26,6 +26,7 @@ is" without express or implied warranty.
>  #include "servermd.h"
>  #include "mi.h"
>  #include <X11/fonts/fontstruct.h>
> +#include "dixfontstr.h"
>
>  #include "Xnest.h"
>
> @@ -72,7 +73,7 @@ InitOutput(ScreenInfo * screen_info, int argc, char *argv[])
>                  break;
>              }
>
> -    xnestFontPrivateIndex = AllocateFontPrivateIndex();
> +    xnestFontPrivateIndex = xfont2_allocate_font_private_index();
>
>      if (!xnestNumScreens)
>          xnestNumScreens = 1;
> diff --git a/include/dixfont.h b/include/dixfont.h
> index b44996f..3a38d10 100644
> --- a/include/dixfont.h
> +++ b/include/dixfont.h
> @@ -29,7 +29,6 @@ SOFTWARE.
>  #include "closure.h"
>  #include <X11/fonts/fontstruct.h>
>  #include <X11/fonts/fontproto.h>
> -#include <X11/fonts/fontutil.h>
>
>  #define NullDIXFontProp ((DIXFontPropPtr)0)
>
> @@ -98,16 +97,11 @@ extern _X_EXPORT void InitFonts(void);
>
>  extern _X_EXPORT void FreeFonts(void);
>
> -extern _X_EXPORT FontPtr find_old_font(XID /*id */ );
> -
> -#define GetGlyphs dixGetGlyphs
> -extern _X_EXPORT void dixGetGlyphs(FontPtr /*font */ ,
> -                                   unsigned long /*count */ ,
> -                                   unsigned char * /*chars */ ,
> -                                   FontEncoding /*fontEncoding */ ,
> -                                   unsigned long * /*glyphcount */ ,
> -                                   CharInfoPtr * /*glyphs */ );
> -
> -extern _X_EXPORT void register_fpe_functions(void);
> +extern _X_EXPORT void GetGlyphs(FontPtr /*font */ ,
> +                                unsigned long /*count */ ,
> +                                unsigned char * /*chars */ ,
> +                                FontEncoding /*fontEncoding */ ,
> +                                unsigned long * /*glyphcount */ ,
> +                                CharInfoPtr * /*glyphs */ );
>
>  #endif                          /* DIXFONT_H */
> diff --git a/include/dixfontstr.h b/include/dixfontstr.h
> index ce878d0..7deb84a 100644
> --- a/include/dixfontstr.h
> +++ b/include/dixfontstr.h
> @@ -27,6 +27,7 @@ SOFTWARE.
>  #include "servermd.h"
>  #include "dixfont.h"
>  #include <X11/fonts/fontstruct.h>
> +#include <X11/fonts/libxfont2.h>
>  #include "closure.h"
>  #include <X11/Xproto.h>         /* for xQueryFontReply */
>
> diff --git a/include/dixfontstubs.h b/include/dixfontstubs.h
> deleted file mode 100644
> index 535d312..0000000
> --- a/include/dixfontstubs.h
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -#ifndef DIXFONTSTUBS_H
> -#define DIXFONTSTUBS_H 1
> -
> -/*
> - * libXfont stubs replacements
> - * This header exists solely for the purpose of sdksyms generation;
> - * source code should #include "dixfonts.h" instead, which pulls in these
> - * declarations from <X11/fonts/fontproto.h>
> - */
> -extern _X_EXPORT int client_auth_generation(ClientPtr client);
> -
> -extern _X_EXPORT void DeleteFontClientID(Font id);
> -
> -extern _X_EXPORT int GetDefaultPointSize(void);
> -
> -extern _X_EXPORT Font GetNewFontClientID(void);
> -
> -extern _X_EXPORT int init_fs_handlers(FontPathElementPtr fpe,
> -                                      BlockHandlerProcPtr block_handler);
> -
> -extern _X_EXPORT 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);
> -
> -extern _X_EXPORT void remove_fs_handlers(FontPathElementPtr fpe,
> -                                         BlockHandlerProcPtr blockHandler,
> -                                         Bool all);
> -
> -extern _X_EXPORT int StoreFontClientFont(FontPtr pfont, Font id);
> -
> -#endif
> diff --git a/mi/miglblt.c b/mi/miglblt.c
> index 46268ae..68be5b9 100644
> --- a/mi/miglblt.c
> +++ b/mi/miglblt.c
> @@ -53,7 +53,7 @@ SOFTWARE.
>  #include       <X11/Xproto.h>
>  #include       "misc.h"
>  #include       <X11/fonts/fontstruct.h>
> -#include       <X11/fonts/fontutil.h>
> +#include        <X11/fonts/libxfont2.h>
>  #include       "dixfontstr.h"
>  #include       "gcstruct.h"
>  #include       "windowstr.h"
> @@ -186,13 +186,13 @@ miImageGlyphBlt(DrawablePtr pDrawable, GC * pGC, int x, int y, unsigned int ngly
>                  void *pglyphBase      /* start of array of glyphs */
>      )
>  {
> -    ExtentInfoRec info;         /* used by QueryGlyphExtents() */
> +    ExtentInfoRec info;         /* used by xfont2_query_glyph_extents() */
>      ChangeGCVal gcvals[3];
>      int oldAlu, oldFS;
>      unsigned long oldFG;
>      xRectangle backrect;
>
> -    QueryGlyphExtents(pGC->font, ppci, (unsigned long) nglyph, &info);
> +    xfont2_query_glyph_extents(pGC->font, ppci, (unsigned long) nglyph, &info);
>
>      if (info.overallWidth >= 0) {
>          backrect.x = x;
> diff --git a/miext/damage/damage.c b/miext/damage/damage.c
> index 746e798..d6a3614 100644
> --- a/miext/damage/damage.c
> +++ b/miext/damage/damage.c
> @@ -32,7 +32,7 @@
>  #include    <X11/fonts/font.h>
>  #include    "dixfontstr.h"
>  #include    <X11/fonts/fontstruct.h>
> -#include    <X11/fonts/fontutil.h>
> +#include    <X11/fonts/libxfont2.h>
>  #include    "mi.h"
>  #include    "regionstr.h"
>  #include    "globals.h"
> @@ -1248,7 +1248,7 @@ damageDamageChars(DrawablePtr pDrawable,
>      ExtentInfoRec extents;
>      BoxRec box;
>
> -    QueryGlyphExtents(font, charinfo, n, &extents);
> +    xfont2_query_glyph_extents(font, charinfo, n, &extents);
>      if (imageblt) {
>          if (extents.overallWidth > extents.overallRight)
>              extents.overallRight = extents.overallWidth;
> diff --git a/os/utils.c b/os/utils.c
> index c23c0d1..91c7e1d 100644
> --- a/os/utils.c
> +++ b/os/utils.c
> @@ -80,7 +80,7 @@ __stdcall unsigned long GetTickCount(void);
>  #include <X11/Xtrans/Xtrans.h>
>  #include "input.h"
>  #include "dixfont.h"
> -#include <X11/fonts/fontutil.h>
> +#include <X11/fonts/libxfont2.h>
>  #include "osdep.h"
>  #include "extension.h"
>  #ifdef X_POSIX_C_SOURCE
> @@ -778,7 +778,7 @@ ProcessCommandLine(int argc, char *argv[])
>              DPMSDisabledSwitch = TRUE;
>  #endif
>          else if (strcmp(argv[i], "-deferglyphs") == 0) {
> -            if (++i >= argc || !ParseGlyphCachingMode(argv[i]))
> +            if (++i >= argc || !xfont2_parse_glyph_caching_mode(argv[i]))
>                  UseMsg();
>          }
>          else if (strcmp(argv[i], "-f") == 0) {
> --
> 2.5.0
>
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel


More information about the xorg-devel mailing list