1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <getopt.h>
20: #include <stdio.h>
21: #include <stdlib.h>
22: #include <unistd.h>
23: #include <glob.h>
24:
25: int
26: main (int argc, char *argv[])
27: {
28: int i, j;
29: int glob_flags = 0;
30: glob_t g;
31: int quotes = 1;
32:
33: g.gl_offs = 0;
34:
35: while ((i = getopt (argc, argv, "bcdeEgmopqstT")) != -1)
36: switch(i)
37: {
38: case 'b':
39: glob_flags |= GLOB_BRACE;
40: break;
41: case 'c':
42: glob_flags |= GLOB_NOCHECK;
43: break;
44: case 'd':
45: glob_flags |= GLOB_ONLYDIR;
46: break;
47: case 'e':
48: glob_flags |= GLOB_NOESCAPE;
49: break;
50: case 'E':
51: glob_flags |= GLOB_ERR;
52: break;
53: case 'g':
54: glob_flags |= GLOB_NOMAGIC;
55: break;
56: case 'm':
57: glob_flags |= GLOB_MARK;
58: break;
59: case 'o':
60: glob_flags |= GLOB_DOOFFS;
61: g.gl_offs = 1;
62: break;
63: case 'p':
64: glob_flags |= GLOB_PERIOD;
65: break;
66: case 'q':
67: quotes = 0;
68: break;
69: case 's':
70: glob_flags |= GLOB_NOSORT;
71: break;
72: case 't':
73: glob_flags |= GLOB_TILDE;
74: break;
75: case 'T':
76: glob_flags |= GLOB_TILDE_CHECK;
77: break;
78: default:
79: exit (-1);
80: }
81:
82: if (optind >= argc || chdir (argv[optind]))
83: exit(1);
84:
85: j = optind + 1;
86: if (optind + 1 >= argc)
87: exit (1);
88:
89:
90: for (j = optind + 1; j < argc; j++) {
91: i = glob (argv[j], glob_flags, NULL, &g);
92: if (i != 0)
93: break;
94: glob_flags |= GLOB_APPEND;
95: }
96:
97:
98: if (i == GLOB_NOSPACE)
99: puts ("GLOB_NOSPACE");
100: else if (i == GLOB_ABORTED)
101: puts ("GLOB_ABORTED");
102: else if (i == GLOB_NOMATCH)
103: puts ("GLOB_NOMATCH");
104:
105:
106:
107: if ((glob_flags & GLOB_DOOFFS) && g.gl_pathv[0] == NULL)
108: g.gl_pathv[0] = (char *) "abc";
109:
110:
111: if (g.gl_pathv)
112: {
113: for (i = 0; i < g.gl_offs + g.gl_pathc; ++i)
114: printf ("%s%s%s\n", quotes ? "`" : "",
115: g.gl_pathv[i] ? g.gl_pathv[i] : "(null)",
116: quotes ? "'" : "");
117: }
118: return 0;
119: }