Package: ecl
Version: 0.9i-2
Severity: important
Tags: patch
Justification: fails to build from source

ECL throws an error during compilation if neither MAXPATHLEN nor
PATH_MAX are defined, though POSIX explicitely permits those constants
to be undefined. Applications should test for their definition and if
needed use sysconf() to get the actual value.

As neither constant is defined on Hurd, ECL wouldn't build at all.

Here is a preliminary (and rather unintrusive) patch that doesn't check
at runtime for the limit but enable building ECL:



diff -r 045b9347e44a src/c/pathname.d
--- a/src/c/pathname.d  Tue Feb 06 17:36:54 2007 +0100
+++ b/src/c/pathname.d  Sat Feb 10 06:27:50 2007 +0100
@@ -29,8 +29,8 @@
 #ifndef MAXPATHLEN
 # ifdef PATH_MAX
 #   define MAXPATHLEN PATH_MAX
-# else
-#   error "Either MAXPATHLEN or PATH_MAX should be defined"
+//# else
+//#   error "Either MAXPATHLEN or PATH_MAX should be defined"
 # endif
 #endif
 
@@ -754,8 +754,10 @@ si_coerce_to_filename(cl_object pathname
                FEerror("Pathname ~A does not have a physical namestring",
                        1, pathname_orig);
        }
+#ifdef MAXPATHLEN
        if (namestring->base_string.fillp >= MAXPATHLEN - 16)
                FEerror("Too long filename: ~S.", 1, namestring);
+#endif
        return namestring;
 }
 
diff -r 045b9347e44a src/c/unixfsys.d
--- a/src/c/unixfsys.d  Tue Feb 06 17:36:54 2007 +0100
+++ b/src/c/unixfsys.d  Sat Feb 10 06:38:53 2007 +0100
@@ -49,8 +49,8 @@
 #ifndef MAXPATHLEN
 # ifdef PATH_MAX
 #   define MAXPATHLEN PATH_MAX
-# else
-#   error "Either MAXPATHLEN or PATH_MAX should be defined"
+//# else
+//#   error "Either MAXPATHLEN or PATH_MAX should be defined"
 # endif
 #endif
 
@@ -247,7 +247,15 @@ FILE *
 FILE *
 backup_fopen(const char *filename, const char *option)
 {
+#ifdef MAXPATHLEN
        char backupfilename[MAXPATHLEN];
+#else
+       char *backupfilename = malloc(strlen(filename) + 5);
+       if (backupfilename == NULL) {
+               // not sure how allocation failure should be dealt with
+               FElibc_error("Cannot allocate memory for backup filename", 0);
+       }
+#endif
 
        strcat(strcpy(backupfilename, filename), ".BAK");
 #ifdef _MSC_VER
@@ -258,6 +266,9 @@ backup_fopen(const char *filename, const
        if (rename(filename, backupfilename))
                FElibc_error("Cannot rename the file ~S to ~S.", 2,
                             make_constant_base_string(filename), 
make_simple_base_string(backupfilename));
+#ifndef MAXPATHLEN
+       free(backupfilename);
+#endif
        return fopen(filename, option);
 }
 



-- System Information:
Debian Release: 4.0
  APT prefers testing
  APT policy: (990, 'testing'), (501, 'stable'), (500, 'unstable'), (500, 
'stable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.17-2-k7
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)

Versions of packages ecl depends on:
ii  common-lisp-controller    6.9            This is a Common Lisp source and c
ii  gcc-4.1                   4.1.1-21       The GNU C compiler
ii  libc6                     2.3.6.ds1-10   GNU C Library: Shared libraries
ii  libgc-dev                 1:6.8-1        conservative garbage collector for
ii  libgc1c2                  1:6.8-1        conservative garbage collector for
ii  libgmp3-dev               2:4.2.1+dfsg-4 Multiprecision arithmetic library 
ii  libgmp3c2                 2:4.2.1+dfsg-4 Multiprecision arithmetic library
ii  libncurses5-dev           5.5-5          Developer's libraries and docs for

ecl recommends no packages.

-- no debconf information

-- 
[EMAIL PROTECTED]
OpenPGP 0xD9D50D8A

Attachment: signature.asc
Description: Digital signature

Reply via email to