Dear CLISP team,
I've recently built (vanilla) clisp-2.42 on MacOS X 10.5 (aka
Leopard). The resulting binary exhibited the infamous "Error 45"
problem [1], i.e. running
clisp | tee clisp.log # for example
yields the the following error message:
>
*** - UNIX error 45: Operation not supportd
(in an endless loop for CVS head even)
The MacPorts project [1] seems to work around this bug by compiling
clisp using
-D_NONSTD_SOURCE cflags. This however is an undesirable situation as
the include file /usr/include/sys/cdefs.h has the following to say
about this option:
/*
* COMPILATION ENVIRONMENTS
* [...]
* LEGACY Defining _NONSTD_SOURCE will get pre-POSIX APIs plus
Apple
* API extensions in scope.
*
* This is generally equivalent to the Tiger release
compilation
* environment, except that it cannot be applied to 64
bit code;
* its use is discouraged.
*
* We expect this environment to be deprecated in the
future.
* [...]
*/
The cause of the bug: Apple changed the value of EOPNOTSUPP to 102 in /
usr/include/sys/errno.h in the STANDARD compilation environment. This
seems to be due to the UNIX2003 certification that MacOS X 10.5 has
received. ENOTSUP however still is defined to be 45, and this is the
value the Darwin 9 kernel returns to user space. The problem can be
corrected by checking for both the ENOTSUP and the EOPNOTSUPP error
code in src/stream.d:
--- START PATCH ---
--- clisp-2.42/src/stream.d.ORIG 2007-11-05 20:17:55.000000000 +0100
+++ clisp-2.42/src/stream.d 2007-10-03 15:30:26.000000000 +0200
@@ -3463,7 +3463,7 @@
if ((errno != EBADF) && (errno != EACCES) && (errno !=
EBADRQC))
#endif
#ifdef UNIX_DARWIN
- if ((errno != EOPNOTSUPP) && (errno != ENOTSUP) && (errno !
= ENODEV))
+ if ((errno != EOPNOTSUPP) && (errno != ENODEV))
#endif
if (!(errno==EINVAL))
{ OS_error(); }
@@ -3474,7 +3474,7 @@
if (!( TCDRAIN(handle) ==0)) {
if (!((errno==ENOTTY)||(errno==EINVAL)))
#ifdef UNIX_DARWIN
- if (!((errno==EOPNOTSUPP)||(errno==ENOTSUP)||(errno==ENODEV)))
+ if (!((errno==EOPNOTSUPP)||(errno==ENODEV)))
#endif
{ OS_error(); } # no TTY: OK, report other Error
} else goto ok;
@@ -3523,7 +3523,7 @@
if ((errno != EBADF) && (errno != EACCES) && (errno !=
EBADRQC))
#endif
#ifdef UNIX_DARWIN
- if ((errno != EOPNOTSUPP) && (errno != ENOTSUP) && (errno !=
ENODEV))
+ if ((errno != EOPNOTSUPP) && (errno != ENODEV))
#endif
if (!(errno==EINVAL))
OS_error();
@@ -3549,7 +3549,7 @@
#endif
if (!((errno==ENOTTY)||(errno==EINVAL)))
#ifdef UNIX_DARWIN
- if (!((errno==EOPNOTSUPP)||(errno==ENOTSUP)||(errno==ENODEV)))
+ if (!((errno==EOPNOTSUPP)||(errno==ENODEV)))
#endif
{ OS_error(); } # no TTY: OK, report other Error
}
--- END PATCH ---
The patch has been tested against the current CVS head (as of Wed Nov
7 10:29:03 UTC 2007).
Kindest Regards,
Ralf-Philipp Weinmann
[1] Martin Costabel:
[Fink-devel] clisp, maxima and the UNIX error 45,
22 Jun 2005 01:59:06 -0700
http://www.mail-archive.com/[EMAIL PROTECTED]/msg11839.html
[2] MacPorts
http://www.macports.org/
--
Ralf-P. Weinmann <[EMAIL PROTECTED]>
TU Darmstadt, FB Informatik, Cryptography & Computer Algebra
PGP fingerprint: 1024D/EF114FC02F150EB9D4F275B6159CEBEAEFCD9B06
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---