Patches item #304464, was opened at 10/02/2007 16:48 Status: Open Priority: 3 Submitted By: Pierre THIERRY (nowhrman-guest) Assigned to: Nobody (None) Summary: ecl PATH_MAX Resolution: None Group: unreviewed Category: posix
Initial Comment: ECL was relying on PATH_MAX or MAXPATHLEN be defined. Here is a preliminary patch: diff -r 045b9347e44a src/c/main.d --- a/src/c/main.d Tue Feb 06 17:36:54 2007 +0100 +++ b/src/c/main.d Sat Feb 10 16:08:38 2007 +0100 @@ -174,6 +174,8 @@ cl_boot(int argc, char **argv) ARGV = argv; ecl_self = argv[0]; + path_max = sysconf(_PC_PATH_MAX); + init_alloc(); GC_disable(); #ifdef ECL_THREADS 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 16:35:37 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,13 @@ 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) +#else + if (path_max != -1 && namestring->base_string.fillp >= path_max - 16) +#endif FEerror("Too long filename: ~S.", 1, namestring); + 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 16:11:52 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); } diff -r 045b9347e44a src/h/ecl.h --- a/src/h/ecl.h Tue Feb 06 17:36:54 2007 +0100 +++ b/src/h/ecl.h Sat Feb 10 16:06:35 2007 +0100 @@ -15,6 +15,7 @@ #ifndef _MSC_VER #include <sys/param.h> /* includes <sys/signal.h> and <sys/types.h> */ +int path_max; #else #include <limits.h> #endif ---------------------------------------------------------------------- Comment By: Pierre THIERRY (nowhrman-guest) Date: 11/02/2007 19:10 Message: I received specific comments on this patch from an ECL maintainer, and made an improved version. I'll publish it when reviewed by people from ECL. ---------------------------------------------------------------------- You can respond by visiting: http://alioth.debian.org/tracker/?func=detail&atid=410472&aid=304464&group_id=30628 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]