[BACK]Return to head.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / head

Diff for /src/usr.bin/head/head.c between version 1.22 and 1.23

version 1.22, 2021/10/10 15:57:25 version 1.23, 2022/01/29 00:19:04
Line 37 
Line 37 
 #include <errno.h>  #include <errno.h>
 #include <unistd.h>  #include <unistd.h>
   
   int head_file(const char *, long, int);
 static void usage(void);  static void usage(void);
   
 /*  /*
Line 49 
Line 50 
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
         const char *errstr;          const char *errstr;
         FILE    *fp;          int     ch;
         long    cnt;  
         int     ch, firsttime;  
         long    linecnt = 10;          long    linecnt = 10;
         int     status = 0;          int     status = 0;
   
Line 81 
Line 80 
         }          }
         argc -= optind, argv += optind;          argc -= optind, argv += optind;
   
         for (firsttime = 1; ; firsttime = 0) {          if (argc == 0) {
                 if (!*argv) {                  if (pledge("stdio", NULL) == -1)
                         if (!firsttime)                          err(1, "pledge");
                                 exit(status);  
                         fp = stdin;                  status = head_file(NULL, linecnt, 0);
                         if (pledge("stdio", NULL) == -1)          } else {
                                 err(1, "pledge");                  for (; *argv != NULL; argv++)
                 } else {                          status |= head_file(*argv, linecnt, argc > 1);
                         if ((fp = fopen(*argv, "r")) == NULL) {  
                                 warn("%s", *argv++);  
                                 status = 1;  
                                 continue;  
                         }  
                         if (argc > 1) {  
                                 if (!firsttime)  
                                         putchar('\n');  
                                 printf("==> %s <==\n", *argv);  
                         }  
                         ++argv;  
                 }  
                 for (cnt = linecnt; cnt && !feof(fp); --cnt)  
                         while ((ch = getc(fp)) != EOF)  
                                 if (putchar(ch) == '\n')  
                                         break;  
                 fclose(fp);  
         }          }
         /*NOTREACHED*/  
           return status;
   }
   
   int
   head_file(const char *path, long count, int need_header)
   {
           FILE *fp;
           int ch;
           static int first = 1;
   
           if (path != NULL) {
                   fp = fopen(path, "r");
                   if (fp == NULL) {
                           warn("%s", path);
                           return 1;
                   }
                   if (need_header) {
                           printf("%s==> %s <==\n", first ? "" : "\n", path);
                           first = 0;
                   }
           } else
                   fp = stdin;
   
           for (; count > 0 && !feof(fp); --count)
                   while ((ch = getc(fp)) != EOF)
                           if (putchar(ch) == '\n')
                                   break;
           fclose(fp);
   
           return 0;
 }  }
   
   

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23