sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

cp.c (987B)


      1 /* See LICENSE file for copyright and license details. */
      2 #include <sys/stat.h>
      3 
      4 #include "fs.h"
      5 #include "util.h"
      6 
      7 static void
      8 usage(void)
      9 {
     10 	eprintf("usage: %s [-afipv] [-R [-H | -L | -P]] source ... dest\n", argv0);
     11 }
     12 
     13 int
     14 main(int argc, char *argv[])
     15 {
     16 	struct stat st;
     17 
     18 	ARGBEGIN {
     19 	case 'i':
     20 		cp_iflag = 1;
     21 		break;
     22 	case 'a':
     23 		cp_follow = 'P';
     24 		cp_aflag = cp_pflag = cp_rflag = 1;
     25 		break;
     26 	case 'f':
     27 		cp_fflag = 1;
     28 		break;
     29 	case 'p':
     30 		cp_pflag = 1;
     31 		break;
     32 	case 'r':
     33 	case 'R':
     34 		cp_rflag = 1;
     35 		break;
     36 	case 'v':
     37 		cp_vflag = 1;
     38 		break;
     39 	case 'H':
     40 	case 'L':
     41 	case 'P':
     42 		cp_follow = ARGC();
     43 		break;
     44 	default:
     45 		usage();
     46 	} ARGEND
     47 
     48 	if (argc < 2)
     49 		usage();
     50 
     51 	if (!cp_follow)
     52 		cp_follow = cp_rflag ? 'P' : 'L';
     53 
     54 	if (argc > 2) {
     55 		if (stat(argv[argc - 1], &st) < 0)
     56 			eprintf("stat %s:", argv[argc - 1]);
     57 		if (!S_ISDIR(st.st_mode))
     58 			eprintf("%s: not a directory\n", argv[argc - 1]);
     59 	}
     60 	enmasse(argc, argv, cp);
     61 
     62 	return fshut(stdout, "<stdout>") || cp_status;
     63 }