1 /*  Copyright 2010 Alain Knaff.
2  *  This file is part of mtools.
3  *
4  *  Mtools is free software: you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation, either version 3 of the License, or
7  *  (at your option) any later version.
8  *
9  *  Mtools is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with Mtools.  If not, see <http://www.gnu.org/licenses/>.
16  *
17  * mshortname.c
18  * Change MSDOS file attribute flags
19  */
20 
21 #include "sysincludes.h"
22 #include "msdos.h"
23 #include "mtools.h"
24 #include "mainloop.h"
25 
print_short_name(direntry_t * entry,MainParam_t * mp UNUSEDP)26 static int print_short_name(direntry_t *entry, MainParam_t *mp UNUSEDP)
27 {
28 	fprintShortPwd(stdout, entry);
29 	putchar('\n');
30 	return GOT_ONE;
31 }
32 
33 
34 static void usage(int ret) NORETURN;
usage(int ret)35 static void usage(int ret)
36 {
37 	fprintf(stderr, "Mtools version %s, dated %s\n",
38 		mversion, mdate);
39 	fprintf(stderr,
40 		"Usage: %s msdosfile [msdosfiles...]\n",
41 		progname);
42 	exit(ret);
43 }
44 
45 void mshortname(int argc, char **argv, int type UNUSEDP) NORETURN;
mshortname(int argc,char ** argv,int type UNUSEDP)46 void mshortname(int argc, char **argv, int type UNUSEDP)
47 {
48 	struct MainParam_t mp;
49 	int c;
50 
51 	if(helpFlag(argc, argv))
52 		usage(0);
53 	while ((c = getopt(argc, argv, "i:h")) != EOF) {
54 		switch (c) {
55 			case 'i':
56 				set_cmd_line_image(optarg);
57 				break;
58 			case 'h':
59 				usage(0);
60 			case '?':
61 				usage(1);
62 		}
63 	}
64 
65 	if(optind == argc) {
66 		usage(0);
67 	}
68 
69 	if (optind >= argc)
70 		usage(1);
71 
72 	init_mp(&mp);
73 	mp.callback = print_short_name;
74 	mp.arg = NULL;
75 	mp.lookupflags = ACCEPT_PLAIN | ACCEPT_DIR;
76 	exit(main_loop(&mp, argv + optind, argc - optind));
77 }
78