* gnu/packages/patches/ghostscript-leptonica-hurd.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/ghostscript.scm (ghostscript)[arguments]: When building for the Hurd, add phase 'patch-leptonica' and use it.
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Upstream status: This patch was taken from leptonica upstream.
 | |
| 
 | |
| Backported to ghostscripts bundled leptonica.
 | |
| 
 | |
| From f04da7c816feb1d5f689c34f3d0e7e3621edf1f5 Mon Sep 17 00:00:00 2001
 | |
| From: Samuel Thibault <samuel.thibault@ens-lyon.org>
 | |
| Date: Wed, 1 Feb 2023 19:35:43 +0100
 | |
| Subject: [PATCH] Fix GNU/Hurd build
 | |
| 
 | |
| There is no PATH_MAX limitation on GNU/Hurd, and realpath() can be
 | |
| safely be used with its second parameter set to NULL (as required by
 | |
| posix since its version 2001).
 | |
| ---
 | |
|  src/sarray1.c | 29 +++++++++++++++++++++++------
 | |
|  1 file changed, 23 insertions(+), 6 deletions(-)
 | |
| 
 | |
| --- a/src/sarray1.c	2023-06-13 12:31:13.393672916 +0200
 | |
| +++ a/src/sarray1.c	2023-06-13 12:34:13.574237149 +0200
 | |
| @@ -1953,7 +1953,11 @@
 | |
|  SARRAY *
 | |
|  getFilenamesInDirectory(const char  *dirname)
 | |
|  {
 | |
| +#if _POSIX_VERSION >= 200112 || defined(__GLIBC__)
 | |
| +char           *dir;
 | |
| +#else
 | |
|  char            dir[PATH_MAX + 1];
 | |
| +#endif
 | |
|  char           *realdir, *stat_path, *ignore;
 | |
|  size_t          size;
 | |
|  SARRAY         *safiles;
 | |
| @@ -1976,17 +1980,28 @@
 | |
|              * If the file or directory exists, realpath returns its path;
 | |
|                else it returns NULL.
 | |
|              * If the second arg to realpath is passed in, the canonical path
 | |
| -              is returned there.  Use a buffer of sufficient size.  If the
 | |
| -              second arg is NULL, the path is malloc'd and returned if the
 | |
| -              file or directory exists.
 | |
| -           We pass in a buffer for the second arg, and check that the canonical
 | |
| -           directory path was made.  The existence of the directory is checked
 | |
| -           later, after its actual path is returned by genPathname().  */
 | |
| +              is returned there.  Use a buffer of sufficient size.
 | |
| +              We pass in a buffer for the second arg, and check that the
 | |
| +              canonical directory path was made.  The existence of the
 | |
| +              directory is checked later, after its actual path is returned by
 | |
| +              genPathname().
 | |
| +              With GNU libc or Posix 2001, if the second arg is NULL, the path
 | |
| +              is malloc'd and returned if the file or directory exists.
 | |
| +           */
 | |
| +#if _POSIX_VERSION >= 200112 || defined(__GLIBC__)
 | |
| +    dir = realpath(dirname, NULL);
 | |
| +    if (dir == NULL)
 | |
| +        return (SARRAY *)ERROR_PTR("dir not made", __func__, NULL);
 | |
| +#else
 | |
|      dir[0] = '\0';  /* init empty in case realpath() fails to write it */
 | |
|      ignore = realpath(dirname, dir);
 | |
|      if (dir[0] == '\0')
 | |
|          return (SARRAY *)ERROR_PTR("dir not made", procName, NULL);
 | |
| +#endif
 | |
|      realdir = genPathname(dir, NULL);
 | |
| +#if _POSIX_VERSION >= 200112 || defined(__GLIBC__)
 | |
| +    LEPT_FREE(dir);
 | |
| +#endif
 | |
|      if ((pdir = opendir(realdir)) == NULL) {
 | |
|          LEPT_FREE(realdir);
 | |
|          return (SARRAY *)ERROR_PTR("pdir not opened", procName, NULL);
 | |
| @@ -1998,10 +2013,12 @@
 | |
|          stat_ret = fstatat(dfd, pdirentry->d_name, &st, 0);
 | |
|  #else
 | |
|          size = strlen(realdir) + strlen(pdirentry->d_name) + 2;
 | |
| +#if _POSIX_VERSION < 200112 && !defined(__GLIBC__)
 | |
|          if (size > PATH_MAX) {
 | |
|              L_ERROR("size = %zu too large; skipping\n", procName, size);
 | |
|              continue;
 | |
|          }
 | |
| +#endif
 | |
|          stat_path = (char *)LEPT_CALLOC(size, 1);
 | |
|          snprintf(stat_path, size, "%s/%s", realdir, pdirentry->d_name);
 | |
|          stat_ret = stat(stat_path, &st);
 |