CLHS mandates that failure to determine or set the file position on a
stream should be signalled by returning NIL rather than raising an error.
Also, POSIX does not mandate that lseek fail on terminals, but these devices
obviously are not seekable. Hence, CLHS compliance is improved by explicitly
returning NIL when the requested stream is a tty.
io_file_get_position(cl_object strm)
{
int f = IO_FILE_DESCRIPTOR(strm);
+ if (isatty(f)) return(ECL_NIL);
+
cl_object output;
ecl_off_t offset;
offset = lseek(f, 0, SEEK_CUR);
ecl_enable_interrupts();
unlikely_if (offset < 0)
- io_error(strm);
+ if (errno == ESPIPE)
+ return(ECL_NIL);
+ else
+ io_error(strm);
if (sizeof(ecl_off_t) == sizeof(long)) {
output = ecl_make_integer(offset);
} else {
io_file_set_position(cl_object strm, cl_object large_disp)
{
int f = IO_FILE_DESCRIPTOR(strm);
+ if (isatty(f)) return(ECL_NIL);
ecl_off_t disp;
int mode;
if (Null(large_disp)) {