From 54c1f7932cf26c9a87f4de789b3667642a990940 Mon Sep 17 00:00:00 2001
From: Chris Allegretta <chrisa@asty.org>
Date: Sun, 26 Jan 2003 04:11:09 +0000
Subject: [PATCH] - files.c:open_file() - Fix FD leak with file load error
 (David Benbennick)

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1390 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog |  3 +++
 files.c   | 21 +++++++++------------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 47f66f43..d12a7fdd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,9 @@ CVS Code -
   do_cut_text()
 	- Fix incorrect cursor location when cutting long lines
 	  (David Benbennick).
+- files.c:
+  open_file()
+	- Fix FD leak with file load error (David Benbennick).
 - nano.c:
   main()
 	- Call load_file with arg 0 for insert, as we aren't really
diff --git a/files.c b/files.c
index 037dc8fa..75698f6e 100644
--- a/files.c
+++ b/files.c
@@ -339,6 +339,14 @@ int open_file(const char *filename, int insert, int quiet)
 	    statusbar(_("New File"));
 	    new_file();
 	}
+    } else if (S_ISDIR(fileinfo.st_mode) || S_ISCHR(fileinfo.st_mode) ||
+		S_ISBLK(fileinfo.st_mode)) {
+	/* Don't open character or block files.  Sorry, /dev/sndstat! */
+	statusbar(S_ISDIR(fileinfo.st_mode) ? _("\"%s\" is a directory") :
+			_("File \"%s\" is a device file"), filename);
+	if (!insert)
+	    new_file();
+	return -1;
     } else if ((fd = open(filename, O_RDONLY)) == -1) {
 	/* If we're in multibuffer mode, don't be quiet when an error
 	   occurs while opening a file */
@@ -352,23 +360,12 @@ int open_file(const char *filename, int insert, int quiet)
 	    new_file();
 	return -1;
     } else {			/* File is A-OK */
-	if (S_ISDIR(fileinfo.st_mode) || S_ISCHR(fileinfo.st_mode) || 
-		S_ISBLK(fileinfo.st_mode)) {
-	    if (S_ISDIR(fileinfo.st_mode))
-		statusbar(_("\"%s\" is a directory"), filename);
-	    else
-		/* Don't open character or block files.  Sorry, /dev/sndstat! */
-		statusbar(_("File \"%s\" is a device file"), filename);
-
-	    if (!insert)
-		new_file();
-	    return -1;
-	}
 	if (!quiet)
 	    statusbar(_("Reading File"));
 	f = fdopen(fd, "rb"); /* Binary for our own line-end munging */
 	if (f == NULL) {
 	    nperror("fdopen");
+	    close(fd);
 	    return -1;
 	}
 	read_file(f, filename, quiet);
-- 
GitLab