|
|
1.1 root 1: /*-
2: * Copyright (c) 1990 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Cimarron D. Taylor of the University of California, Berkeley.
7: *
8: * Redistribution and use in source and binary forms are permitted provided
9: * that: (1) source distributions retain this entire copyright notice and
10: * comment, and (2) distributions including binaries display the following
11: * acknowledgement: ``This product includes software developed by the
12: * University of California, Berkeley and its contributors'' in the
13: * documentation or other materials provided with the distribution and in
14: * all advertising materials mentioning features or use of this software.
15: * Neither the name of the University nor the names of its contributors may
16: * be used to endorse or promote products derived from this software without
17: * specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: */
22:
23: #ifndef lint
24: static char sccsid[] = "@(#)misc.c 5.2 (Berkeley) 5/12/90";
25: #endif /* not lint */
26:
27: #include <sys/types.h>
28: #include <sys/stat.h>
29: #include <stdio.h>
30: #include "find.h"
31:
32: /*
33: * find_subst --
34: * Replace occurrences of {} in s1 with s2 and return the result string.
35: */
36: find_subst(orig, store, path, len)
37: char *orig, **store, *path;
38: int len;
39: {
40: register int plen;
41: register char ch, *p;
42: char *realloc(), *strerror();
43:
44: plen = strlen(path);
45: for (p = *store; ch = *orig; ++orig)
46: if (ch == '{' && orig[1] == '}') {
47: while ((p - *store) + plen > len)
48: if (!(*store = realloc(*store, len *= 2))) {
49: (void)fprintf(stderr,
50: "find: %s.\n", strerror(errno));
51: exit(1);
52: }
53: bcopy(path, p, plen);
54: p += plen;
55: ++orig;
56: } else
57: *p++ = ch;
58: *p = '\0';
59: }
60:
61: /*
62: * find_queryuser --
63: * print a message to standard error and then read input from standard
64: * input. If the input is 'y' then 1 is returned.
65: */
66: find_queryuser(argv)
67: register char **argv;
68: {
69: char buf[10];
70:
71: (void)fprintf(stderr, "\"%s", *argv);
72: while (*++argv)
73: (void)fprintf(stderr, " %s", *argv);
74: (void)fprintf(stderr, "\"? ");
75: (void)fflush(stderr);
76: return(!fgets(buf, sizeof(buf), stdin) || buf[0] != 'y' ? 0 : 1);
77: }
78:
79: /*
80: * bad_arg --
81: * print out a bad argument message.
82: */
83: void
84: bad_arg(option, error)
85: char *option, *error;
86: {
87: (void)fprintf(stderr, "find: %s: %s.\n", option, error);
88: exit(1);
89: }
90:
91: /*
92: * emalloc --
93: * malloc with error checking.
94: */
95: char *
96: emalloc(len)
97: u_int len;
98: {
99: char *p, *malloc(), *strerror();
100:
101: if (!(p = malloc(len))) {
102: (void)fprintf(stderr, "find: %s.\n", strerror(errno));
103: exit(1);
104: }
105: return(p);
106: }
107:
108: usage()
109: {
110: extern int deprecated;
111:
112: if (deprecated)
113: (void)fprintf(stderr, "usage: find path-list expression\n");
114: else
115: (void)fprintf(stderr,
116: "usage: find [-dsx] -f path ... expression\n");
117: exit(1);
118: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.