From 09840e522a95262b22980c5c087e1b4730273177 Mon Sep 17 00:00:00 2001 From: Jan Date: Fri, 15 May 2026 17:20:20 +0200 Subject: [PATCH] Update tail command to read from the front of the file --- src/userland/cli/tail.c | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/src/userland/cli/tail.c b/src/userland/cli/tail.c index 4adcf21..83fe4f3 100644 --- a/src/userland/cli/tail.c +++ b/src/userland/cli/tail.c @@ -6,13 +6,13 @@ #include int main(int argc, char *argv[]) { - // print all lines if (argc == 2) { - if(strcmp(argv[1], "--help")) { - printf("-This command reads from the back of the file\n"); + if (strcmp(argv[1], "--help") == 0) { + printf("-This command reads from the front of the file\n"); printf("-Use: tail [-n] [-number of lines] [file]\n"); return 0; } + //print everything FILE *fp = fopen(argv[1], "r"); if (fp == NULL) { printf("File not found\n"); @@ -25,11 +25,11 @@ int main(int argc, char *argv[]) { fclose(fp); return 0; } - // only print last lines + // only print first lines if (argc == 4 && strcmp(argv[1], "-n") == 0) { int lines = atoi(argv[2]); if (lines <= 0) { - printf("Number of lines should be positive\n"); + printf("Number of lines must be positive\n"); return 1; } @@ -39,24 +39,10 @@ int main(int argc, char *argv[]) { return 1; } - // count total lines - int count = 0; char buf[1024]; - while (fgets(buf, sizeof(buf), fp)) { - count++; - } - - // back to start of file - fseek(fp, 0, SEEK_SET); - - // check if lines are the end lines - int skip = count - lines; - int i = 0; - while (fgets(buf, sizeof(buf), fp)) { - if (i >= skip) { - printf("%s", buf); - } - i++; + while (lines > 0 && fgets(buf, sizeof(buf), fp)) { + printf("%s", buf); + lines--; } fclose(fp);