From fc6f690727aac2b5c9bd368f9b13188fb0ba36a7 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 16 Jul 2026 13:07:28 +0200 Subject: fs: reject open()/read() on a directory (EISDIR) open() now checks the target's inode type: opening a directory as a file returns $FE (EISDIR) instead of a valid fd, so 'cat docs' no longer streams the raw directory block as bytes. cat reports 'is a directory'; wc/head/save treat any invalid fd (>3) as an open failure. (ls is unaffected - it uses the structural opendir/list path, not open/getb.) --- c/cat.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'c/cat.c') diff --git a/c/cat.c b/c/cat.c index dde58cd..790cb88 100644 --- a/c/cat.c +++ b/c/cat.c @@ -6,7 +6,8 @@ void main(void) { if (argc > 0) { unsigned char fd = open(argv[0], O_READ); int ch; - if (fd == NOFD) { puts("cat: no such file"); nl(); return; } + if (fd == EISDIR) { puts("cat: is a directory"); nl(); return; } + if (fd == NOFD) { puts("cat: no such file"); nl(); return; } while ((ch = fgetc(fd)) >= 0) putc((char)ch); close(fd); } else { -- cgit v1.3.1-sl0p