xref: /aosp_15_r20/external/e2fsprogs/util/libecho.c (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker  * libecho.c
3*6a54128fSAndroid Build Coastguard Worker  *
4*6a54128fSAndroid Build Coastguard Worker  * For each argument on the command line, echo it.  Should expand
5*6a54128fSAndroid Build Coastguard Worker  * DOS wildcards correctly.
6*6a54128fSAndroid Build Coastguard Worker  *
7*6a54128fSAndroid Build Coastguard Worker  * Syntax: libecho [-p prefix] list...
8*6a54128fSAndroid Build Coastguard Worker  */
9*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
10*6a54128fSAndroid Build Coastguard Worker #include <io.h>
11*6a54128fSAndroid Build Coastguard Worker #include <string.h>
12*6a54128fSAndroid Build Coastguard Worker 
13*6a54128fSAndroid Build Coastguard Worker void echo_files(char *, char *);
14*6a54128fSAndroid Build Coastguard Worker 
15*6a54128fSAndroid Build Coastguard Worker int
main(int argc,char * argv[])16*6a54128fSAndroid Build Coastguard Worker main(int argc, char *argv[])
17*6a54128fSAndroid Build Coastguard Worker {
18*6a54128fSAndroid Build Coastguard Worker   int i;
19*6a54128fSAndroid Build Coastguard Worker   char *prefix;
20*6a54128fSAndroid Build Coastguard Worker 
21*6a54128fSAndroid Build Coastguard Worker   prefix = "";
22*6a54128fSAndroid Build Coastguard Worker 
23*6a54128fSAndroid Build Coastguard Worker   if (argc < 2) {
24*6a54128fSAndroid Build Coastguard Worker     fprintf(stderr, "Usage:  libecho [-p prefix] list...\n");
25*6a54128fSAndroid Build Coastguard Worker     return 1;
26*6a54128fSAndroid Build Coastguard Worker   }
27*6a54128fSAndroid Build Coastguard Worker 
28*6a54128fSAndroid Build Coastguard Worker   for (i = 1 ; i < argc ; i++)
29*6a54128fSAndroid Build Coastguard Worker     if (!stricmp(argv[i], "-p"))
30*6a54128fSAndroid Build Coastguard Worker       prefix = argv[++i];
31*6a54128fSAndroid Build Coastguard Worker     else
32*6a54128fSAndroid Build Coastguard Worker       echo_files(prefix, argv[i]);
33*6a54128fSAndroid Build Coastguard Worker 
34*6a54128fSAndroid Build Coastguard Worker   return 0;
35*6a54128fSAndroid Build Coastguard Worker }
36*6a54128fSAndroid Build Coastguard Worker 
37*6a54128fSAndroid Build Coastguard Worker void
echo_files(char * prefix,char * f)38*6a54128fSAndroid Build Coastguard Worker echo_files(char *prefix, char *f)
39*6a54128fSAndroid Build Coastguard Worker {
40*6a54128fSAndroid Build Coastguard Worker   long ff;
41*6a54128fSAndroid Build Coastguard Worker   struct _finddata_t fdt;
42*6a54128fSAndroid Build Coastguard Worker   char *slash;
43*6a54128fSAndroid Build Coastguard Worker   char filepath[256];
44*6a54128fSAndroid Build Coastguard Worker 
45*6a54128fSAndroid Build Coastguard Worker   /*
46*6a54128fSAndroid Build Coastguard Worker    * We're unix based quite a bit here.  Look for normal slashes and
47*6a54128fSAndroid Build Coastguard Worker    * make them reverse slashes.
48*6a54128fSAndroid Build Coastguard Worker    */
49*6a54128fSAndroid Build Coastguard Worker   while((slash = strrchr(f, '/')) != NULL)
50*6a54128fSAndroid Build Coastguard Worker     *slash = '\\';
51*6a54128fSAndroid Build Coastguard Worker 
52*6a54128fSAndroid Build Coastguard Worker   strcpy(filepath, f);
53*6a54128fSAndroid Build Coastguard Worker 
54*6a54128fSAndroid Build Coastguard Worker   slash = strrchr(filepath, '\\');
55*6a54128fSAndroid Build Coastguard Worker 
56*6a54128fSAndroid Build Coastguard Worker   if (slash) {
57*6a54128fSAndroid Build Coastguard Worker     slash++;
58*6a54128fSAndroid Build Coastguard Worker     *slash = 0;
59*6a54128fSAndroid Build Coastguard Worker   } else {
60*6a54128fSAndroid Build Coastguard Worker     filepath[0] = '\0';
61*6a54128fSAndroid Build Coastguard Worker   }
62*6a54128fSAndroid Build Coastguard Worker 
63*6a54128fSAndroid Build Coastguard Worker   ff = _findfirst(f, &fdt);
64*6a54128fSAndroid Build Coastguard Worker 
65*6a54128fSAndroid Build Coastguard Worker   if (ff < 0) {
66*6a54128fSAndroid Build Coastguard Worker     printf("%s%s\n", prefix, f);
67*6a54128fSAndroid Build Coastguard Worker     return;
68*6a54128fSAndroid Build Coastguard Worker   }
69*6a54128fSAndroid Build Coastguard Worker 
70*6a54128fSAndroid Build Coastguard Worker   printf("%s%s%s\n", prefix, filepath, fdt.name);
71*6a54128fSAndroid Build Coastguard Worker 
72*6a54128fSAndroid Build Coastguard Worker   for (;;) {
73*6a54128fSAndroid Build Coastguard Worker     if (_findnext(ff, &fdt) < 0)
74*6a54128fSAndroid Build Coastguard Worker       break;
75*6a54128fSAndroid Build Coastguard Worker     printf("%s%s%s\n", prefix, filepath, fdt.name);
76*6a54128fSAndroid Build Coastguard Worker   }
77*6a54128fSAndroid Build Coastguard Worker   _findclose(ff);
78*6a54128fSAndroid Build Coastguard Worker }
79