From 99bc28f43e4589c8fa6149471448e5507a16041b Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Sat, 25 Jun 1994 00:13:53 +0000 Subject: [PATCH] (Finsert_file_contents): Fix check for non-regular files. --- src/fileio.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/fileio.c b/src/fileio.c index e1131ce8860..08632ab1ff8 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2593,14 +2593,14 @@ and (2) it puts less data in the undo list.") fd = -1; #ifndef APOLLO - if (stat (XSTRING (filename)->data, &st) < 0 - || (fd = open (XSTRING (filename)->data, 0)) < 0) + if (stat (XSTRING (filename)->data, &st) < 0) #else if ((fd = open (XSTRING (filename)->data, 0)) < 0 || fstat (fd, &st) < 0) #endif /* not APOLLO */ { if (fd >= 0) close (fd); + badopen: if (NILP (visit)) report_file_error ("Opening input file", Fcons (filename, Qnil)); st.st_mtime = -1; @@ -2608,22 +2608,26 @@ and (2) it puts less data in the undo list.") goto notfound; } - /* Replacement should preserve point as it preserves markers. */ - if (!NILP (replace)) - record_unwind_protect (restore_point_unwind, Fpoint_marker ()); - - record_unwind_protect (close_file_unwind, make_number (fd)); - -#ifdef S_IFSOCK +#ifdef S_IFREG /* This code will need to be changed in order to work on named pipes, and it's probably just not worth it. So we should at least signal an error. */ - if ((st.st_mode & S_IFMT) == S_IFSOCK) + if (!S_ISREG (st.st_mode)) Fsignal (Qfile_error, - Fcons (build_string ("reading from named pipe"), + Fcons (build_string ("not a regular file"), Fcons (filename, Qnil))); #endif + if (fd < 0) + if ((fd = open (XSTRING (filename)->data, 0)) < 0) + goto badopen; + + /* Replacement should preserve point as it preserves markers. */ + if (!NILP (replace)) + record_unwind_protect (restore_point_unwind, Fpoint_marker ()); + + record_unwind_protect (close_file_unwind, make_number (fd)); + /* Supposedly happens on VMS. */ if (st.st_size < 0) error ("File size is negative"); -- 2.39.5