aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFerass El Hafidi <vitali64pmemail@protonmail.com>2023-03-04 12:49:25 +0100
committerFerass El Hafidi <vitali64pmemail@protonmail.com>2023-03-04 12:49:25 +0100
commit487860806eac38e8fefb40b29f6fbe706e0b677e (patch)
tree0a80c9fba5ec43b2c298100da4a88d4bdf11051a
parent46f6f0e65f5ec7d3f49352c300fe97e5510eda1d (diff)
downloadfases-487860806eac38e8fefb40b29f6fbe706e0b677e.tar.gz
fases-487860806eac38e8fefb40b29f6fbe706e0b677e.zip
core/head: Properly handle standard input
Signed-off-by: Ferass El Hafidi <vitali64pmemail@protonmail.com>
-rw-r--r--core/head.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/core/head.c b/core/head.c
index 76bb9d9..1a49819 100644
--- a/core/head.c
+++ b/core/head.c
@@ -13,7 +13,7 @@
#include "../common/common.h"
int main(int argc, char *const argv[]) {
- int argument, i, lines, lines_printed;
+ int argument, i, lines = 10, lines_printed;
FILE *file;
char s[4096], *argv0 = strdup(argv[0]);
@@ -29,23 +29,20 @@ int main(int argc, char *const argv[]) {
else
lines = 10;
} argc -= optind; argv += optind;
- if (argc < 1) {
- while (read(STDIN_FILENO, s, 4096) > 0)
- printf("%s", s);
- }
- if (!lines) lines = 10;
- for (i = 0; i != argc; i++) {
- if (strcmp(argv[i], "-")) file = fopen(argv[i], "r");
- else while (read(STDIN_FILENO, s, 4096) > 0) printf("%s", s);
+
+ for (i = 0; i != argc || argc == 0; i++) {
+ if (argc == 0 || !strcmp(argv[i], "-"))
+ file = stdin;
+ else file = fopen(argv[i], "r");
if (file == NULL)
return errprint(argv0, argv[i], errno); /* Something went wrong */
for (lines_printed = 1; lines_printed <= lines; lines_printed++) {
if (fgets(s, 4096, file) != NULL)
printf("%s", s);
- else if (errno)
- return errprint(argv0, "fgets()", errno);
+ else return errprint(argv0, "fgets()", errno);
}
- fclose(file);
+ if (file != stdin) fclose(file);
+ if (argc == 0) return 0; /* TODO: Remove this stupid hack. */
}
return 0;
}