From 3fc619899628a432685e6b94960a3d9cdf2cfbec Mon Sep 17 00:00:00 2001 From: dtb Date: Mon, 14 Aug 2023 20:41:02 -0400 Subject: [PATCH] iron out bugs --- cat/cat.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/cat/cat.c b/cat/cat.c index 08e3418..a80fa17 100644 --- a/cat/cat.c +++ b/cat/cat.c @@ -9,12 +9,11 @@ /* NetBSD's default size according to an strace */ static unsigned char buf[4096]; -static char **default_argv = { - (char [])"cat", - (char [])"-", - NULL -} -static char *program_name = *default_argv; +static char *default_argv[] = { + "cat", + "-", + (char *)NULL +}; static char *stdout_name = "/dev/stdout"; int main(int argc, char *argv[]){ @@ -53,13 +52,13 @@ int main(int argc, char *argv[]){ if(arguing && *argv[optind] == '-'){ /* "--" */ arguing = 0; continue; + } if(*argv[optind] == '-' && argv[optind][1] == '\0'){ /* "-" */ fn = stdout_name; fo = stdout; }else{ fn = argv[optind]; if(stat(fn, &fi) == -1){ - fclose(fo); switch(errno){ case EFAULT: case ENOENT: case ENOTDIR: fprintf(stderr, @@ -82,11 +81,16 @@ int main(int argc, char *argv[]){ } } if(S_ISDIR(fi.st_mode)){ - fclose(fo); fprintf(stderr, "%s: %s: Is a directory.\n", argv[0], fn); return EX_DATAERR; } + if((fo = fopen(fn, "r")) == NULL){ + fprintf(stderr, + "%s: %s: Error opening file.\n", + argv[0], fn); + return EX_OSERR; + } } while((c = getc(fo)) != EOF)