guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: gnu: fontconfig: Fix PATH_MAX for Hurd systems.


From: Manolis Fragkiskos Ragkousis
Subject: 01/01: gnu: fontconfig: Fix PATH_MAX for Hurd systems.
Date: Thu, 2 Mar 2017 10:14:53 -0500 (EST)

phant0mas pushed a commit to branch core-updates
in repository guix.

commit 37e78bc7f2707ec621274e4ed8c307a3da9843c6
Author: Rene Saavedra <address@hidden>
Date:   Wed Mar 1 19:19:01 2017 -0600

    gnu: fontconfig: Fix PATH_MAX for Hurd systems.
    
    * gnu/packages/patches/fontconfig-path-max.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Add it.
    * gnu/packages/fontutils.scm (fontconfig)[source]: Use it.
    
    Signed-off-by: Manolis Ragkousis <address@hidden>
---
 gnu/local.mk                                   |   3 +-
 gnu/packages/fontutils.scm                     |   4 +-
 gnu/packages/patches/fontconfig-path-max.patch | 124 +++++++++++++++++++++++++
 3 files changed, 129 insertions(+), 2 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 3d9ad70..abb1b04 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -5,7 +5,7 @@
 # Copyright © 2013, 2014, 2015, 2016 Mark H Weaver <address@hidden>
 # Copyright © 2016 Chris Marusich <address@hidden>
 # Copyright © 2016, 2017 Kei Kebreau <address@hidden>
-# Copyright © 2016 Rene Saavedra <address@hidden>
+# Copyright © 2016, 2017 Rene Saavedra <address@hidden>
 # Copyright © 2016 Adonay "adfeno" Felipe Nogueira 
<https://libreplanet.org/wiki/User:Adfeno> <address@hidden>
 # Copyright © 2016, 2017 Ricardo Wurmus <address@hidden>
 # Copyright © 2016 Ben Woodcroft <address@hidden>
@@ -559,6 +559,7 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/fltk-shared-lib-defines.patch           \
   %D%/packages/patches/fltk-xfont-on-demand.patch              \
   %D%/packages/patches/fontconfig-charwidth-symbol-conflict.patch      \
+  %D%/packages/patches/fontconfig-path-max.patch               \
   %D%/packages/patches/fontforge-svg-modtime.patch             \
   %D%/packages/patches/freeimage-CVE-2015-0852.patch           \
   %D%/packages/patches/freeimage-CVE-2016-5684.patch           \
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 136b5bc..d89bd49 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014, 2016 Eric Bavier <address@hidden>
 ;;; Copyright © 2016 Mark H Weaver <address@hidden>
 ;;; Copyright © 2016, 2017 Efraim Flashner <address@hidden>
+;;; Copyright © 2017 Rene Saavedra <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -229,7 +230,8 @@ fonts to/from the WOFF2 format.")
             (uri (string-append
                    
"https://www.freedesktop.org/software/fontconfig/release/fontconfig-";
                    version ".tar.bz2"))
-            (patches (search-patches 
"fontconfig-charwidth-symbol-conflict.patch"))
+            (patches (search-patches 
"fontconfig-charwidth-symbol-conflict.patch"
+                                     "fontconfig-path-max.patch"))
             (sha256 (base32
                      "1wy7svvp7df6bjpg1m5vizb3ngd7rhb20vpclv3x3qa71khs6jdl"))))
    (build-system gnu-build-system)
