diff --git a/System/Shell/Commands/cat.HC b/System/Shell/Commands/cat.HC index 103cd7f..50a4d0b 100644 --- a/System/Shell/Commands/cat.HC +++ b/System/Shell/Commands/cat.HC @@ -20,20 +20,31 @@ I64 @shell_cmd_cat(@shell* sh, I64 argc, U8** argv) return 0; I64 i; I64 j; + I64 res = 0; I64 size = 0; U8* filename = NULL; U8* buf = NULL; + U8 msg[512]; for (i = 1; i < argc; i++) { if (!MemCmp(argv[i], "http://", 7) || !MemCmp(argv[i], "https://", 8)) { buf = @cat_buf_from_url_string(argv[i], &size); } else { filename = @shell_expand_relative_path(sh, argv[i]); - buf = FileSystem.ReadFile(filename, &size); + if (!FileSystem.PathExists(filename)) { + res = 2; + StrPrint(&msg, "cat: cannot access '%s': No such file or directory\n", filename); + Stdio.WriteLine(sh, &msg); + } else { + buf = FileSystem.ReadFile(filename, &size); + } + } + if (buf) { + for (j = 0; j < size; j++) { + FifoU8Ins(sh->output, buf[j]); + } + Free(buf); } - for (j = 0; j < size; j++) - FifoU8Ins(sh->output, buf[j]); - Free(buf); Free(filename); } - return 0; + return res; } \ No newline at end of file