From dff2e0a01fd9f2c2aa46a4a68ea2db6ece5878f7 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Wed, 3 Apr 2019 22:33:33 +0200 Subject: Font.c: factor out font checks --- nx-X11/programs/Xserver/hw/nxagent/Font.c | 132 +++++++++--------------------- 1 file changed, 37 insertions(+), 95 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index 57909d7fc..f967f82f0 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -1443,128 +1443,68 @@ static Bool nxagentGetFontServerPath(char * fontServerPath, int size) return True; } -void nxagentVerifyDefaultFontPath(void) +void nxagentVerifySingleFontPath(char **dest, const char *fontDir, const char *fontPath) { struct stat dirStat; - static char *fontPath; - - #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Going to search for one or more valid font paths.\n"); - #endif - - /* - * Set the default font path as the first choice. - */ - - if ((fontPath = strdup(defaultFontPath)) == NULL) - { - #ifdef WARNING - fprintf(stderr, "nxagentVerifyDefaultFontPath: WARNING! Unable to allocate memory for a new font path. " - "Using the default font path [%s].\n", validateString(defaultFontPath)); - #endif + char * newdest = NULL; + if (!dest || !*dest) return; - } - if (stat(NXAGENT_DEFAULT_FONT_DIR, &dirStat) == 0 && + if (stat(fontDir, &dirStat) == 0 && S_ISDIR(dirStat.st_mode) != 0) { - /* - * Let's use the old "/usr/share/nx/fonts" style. - */ - #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Assuming fonts in directory [%s].\n", - validateString(NXAGENT_DEFAULT_FONT_DIR)); + fprintf(stderr, "%s: Assuming fonts in directory [%s].\n", __func__, + validateString(fontDir)); #endif - if (*fontPath != '\0') + if (**dest != '\0') { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_DEFAULT_FONT_PATH) + 2); - strcat(fontPath, ","); + newdest = realloc(*dest, strlen(*dest) + strlen(fontPath) + 2); + if (newdest == NULL) + return; + strcat(newdest, ","); } else { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_DEFAULT_FONT_PATH) + 1); + newdest = realloc(*dest, strlen(*dest) + strlen(fontPath) + 1); + if (newdest == NULL) + return; } - strcat(fontPath, NXAGENT_DEFAULT_FONT_PATH); + strcat(newdest, fontPath); + *dest = newdest; } +} - if (stat(NXAGENT_ALTERNATE_FONT_DIR, &dirStat) == 0 && - S_ISDIR(dirStat.st_mode) != 0) - { - /* - * Let's use the new "/usr/share/X11/fonts" path. - */ - - #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Assuming fonts in directory [%s].\n", - validateString(NXAGENT_ALTERNATE_FONT_DIR)); - #endif +void nxagentVerifyDefaultFontPath(void) +{ + static char *fontPath; - if (*fontPath != '\0') - { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH) + 2); - strcat(fontPath, ","); - } - else - { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH) + 1); - } + #ifdef TEST + fprintf(stderr, "nxagentVerifyDefaultFontPath: Going to search for one or more valid font paths.\n"); + #endif - strcat(fontPath, NXAGENT_ALTERNATE_FONT_PATH); - } + /* + * Set the default font path as the first choice. + */ - if (stat(NXAGENT_ALTERNATE_FONT_DIR_2, &dirStat) == 0 && - S_ISDIR(dirStat.st_mode) != 0) + if ((fontPath = strdup(defaultFontPath)) == NULL) { - /* - * Let's use the "/usr/share/fonts/X11" path. - */ - - #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Assuming fonts in directory [%s].\n", - validateString(NXAGENT_ALTERNATE_FONT_DIR_2)); + #ifdef WARNING + fprintf(stderr, "nxagentVerifyDefaultFontPath: WARNING! Unable to allocate memory for a new font path. " + "Using the default font path [%s].\n", validateString(defaultFontPath)); #endif - if (*fontPath != '\0') - { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH_2) + 2); - strcat(fontPath, ","); - } - else - { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH_2) + 1); - } - - strcat(fontPath, NXAGENT_ALTERNATE_FONT_PATH_2); + return; } - if (stat(NXAGENT_ALTERNATE_FONT_DIR_3, &dirStat) == 0 && - S_ISDIR(dirStat.st_mode) != 0) - { - /* - * Let's use the "/usr/X11R6/lib/X11/fonts" path. - */ - - #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Assuming fonts in directory [%s].\n", - validateString(NXAGENT_ALTERNATE_FONT_DIR_3)); - #endif + nxagentVerifySingleFontPath(&fontPath, NXAGENT_DEFAULT_FONT_DIR, NXAGENT_DEFAULT_FONT_PATH); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR, NXAGENT_ALTERNATE_FONT_PATH); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_2, NXAGENT_ALTERNATE_FONT_PATH_2); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_3, NXAGENT_ALTERNATE_FONT_PATH_3); - if (*fontPath != '\0') - { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH_3) + 2); - strcat(fontPath, ","); - } - else - { - fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH_3) + 1); - } - - strcat(fontPath, NXAGENT_ALTERNATE_FONT_PATH_3); - } if (*fontPath == '\0') { #ifdef WARNING @@ -1576,6 +1516,8 @@ void nxagentVerifyDefaultFontPath(void) } else { + /* do _not_ free defaultFontPath here - it's either set at compile time or + part of argv */ defaultFontPath = fontPath; #ifdef TEST -- cgit v1.2.3 From bcb5c7962ae18d36205e4fa0b578ca9e95559859 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 18:34:04 +0200 Subject: Drop Speedo font support Has been obsoleted in 2005, see https://en.wikipedia.org/wiki/Bitstream_Speedo_Fonts --- nx-X11/config/cf/host.def | 6 +++--- nx-X11/programs/Xserver/hw/nxagent/Font.c | 12 ++++-------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/nx-X11/config/cf/host.def b/nx-X11/config/cf/host.def index 1360331be..2df1cd672 100644 --- a/nx-X11/config/cf/host.def +++ b/nx-X11/config/cf/host.def @@ -156,15 +156,15 @@ * this by default as NX intaller carries only misc and TTF in the * basic set of fonts installed under Windows. * -#define DefaultFontPath $(FONTDIR)/misc/,$(FONTDIR)/Speedo/,$(FONTDIR)/Type1/,$(FONTDIR)/75dpi/,$(FONTDIR)/100dpi/ +#define DefaultFontPath $(FONTDIR)/misc/,$(FONTDIR)/Type1/,$(FONTDIR)/75dpi/,$(FONTDIR)/100dpi/ */ #if defined(LinuxArchitecture) || defined(SunArchitecture) || defined(FreeBSDArchitecture) -#define DefaultFontPath $(FONTDIR)/misc/,$(FONTDIR)/Speedo/,$(FONTDIR)/Type1/,$(FONTDIR)/75dpi/,$(FONTDIR)/100dpi/,$(FONTDIR)/TTF/ +#define DefaultFontPath $(FONTDIR)/misc/,$(FONTDIR)/Type1/,$(FONTDIR)/75dpi/,$(FONTDIR)/100dpi/,$(FONTDIR)/TTF/ #endif /* #if defined(LinuxArchitecture) || defined(SunArchitecture) */ #if defined(cygwinArchitecture) -#define DefaultFontPath /mnt/NX/fonts/base/,/mnt/NX/fonts/misc/,/mnt/NX/fonts/Speedo/,/mnt/NX/fonts/Type1/,/mnt/NX/fonts/75dpi/,/mnt/NX/fonts/100dpi/,/mnt/NX/fonts/TTF/ +#define DefaultFontPath /mnt/NX/fonts/base/,/mnt/NX/fonts/misc/,/mnt/NX/fonts/Type1/,/mnt/NX/fonts/75dpi/,/mnt/NX/fonts/100dpi/,/mnt/NX/fonts/TTF/ #endif /* #if defined(cygwinArchitecture) */ /* diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index f967f82f0..23fcfe8d5 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -77,23 +77,19 @@ is" without express or implied warranty. #define NXAGENT_ALTERNATE_FONT_DIR_3 "/usr/X11R6/lib/X11/fonts" #define NXAGENT_DEFAULT_FONT_PATH \ -"/usr/share/nx/fonts/misc/,/usr/share/nx/fonts/Speedo/,\ -/usr/share/nx/fonts/Type1/,/usr/share/nx/fonts/75dpi/,\ +"/usr/share/nx/fonts/Type1/,/usr/share/nx/fonts/75dpi/,\ /usr/share/nx/fonts/100dpi/,/usr/share/nx/fonts/TTF/" #define NXAGENT_ALTERNATE_FONT_PATH \ -"/usr/share/X11/fonts/misc/,/usr/share/X11/fonts/Speedo/,\ -/usr/share/X11/fonts/Type1/,/usr/share/X11/fonts/75dpi/,\ +"/usr/share/X11/fonts/Type1/,/usr/share/X11/fonts/75dpi/,\ /usr/share/X11/fonts/100dpi/,/usr/share/X11/fonts/TTF/" #define NXAGENT_ALTERNATE_FONT_PATH_2 \ -"/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Speedo/,\ -/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,\ +"/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,\ /usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/TTF/" #define NXAGENT_ALTERNATE_FONT_PATH_3 \ -"/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Speedo/,\ -/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dpi/,\ +"/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dpi/,\ /usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/TTF/" #undef NXAGENT_FONTCACHE_DEBUG -- cgit v1.2.3 From 8029141e772568872e668cfb1df9b5a7968d2236 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 19:19:04 +0200 Subject: Font.c: build the font paths at runtime Drop the font path defines and build the path strings at runtime instead. --- nx-X11/programs/Xserver/hw/nxagent/Font.c | 67 ++++++++++++++++--------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index 23fcfe8d5..8c1cb7269 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -76,21 +76,13 @@ is" without express or implied warranty. #define NXAGENT_ALTERNATE_FONT_DIR_2 "/usr/share/fonts/X11" #define NXAGENT_ALTERNATE_FONT_DIR_3 "/usr/X11R6/lib/X11/fonts" -#define NXAGENT_DEFAULT_FONT_PATH \ -"/usr/share/nx/fonts/Type1/,/usr/share/nx/fonts/75dpi/,\ -/usr/share/nx/fonts/100dpi/,/usr/share/nx/fonts/TTF/" - -#define NXAGENT_ALTERNATE_FONT_PATH \ -"/usr/share/X11/fonts/Type1/,/usr/share/X11/fonts/75dpi/,\ -/usr/share/X11/fonts/100dpi/,/usr/share/X11/fonts/TTF/" - -#define NXAGENT_ALTERNATE_FONT_PATH_2 \ -"/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,\ -/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/TTF/" - -#define NXAGENT_ALTERNATE_FONT_PATH_3 \ -"/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dpi/,\ -/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/TTF/" +const char * nxagentFontSubdirs[] = { + "Type1", + "75dpi", + "100dpi", + "TTF", + NULL +}; #undef NXAGENT_FONTCACHE_DEBUG #undef NXAGENT_RECONNECT_FONT_DEBUG @@ -1439,10 +1431,9 @@ static Bool nxagentGetFontServerPath(char * fontServerPath, int size) return True; } -void nxagentVerifySingleFontPath(char **dest, const char *fontDir, const char *fontPath) +void nxagentVerifySingleFontPath(char **dest, const char *fontDir) { struct stat dirStat; - char * newdest = NULL; if (!dest || !*dest) return; @@ -1455,22 +1446,32 @@ void nxagentVerifySingleFontPath(char **dest, const char *fontDir, const char *f validateString(fontDir)); #endif - if (**dest != '\0') + for (int i = 0; ; i++) { - newdest = realloc(*dest, strlen(*dest) + strlen(fontPath) + 2); - if (newdest == NULL) + char *tmppath = NULL; + int rc; + + const char *subdir = nxagentFontSubdirs[i]; + + if (subdir == NULL) return; - strcat(newdest, ","); - } - else - { - newdest = realloc(*dest, strlen(*dest) + strlen(fontPath) + 1); - if (newdest == NULL) + + if (**dest != '\0') + { + rc = asprintf(&tmppath, "%s,%s/%s", *dest, fontDir, subdir); + } + else + { + rc = asprintf(&tmppath, "%s/%s", fontDir, subdir); + } + + if (rc == -1) return; - } - strcat(newdest, fontPath); - *dest = newdest; + free(*dest); + *dest = tmppath; + tmppath = NULL; + } } } @@ -1496,10 +1497,10 @@ void nxagentVerifyDefaultFontPath(void) return; } - nxagentVerifySingleFontPath(&fontPath, NXAGENT_DEFAULT_FONT_DIR, NXAGENT_DEFAULT_FONT_PATH); - nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR, NXAGENT_ALTERNATE_FONT_PATH); - nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_2, NXAGENT_ALTERNATE_FONT_PATH_2); - nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_3, NXAGENT_ALTERNATE_FONT_PATH_3); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_DEFAULT_FONT_DIR); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_2); + nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_3); if (*fontPath == '\0') { -- cgit v1.2.3 From dfb5602a662507373321a1b1497311027dafdc93 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 19:21:41 +0200 Subject: Font.c: Let dix check if a font path exists Dix will only add font paths that are existing on the system. There's no need to check that ourselves. --- nx-X11/programs/Xserver/hw/nxagent/Font.c | 54 ++++++++++++++----------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index 8c1cb7269..6fb6c8f35 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -1433,45 +1433,39 @@ static Bool nxagentGetFontServerPath(char * fontServerPath, int size) void nxagentVerifySingleFontPath(char **dest, const char *fontDir) { - struct stat dirStat; - if (!dest || !*dest) return; - if (stat(fontDir, &dirStat) == 0 && - S_ISDIR(dirStat.st_mode) != 0) - { - #ifdef TEST - fprintf(stderr, "%s: Assuming fonts in directory [%s].\n", __func__, - validateString(fontDir)); - #endif + #ifdef TEST + fprintf(stderr, "%s: Assuming fonts in directory [%s].\n", __func__, + validateString(fontDir)); + #endif - for (int i = 0; ; i++) - { - char *tmppath = NULL; - int rc; + for (int i = 0; ; i++) + { + char *tmppath = NULL; + int rc; - const char *subdir = nxagentFontSubdirs[i]; + const char *subdir = nxagentFontSubdirs[i]; - if (subdir == NULL) - return; + if (subdir == NULL) + return; - if (**dest != '\0') - { - rc = asprintf(&tmppath, "%s,%s/%s", *dest, fontDir, subdir); - } - else - { - rc = asprintf(&tmppath, "%s/%s", fontDir, subdir); - } + if (**dest != '\0') + { + rc = asprintf(&tmppath, "%s,%s/%s", *dest, fontDir, subdir); + } + else + { + rc = asprintf(&tmppath, "%s/%s", fontDir, subdir); + } - if (rc == -1) - return; + if (rc == -1) + return; - free(*dest); - *dest = tmppath; - tmppath = NULL; - } + free(*dest); + *dest = tmppath; + tmppath = NULL; } } -- cgit v1.2.3 From 898f04e4293ce9cf7fcab810e8b27404cf0b6fde Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 19:34:57 +0200 Subject: Font.c: Loop over font paths drop defines and use an array instead. This way adding further paths can be done much easier. --- nx-X11/programs/Xserver/hw/nxagent/Font.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index 6fb6c8f35..d5c9f8982 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -71,10 +71,13 @@ is" without express or implied warranty. #undef TEST #undef DEBUG -#define NXAGENT_DEFAULT_FONT_DIR "/usr/share/nx/fonts" -#define NXAGENT_ALTERNATE_FONT_DIR "/usr/share/X11/fonts" -#define NXAGENT_ALTERNATE_FONT_DIR_2 "/usr/share/fonts/X11" -#define NXAGENT_ALTERNATE_FONT_DIR_3 "/usr/X11R6/lib/X11/fonts" +const char * nxagentFontDirs[] = { + "/usr/share/nx/fonts", + "/usr/share/X11/fonts", + "/usr/share/fonts/X11", + "/usr/X11R6/lib/X11/fonts", + NULL +}; const char * nxagentFontSubdirs[] = { "Type1", @@ -1491,10 +1494,15 @@ void nxagentVerifyDefaultFontPath(void) return; } - nxagentVerifySingleFontPath(&fontPath, NXAGENT_DEFAULT_FONT_DIR); - nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR); - nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_2); - nxagentVerifySingleFontPath(&fontPath, NXAGENT_ALTERNATE_FONT_DIR_3); + for (int i = 0; ; i++) + { + char *dir = nxagentFontDirs[i]; + + if (dir == NULL) + break; + else + nxagentVerifySingleFontPath(&fontPath, dir); + } if (*fontPath == '\0') { -- cgit v1.2.3 From 78a16245a4bbf13acf53768064d81cbaa28c0d8b Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 18:22:45 +0200 Subject: auto-determine system font path and add to list of font paths This will help on non-supported platforms as it will add a path the current code might not be aware of. --- Makefile | 5 +++++ nx-X11/config/cf/Imake.tmpl | 5 +++++ nx-X11/programs/Xserver/hw/nxagent/Font.c | 1 + nx-X11/programs/Xserver/hw/nxagent/Imakefile | 1 + 4 files changed, 12 insertions(+) diff --git a/Makefile b/Makefile index 898e52474..42f9f25b4 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,9 @@ CONFIGURE ?= ./configure --prefix="$(PREFIX)" ifneq ($(shell pkg-config --exists xkbcomp && echo yes), yes) $(warning xkbcomp devel package missing, using imake default values) endif +ifneq ($(shell pkg-config --exists fontutil && echo yes), yes) + $(warning fontutil devel package missing, using imake default values) +endif IMAKE_DEFINES ?= @@ -112,6 +115,8 @@ imakeconfig: (pkg-config --exists xkbcomp && echo "#define SystemXkbConfigDir `pkg-config xkbcomp --variable=xkbconfigdir`"; :) >>nx-X11/config/cf/nxconfig.def (pkg-config --exists xkbcomp && echo "#define SystemXkbBinDir `pkg-config xkbcomp --variable=prefix`/bin"; :) >>nx-X11/config/cf/nxconfig.def + (pkg-config --exists fontutil && echo "#define SystemFontRootDir `pkg-config fontutil --variable=fontrootdir`"; :) >>nx-X11/config/cf/nxconfig.def + # let's create the nx-X11 Makefiles now, once everything has been defined $(MAKE) -j1 -C nx-X11 Makefiles IMAKE_DEFINES="$(IMAKE_DEFINES)" diff --git a/nx-X11/config/cf/Imake.tmpl b/nx-X11/config/cf/Imake.tmpl index ddd587ec6..25d985d75 100644 --- a/nx-X11/config/cf/Imake.tmpl +++ b/nx-X11/config/cf/Imake.tmpl @@ -791,6 +791,10 @@ TCLIBDIR = TclLibDir #define SystemXkbBinDir /usr/bin #endif +#ifndef SystemFontDir +#define SystemFontDir /usr/share/fonts/X11 +#endif + #ifndef ShLibDir #define ShLibDir UsrLibDir #endif @@ -1668,6 +1672,7 @@ TCLIBDIR = TclLibDir SYSTEMUSRINCDIR = SystemUsrIncDir /* system's "/usr/include" */ SYSTEMXKBCONFDIR = SystemXkbConfigDir /* system's "/usr/share/xkb" */ SYSTEMXKBBINDIR = SystemXkbBinDir /* system's "/usr/bin" */ + SYSTEMFONTDIR = SystemFontDir /* system's "/usr/share/fonts/X11" */ SHLIBDIR = ShLibDir /* shared libraries */ LINTLIBDIR = LintlibDir /* lint libraries */ MANPATH = ManPath /* top of manual page tree */ diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index d5c9f8982..89128d4c1 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -72,6 +72,7 @@ is" without express or implied warranty. #undef DEBUG const char * nxagentFontDirs[] = { + SYSTEMFONTDIR, "/usr/share/nx/fonts", "/usr/share/X11/fonts", "/usr/share/fonts/X11", diff --git a/nx-X11/programs/Xserver/hw/nxagent/Imakefile b/nx-X11/programs/Xserver/hw/nxagent/Imakefile index 6e68b80fc..ddbf08fab 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Imakefile +++ b/nx-X11/programs/Xserver/hw/nxagent/Imakefile @@ -255,6 +255,7 @@ DEFINES = \ -DRANDR_15_INTERFACE=1 \ -DPANORAMIX \ -UDEBUG_TREE \ + -DSYSTEMFONTDIR=\"$(SYSTEMFONTDIR)\" \ $(NULL) all:: $(OBJS) -- cgit v1.2.3 From 0086b8c2469fbf19a337f38f5431bd77da045332 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 20:08:57 +0200 Subject: Font.c: Avoid duplicate font paths --- nx-X11/programs/Xserver/hw/nxagent/Font.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index 89128d4c1..11496938c 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -1497,12 +1497,36 @@ void nxagentVerifyDefaultFontPath(void) for (int i = 0; ; i++) { - char *dir = nxagentFontDirs[i]; + int j; + const char *dir = nxagentFontDirs[i]; if (dir == NULL) + { break; + } else - nxagentVerifySingleFontPath(&fontPath, dir); + { + for (j = 0; j <= i; j++) + { + //if (strcmp(nxagentFontDirs[j], dir) == 0) + if (nxagentFontDirs[j] == dir) + { + break; + } + } + + if (j == i) + { + nxagentVerifySingleFontPath(&fontPath, dir); + } +#ifdef TEST + else + { + fprintf(stderr, "%s: Skipping duplicate font dir [%s].\n", __func__, + validateString(dir)); + } +#endif + } } if (*fontPath == '\0') -- cgit v1.2.3 From 453edbd21032ed51bba08e7368ed3ee5c45430d3 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Tue, 23 Apr 2019 20:09:25 +0200 Subject: Font.c: use __func__ in TEST prints --- nx-X11/programs/Xserver/hw/nxagent/Font.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c index 11496938c..8de50fdc3 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Font.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c @@ -703,7 +703,7 @@ Bool nxagentUnrealizeFont(ScreenPtr pScreen, FontPtr pFont) int nxagentDestroyNewFontResourceType(void * p, XID id) { #ifdef TEST - fprintf(stderr, "nxagentDestroyNewFontResourceType: Destroying mirror id [%ld] for font at [%p].\n", + fprintf(stderr, "%s: Destroying mirror id [%ld] for font at [%p].\n", __func__, nxagentFontPriv((FontPtr) p) -> mirrorID, (void *) p); #endif @@ -1410,14 +1410,14 @@ static Bool nxagentGetFontServerPath(char * fontServerPath, int size) snprintf(fontServerPath, min(size, len + 1), "%s", path + 1); #ifdef TEST - fprintf(stderr, "nxagentGetFontServerPath: Got path [%s].\n", + fprintf(stderr, "%s: Got path [%s].\n", __func__, fontServerPath); #endif } else { #ifdef TEST - fprintf(stderr, "nxagentGetFontServerPath: WARNING! Font server tunneling not enabled.\n"); + fprintf(stderr, "%s: WARNING! Font server tunneling not enabled.\n", __func__); #endif return False; @@ -1426,7 +1426,7 @@ static Bool nxagentGetFontServerPath(char * fontServerPath, int size) else { #ifdef TEST - fprintf(stderr, "nxagentGetFontServerPath: WARNING! Failed to get path for font server tunneling.\n"); + fprintf(stderr, "%s: WARNING! Failed to get path for font server tunneling.\n", __func__); #endif return False; @@ -1478,7 +1478,7 @@ void nxagentVerifyDefaultFontPath(void) static char *fontPath; #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Going to search for one or more valid font paths.\n"); + fprintf(stderr, "%s: Going to search for one or more valid font paths.\n", __func__); #endif /* @@ -1488,8 +1488,9 @@ void nxagentVerifyDefaultFontPath(void) if ((fontPath = strdup(defaultFontPath)) == NULL) { #ifdef WARNING - fprintf(stderr, "nxagentVerifyDefaultFontPath: WARNING! Unable to allocate memory for a new font path. " - "Using the default font path [%s].\n", validateString(defaultFontPath)); + fprintf(stderr, "%s: WARNING! Unable to allocate memory for a new font path. " + "Using the default font path [%s].\n", __func__, + validateString(defaultFontPath)); #endif return; @@ -1529,13 +1530,12 @@ void nxagentVerifyDefaultFontPath(void) } } - if (*fontPath == '\0') + if (*fontPath == '\0') { #ifdef WARNING - fprintf(stderr, "nxagentVerifyDefaultFontPath: WARNING! Can't find a valid font directory.\n"); - - fprintf(stderr, "nxagentVerifyDefaultFontPath: WARNING! Using font path [%s].\n", - validateString(defaultFontPath)); + fprintf(stderr, "%s: WARNING! Can't find a valid font directory.\n", __func__); + fprintf(stderr, "%s: WARNING! Using font path [%s].\n", __func__, + validateString(defaultFontPath)); #endif } else @@ -1543,10 +1543,10 @@ void nxagentVerifyDefaultFontPath(void) /* do _not_ free defaultFontPath here - it's either set at compile time or part of argv */ defaultFontPath = fontPath; - + #ifdef TEST - fprintf(stderr, "nxagentVerifyDefaultFontPath: Using font path [%s].\n", - validateString(defaultFontPath)); + fprintf(stderr, "%s: Using font path [%s].\n", __func__, + validateString(defaultFontPath)); #endif } -- cgit v1.2.3