home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.sbin / mtree / mtree.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-20  |  3.7 KB  |  147 lines

  1. /*-
  2.  * Copyright (c) 1989 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. char copyright[] =
  36. "@(#) Copyright (c) 1990 The Regents of the University of California.\n\
  37.  All rights reserved.\n";
  38. #endif /* not lint */
  39.  
  40. #ifndef lint
  41. static char sccsid[] = "@(#)mtree.c    5.10 (Berkeley) 4/17/92";
  42. #endif /* not lint */
  43.  
  44. #include <sys/param.h>
  45. #include <sys/stat.h>
  46. #include <errno.h>
  47. #include <unistd.h>
  48. #include <stdio.h>
  49. #include <fts.h>
  50. #include "mtree.h"
  51. #include "extern.h"
  52.  
  53. extern int crc_total;
  54.  
  55. int ftsoptions = FTS_PHYSICAL;
  56. int cflag, dflag, eflag, rflag, sflag, uflag;
  57. u_short keys;
  58. char fullpath[MAXPATHLEN];
  59.  
  60. static void usage __P((void));
  61.  
  62. int
  63. main(argc, argv)
  64.     int argc;
  65.     char *argv[];
  66. {
  67.     extern int optind;
  68.     extern char *optarg;
  69.     int ch;
  70.     char *dir, *p;
  71.  
  72.     dir = NULL;
  73.     keys = KEYDEFAULT;
  74.     while ((ch = getopt(argc, argv, "cdef:K:k:p:rs:ux")) != EOF)
  75.         switch((char)ch) {
  76.         case 'c':
  77.             cflag = 1;
  78.             break;
  79.         case 'd':
  80.             dflag = 1;
  81.             break;
  82.         case 'e':
  83.             eflag = 1;
  84.             break;
  85.         case 'f':
  86.             if (!(freopen(optarg, "r", stdin)))
  87.                 err("%s: %s", optarg, strerror(errno));
  88.             break;
  89.         case 'K':
  90.             while ((p = strsep(&optarg, " \t,")) != NULL)
  91.                 if (*p != '\0')
  92.                     keys |= parsekey(p, NULL);
  93.             break;
  94.         case 'k':
  95.             keys = F_TYPE;
  96.             while ((p = strsep(&optarg, " \t,")) != NULL)
  97.                 if (*p != '\0')
  98.                     keys |= parsekey(p, NULL);
  99.             break;
  100.         case 'p':
  101.             dir = optarg;
  102.             break;
  103.         case 'r':
  104.             rflag = 1;
  105.             break;
  106.         case 's':
  107.             sflag = 1;
  108.             crc_total = ~strtol(optarg, &p, 0);
  109.             if (*p)
  110.                 err("illegal seed value -- %s", optarg);
  111.         case 'u':
  112.             uflag = 1;
  113.             break;
  114.         case 'x':
  115.             ftsoptions |= FTS_XDEV;
  116.             break;
  117.         case '?':
  118.         default:
  119.             usage();
  120.         }
  121.     argc -= optind;
  122.     argv += optind;
  123.  
  124.     if (argc)
  125.         usage();
  126.  
  127.     if (dir && chdir(dir))
  128.         err("%s: %s", dir, strerror(errno));
  129.  
  130.     if ((cflag || sflag) && !getwd(fullpath))
  131.         err("%s", fullpath);
  132.  
  133.     if (cflag) {
  134.         cwalk();
  135.         exit(0);
  136.     }
  137.     exit(verify());
  138. }
  139.  
  140. static void
  141. usage()
  142. {
  143.     (void)fprintf(stderr,
  144. "usage: mtree [-cderux] [-f spec] [-K key] [-k key] [-p path] [-s seed]\n");
  145.     exit(1);
  146. }
  147.