40 lines
1005 B
Diff
40 lines
1005 B
Diff
|
--- less-436/filename.c 2009-07-06 22:52:23.000000000 +0200
|
||
|
+++ less-436_vvitek/filename.c 2010-12-08 16:01:41.269695932 +0100
|
||
|
@@ -879,17 +879,32 @@ open_altfile(filename, pf, pfd)
|
||
|
*/
|
||
|
f = fileno(fd);
|
||
|
SET_BINARY(f);
|
||
|
+ *pfd = (void *) fd;
|
||
|
+ *pf = f;
|
||
|
if (read(f, &c, 1) != 1)
|
||
|
{
|
||
|
/*
|
||
|
- * Pipe is empty. This means there is no alt file.
|
||
|
+ * Error or pipe is empty. Close it and
|
||
|
+ * check exit status of the pipe process.
|
||
|
*/
|
||
|
- pclose(fd);
|
||
|
+ if (pclose(fd) == 0) {
|
||
|
+ /*
|
||
|
+ * Exit status was zero, so the EOF was correct
|
||
|
+ * empty output. Let the program open /dev/null
|
||
|
+ * instead, as the pipe is already closed.
|
||
|
+ * Set force_open to omit bad_file() check
|
||
|
+ * failure, as it is special 'c' pseudo-device.
|
||
|
+ */
|
||
|
+ *pf = 0;
|
||
|
+ *pfd = NULL;
|
||
|
+ force_open = 1;
|
||
|
+ return (save("/dev/null"));
|
||
|
+ }
|
||
|
+ *pf = 0;
|
||
|
+ *pfd = NULL;
|
||
|
return (NULL);
|
||
|
}
|
||
|
ch_ungetchar(c);
|
||
|
- *pfd = (void *) fd;
|
||
|
- *pf = f;
|
||
|
return (save("-"));
|
||
|
}
|
||
|
#endif
|