* cygpath.cc: Add option to output windows paths in different formats: "dos"

and "mixed".
(main): Process options.
(doit): Check new options flags.
This commit is contained in:
Christopher Faylor 2002-06-07 19:25:26 +00:00
parent f43a747271
commit 2bd6505b39
3 changed files with 69 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2002-06-07 David Peterson <chief@mail.idrive.com>
Christopher Faylor <cgf@redhat.com>
* cygpath.cc: Add option to output windows paths in different formats:
"dos" and "mixed".
(main): Process options.
(doit): Check new options flags.
2002-06-06 Egor Duda <deo@logos-m.ru>
* regtool.cc (Fail): Be more verbose.
@ -27,7 +35,7 @@
2002-06-05 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
* strace.cc (version): New global variable.
(usage): Accomodate stdout output.
(usage): Accommodate stdout output.
(print_version): New function.
2002-06-03 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>

View File

@ -29,6 +29,8 @@ static char *close_arg;
static int path_flag, unix_flag, windows_flag, absolute_flag;
static int shortname_flag, longname_flag;
static int ignore_flag, allusers_flag, output_flag;
static int mixed_flag;
static const char *windows_format_arg;
static struct option long_options[] = {
{(char *) "help", no_argument, NULL, 'h'},
@ -48,6 +50,7 @@ static struct option long_options[] = {
{(char *) "allusers", no_argument, NULL, 'A'},
{(char *) "desktop", no_argument, NULL, 'D'},
{(char *) "smprograms", no_argument, NULL, 'P'},
{(char *) "type", required_argument, (int *) &windows_format_arg, 't'},
{(char *) "homeroot", no_argument, NULL, 'H'},
{0, no_argument, 0, 0}
};
@ -68,6 +71,9 @@ Other options:\n\
-l|--long-name print Windows long form of filename (with -w only)\n\
-p|--path filename argument is a path\n\
-s|--short-name print Windows short form of filename (with -w only)\n\
-t|--type print Windows form of filename with specified\n\
dos drive letter with backslashes (C:\\WINNT)\n\
mixed drive letter with regular slashes (C:/WINNT)\n\
-A|--allusers use `All Users' instead of current user for -D, -P\n\
-D|--desktop output `Desktop' directory and exit\n\
-H|--homeroot output `Profiles' directory (home root) and exit\n\
@ -372,6 +378,33 @@ dowin (char option)
exit (0);
}
static void
convert_slashes (char* name)
{
while ((name = strchr (name, '\\')) != NULL)
{
if (*name == '\\')
*name = '/';
name++;
}
}
static char *
get_mixed_name (const char* filename)
{
char* mixed_buf = strdup (filename);
if (mixed_buf == NULL)
{
fprintf (stderr, "%s: out of memory\n", prog_name);
exit (1);
}
convert_slashes (mixed_buf);
return mixed_buf;
}
static void
doit (char *filename)
{
@ -433,6 +466,8 @@ doit (char *filename)
buf = get_short_paths (buf);
if (longname_flag)
buf = get_long_paths (buf);
if (mixed_flag)
buf = get_mixed_name (buf);
}
}
else
@ -444,6 +479,8 @@ doit (char *filename)
conv_func = (absolute_flag ? cygwin_conv_to_full_win32_path :
cygwin_conv_to_win32_path);
retval = conv_func (filename, buf);
if (mixed_flag)
buf = get_mixed_name (buf);
if (retval < 0)
{
fprintf (stderr, "%s: error converting \"%s\"\n",
@ -504,13 +541,13 @@ main (int argc, char **argv)
windows_flag = 0;
shortname_flag = 0;
longname_flag = 0;
mixed_flag = 0;
ignore_flag = 0;
options_from_file_flag = 0;
allusers_flag = 0;
output_flag = 0;
while ((c =
getopt_long (argc, argv, (char *) "hac:f:opslSuvwWiDPAH",
long_options, (int *) NULL)) != EOF)
while ((c = getopt_long (argc, argv, (char *) "hac:f:opslSuvwt:WiDPAH",
long_options, (int *) NULL)) != EOF)
{
switch (c)
{
@ -558,6 +595,21 @@ main (int argc, char **argv)
shortname_flag = 1;
break;
case 't':
if (unix_flag || (optarg == NULL))
usage (stderr, 1);
windows_flag = 1;
windows_format_arg = (*optarg == '=') ? (optarg + 1) : (optarg);
if (strcasecmp (windows_format_arg, "mixed") == 0)
mixed_flag = 1;
else if (strcasecmp (windows_format_arg, "dos") == 0)
/* nothing */;
else
usage (stderr, 1);
break;
case 'A':
allusers_flag = 1;
break;
@ -673,9 +725,9 @@ main (int argc, char **argv)
case 'P':
case 'S':
case 'W':
output_flag = 1;
output_flag = 1;
o = c;
break;
break;
}
if (*s)
do

View File

@ -83,6 +83,9 @@ Usage: cygpath [-A|--allusers] (-D|--desktop)|(-P|--smprograms) [-s|--short-name
-p|--path filename argument is a path
-s|--short-name print Windows short form of filename
-u|--unix print Unix form of filename
-t|--type print Windows form of filename with specified
dos drive letter with backslashes (c:\winnt)
mixed drive letter with regular slashes (c:/winnt)
-v|--version output version information and exit
-w|--windows print Windows form of filename
-A|--allusers use `All Users' instead of current user for -D, -P