diff --git a/ChangeLog b/ChangeLog index b3bca4819125859a71102af699299309abcee987..0dbd2356dd161fa1f57a1779a3d85332cf9dc072 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,8 @@ General - Change open call flags, basically copy joe's way of doing it so a more recent version will actually be included in (un)stable. - Remove useless fstat call. + open_file() + - Added check for S_ISBLK and S_ISCHR, don't open device files! - nano.c: renumber() - Dont stupidly assign the value of prev->lineno if prev == NULL! diff --git a/files.c b/files.c index fedba8816d242b3e421b24e928a4a4e2bcfefce6..aa797e1467b634204f65cb973eb659727258ab59 100644 --- a/files.c +++ b/files.c @@ -229,8 +229,14 @@ int open_file(char *filename, int insert, int quiet) statusbar("%s: %s", strerror(errno), filename); return -1; } else { /* File is A-OK */ - if (S_ISDIR(fileinfo.st_mode)) { - statusbar(_("File \"%s\" is a directory"), filename); + if (S_ISDIR(fileinfo.st_mode) || S_ISCHR(fileinfo.st_mode) || + S_ISBLK(fileinfo.st_mode)) { + if (S_ISDIR(fileinfo.st_mode)) + statusbar(_("File \"%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; @@ -303,7 +309,7 @@ int write_file(char *name, int tmp) char buf[PATH_MAX + 1]; filestruct *fileptr; int fd, mask = 0, realexists, anyexists; - struct stat st, lst, st2; + struct stat st, lst; static char *realname = NULL; if (!strcmp(name, "")) {