- if ((ibuf = fopen(name, "r")) == NULL) {
- if (isedit)
- perror(name);
- else
- printf("No mail for %s\n", myname);
+ if ((ibuf = fopen(name, "r")) == NULL)
+ return(-1);
+
+ if (fstat(fileno(ibuf), &stb) < 0) {
+ fclose(ibuf);
+ return (-1);
+ }
+
+ switch (stb.st_mode & S_IFMT) {
+ case S_IFDIR:
+ fclose(ibuf);
+ errno = EISDIR;
+ return (-1);
+
+ case S_IFREG:
+ break;
+
+ default:
+ fclose(ibuf);
+ errno = EINVAL;
+ return (-1);
+ }
+
+ if (!edit && stb.st_size == 0) {
+ fclose(ibuf);