cat.c - sbase - suckless unix tools
 (HTM) git clone git://git.suckless.org/sbase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       cat.c (824B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <fcntl.h>
            3 #include <string.h>
            4 #include <unistd.h>
            5 
            6 #include "util.h"
            7 
            8 static void
            9 usage(void)
           10 {
           11         eprintf("usage: %s [-u] [file ...]\n", argv0);
           12 }
           13 
           14 int
           15 main(int argc, char *argv[])
           16 {
           17         int fd, ret = 0;
           18 
           19         ARGBEGIN {
           20         case 'u':
           21                 break;
           22         default:
           23                 usage();
           24         } ARGEND
           25 
           26         if (!argc) {
           27                 if (concat(0, "<stdin>", 1, "<stdout>") < 0)
           28                         ret = 1;
           29         } else {
           30                 for (; *argv; argc--, argv++) {
           31                         if (!strcmp(*argv, "-")) {
           32                                 *argv = "<stdin>";
           33                                 fd = 0;
           34                         } else if ((fd = open(*argv, O_RDONLY)) < 0) {
           35                                 weprintf("open %s:", *argv);
           36                                 ret = 1;
           37                                 continue;
           38                         }
           39                         switch (concat(fd, *argv, 1, "<stdout>")) {
           40                         case -1:
           41                                 ret = 1;
           42                                 break;
           43                         case -2:
           44                                 return 1;  /* exit on write error */
           45                         }
           46                         if (fd != 0)
           47                                 close(fd);
           48                 }
           49         }
           50 
           51         return ret;
           52 }