diff --git a/gnu/packages/patches/fontconfig-path-max.patch 
b/gnu/packages/patches/fontconfig-path-max.patch
new file mode 100644
index 0000000..e12f60e
--- /dev/null
+++ b/gnu/packages/patches/fontconfig-path-max.patch
@@ -0,0 +1,124 @@
+This patch fix the build on GNU/Hurd, due to PATH_MAX isn't defined.
+
+The patch was adapted from upstream source repository:
+'<https://cgit.freedesktop.org/fontconfig/commit/?id=abdb6d658e1a16410dd1c964e365a3ebd5039e7c>'
+Commit: abdb6d658e1a16410dd1c964e365a3ebd5039e7c
+
+---
+ src/fcdefault.c | 34 +++++++++++++++++++++++++++-------
+ src/fcint.h     |  6 ++++++
+ src/fcstat.c    | 12 +++++++++++-
+ 3 files changed, 44 insertions(+), 8 deletions(-)
+
+diff --git a/src/fcdefault.c b/src/fcdefault.c
+index 6647a8f..5afd7ec 100644
+--- a/src/fcdefault.c
++++ b/src/fcdefault.c
+@@ -148,17 +148,34 @@ retry:
+           prgname = FcStrdup ("");
+ #else
+ # if defined (HAVE_GETEXECNAME)
+-      const char *p = getexecname ();
++      char *p = FcStrdup(getexecname ());
+ # elif defined (HAVE_READLINK)
+-      char buf[PATH_MAX + 1];
+-      int len;
++      size_t size = FC_PATH_MAX;
+       char *p = NULL;
+ 
+-      len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1);
+-      if (len != -1)
++      while (1)
+       {
+-          buf[len] = '\0';
+-          p = buf;
++          char *buf = malloc (size);
++          ssize_t len;
++
++          if (!buf)
++              break;
++
++          len = readlink ("/proc/self/exe", buf, size - 1);
++          if (len < 0)
++          {
++              free (buf);
++              break;
++          }
++          if (len < size - 1)
++          {
++              buf[len] = 0;
++              p = buf;
++              break;
++          }
++
++          free (buf);
++          size *= 2;
+       }
+ # else
+       char *p = NULL;
+@@ -176,6 +193,9 @@ retry:
+ 
+       if (!prgname)
+           prgname = FcStrdup ("");
++
++      if (p)
++          free (p);
+ #endif
+ 
+       if (!fc_atomic_ptr_cmpexch (&default_prgname, NULL, prgname)) {
+diff --git a/src/fcint.h b/src/fcint.h
+index ac911ad..dad34c5 100644
+--- a/src/fcint.h
++++ b/src/fcint.h
+@@ -70,6 +70,12 @@ extern pfnSHGetFolderPathA pSHGetFolderPathA;
+ #  define FC_DIR_SEPARATOR_S       "/"
+ #endif
+ 
++#ifdef PATH_MAX
++#define FC_PATH_MAX   PATH_MAX
++#else
++#define FC_PATH_MAX   128
++#endif
++
+ #if __GNUC__ >= 4
+ #define FC_UNUSED     __attribute__((unused))
+ #else
+diff --git a/src/fcstat.c b/src/fcstat.c
+index 1734fa4..f6e1aaa 100644
+--- a/src/fcstat.c
++++ b/src/fcstat.c
+@@ -278,8 +278,13 @@ FcDirChecksum (const FcChar8 *dir, time_t *checksum)
+       {
+ #endif
+       struct stat statb;
+-      char f[PATH_MAX + 1];
++      char *f = malloc (len + 1 + dlen + 1);
+ 
++      if (!f)
++      {
++          ret = -1;
++          goto bail;
++      }
+       memcpy (f, dir, len);
+       f[len] = FC_DIR_SEPARATOR;
+       memcpy (&f[len + 1], files[n]->d_name, dlen);
+@@ -287,11 +292,16 @@ FcDirChecksum (const FcChar8 *dir, time_t *checksum)
+       if (lstat (f, &statb) < 0)
+       {
+           ret = -1;
++          free (f);
+           goto bail;
+       }
+       if (S_ISDIR (statb.st_mode))
++      {
++          free (f);
+           goto bail;
++      }
+ 
++      free (f);
+       dtype = statb.st_mode;
+ #ifdef HAVE_STRUCT_DIRENT_D_TYPE
+       }
+-- 
+2.11.0
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]