int main(int argc, char *argv[]) { char c; while((c = getopt(argc, argv, "fs")) != -1) switch(c) { case 'f': fflag = true; break; case 's': sflag = true; break; default: exit(EXIT_FAILURE); } enmasse(argc - optind, &argv[optind], ln); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { int dflag = 0; char *gflag = 0; char *oflag = 0; char *mflag = 0; char *tflag = 0; struct group *gr; struct passwd *pw; struct stat st; char *p; ARGBEGIN { case 'd': dflag = 1; break; case 'D': Dflag = 1; break; case 's': sflag = 1; break; case 'g': gflag = EARGF(usage()); break; case 'o': oflag = EARGF(usage()); break; case 'm': mflag = EARGF(usage()); break; case 't': tflag = EARGF(usage()); break; default: usage(); } ARGEND if (argc < 1 + (!tflag & !dflag) || dflag & (Dflag | sflag | !!tflag)) usage(); if (gflag) { errno = 0; gr = getgrnam(gflag); if (gr) { group = gr->gr_gid; } else { if (errno) eprintf("getgrnam %s:", gflag); group = estrtonum(gflag, 0, UINT_MAX); } } else { group = getgid(); } if (oflag) { errno = 0; pw = getpwnam(oflag); if (pw) { owner = pw->pw_uid; } else { if (errno) eprintf("getpwnam %s:", oflag); owner = estrtonum(oflag, 0, UINT_MAX); } } else { owner = getuid(); } if (mflag) { mode = parsemode(mflag, mode, 0); if (mode < 0) return 1; } if (tflag) { memmove(argv - 1, argv, argc); argv[argc++] = tflag; } if (tflag || argc > 2) { if (stat(argv[argc - 1], &st) < 0) { if ((errno == ENOENT) && Dflag) { make_dirs(argv[argc - 1], 1); } else { eprintf("stat %s:", argv[argc - 1]); } } else if (!S_ISDIR(st.st_mode)) { eprintf("%s: not a directory\n", argv[argc - 1]); } } if (dflag) { for (; *argv; argc--, argv++) make_dirs(*argv, 0); } else { if (stat(argv[argc - 1], &st) < 0) { if (errno != ENOENT) eprintf("stat %s:", argv[argc - 1]); if (tflag || Dflag || argc > 2) { if ((p = strrchr(argv[argc - 1], '/')) != NULL) { *p = '\0'; make_dirs(argv[argc - 1], 1); *p = '/'; } } } enmasse(argc, argv, install); } return 0; }