* cygpath.cc (get_short_paths): Fix more error checking.
(get_short_name): Ditto. * cygpath.cc (main): Add option H to show the Windows' profiles directory. Support short names for options DPSW. Clean up copied code lines. * utils.sgml: Update cygpath section for H option and s support.
This commit is contained in:
parent
5588e28765
commit
e355de817c
|
@ -1,6 +1,18 @@
|
||||||
|
2002-05-15 Mark Blackburn <marklist@fangorn.ca>
|
||||||
|
|
||||||
|
* cygpath.cc (get_short_paths): Fix more error checking.
|
||||||
|
(get_short_name): Ditto.
|
||||||
|
|
||||||
|
2002-05-14 Joerg Schaible <joerg.schaible@gmx.de>
|
||||||
|
|
||||||
|
* cygpath.cc (main): Add option H to show the Windows' profiles
|
||||||
|
directory. Support short names for options DPSW. Clean up
|
||||||
|
copied code lines.
|
||||||
|
* utils.sgml: Update cygpath section for H option and s support.
|
||||||
|
|
||||||
2002-05-14 Mark Blackburn <marklist@fangorn.ca>
|
2002-05-14 Mark Blackburn <marklist@fangorn.ca>
|
||||||
|
|
||||||
* cygpath.cc (get_short_name): Fix error checking.
|
* cygpath.cc (get_short_paths): Fix error checking.
|
||||||
|
|
||||||
2002-05-13 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
|
2002-05-13 Joshua Daniel Franklin <joshuadfranklin@yahoo.com>
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ static struct option long_options[] = {
|
||||||
{(char *) "allusers", no_argument, NULL, 'A'},
|
{(char *) "allusers", no_argument, NULL, 'A'},
|
||||||
{(char *) "desktop", no_argument, NULL, 'D'},
|
{(char *) "desktop", no_argument, NULL, 'D'},
|
||||||
{(char *) "smprograms", no_argument, NULL, 'P'},
|
{(char *) "smprograms", no_argument, NULL, 'P'},
|
||||||
|
{(char *) "homeroot", no_argument, NULL, 'H'},
|
||||||
{0, no_argument, 0, 0}
|
{0, no_argument, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -66,6 +67,7 @@ Usage: %s [-p|--path] (-u|--unix)|(-w|--windows [-s|--short-name]) filename\n\
|
||||||
-w|--windows print Windows form of filename\n\
|
-w|--windows print Windows form of filename\n\
|
||||||
-A|--allusers use `All Users' instead of current user for -D, -P\n\
|
-A|--allusers use `All Users' instead of current user for -D, -P\n\
|
||||||
-D|--desktop output `Desktop' directory and exit\n\
|
-D|--desktop output `Desktop' directory and exit\n\
|
||||||
|
-H|--homeroot output `Profiles' directory (home root) and exit\n\
|
||||||
-P|--smprograms output Start Menu `Programs' directory and exit\n\
|
-P|--smprograms output Start Menu `Programs' directory and exit\n\
|
||||||
-S|--sysdir output system directory and exit\n\
|
-S|--sysdir output system directory and exit\n\
|
||||||
-W|--windir output `Windows' directory and exit\n", prog_name);
|
-W|--windir output `Windows' directory and exit\n", prog_name);
|
||||||
|
@ -90,7 +92,7 @@ get_short_paths (char *path)
|
||||||
if (ptr)
|
if (ptr)
|
||||||
*ptr++ = 0;
|
*ptr++ = 0;
|
||||||
len = GetShortPathName (next, NULL, 0);
|
len = GetShortPathName (next, NULL, 0);
|
||||||
if (len ==0 && GetLastError () == ERROR_INVALID_PARAMETER)
|
if (len == 0 && GetLastError () == ERROR_INVALID_PARAMETER)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
||||||
next);
|
next);
|
||||||
|
@ -107,7 +109,8 @@ get_short_paths (char *path)
|
||||||
ptr = path;
|
ptr = path;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (GetShortPathName (ptr, sptr, acc) == ERROR_INVALID_PARAMETER)
|
len = GetShortPathName (ptr, sptr, acc);
|
||||||
|
if (len == 0 && GetLastError () == ERROR_INVALID_PARAMETER)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
||||||
ptr);
|
ptr);
|
||||||
|
@ -129,7 +132,7 @@ get_short_name (const char *filename)
|
||||||
{
|
{
|
||||||
char *sbuf;
|
char *sbuf;
|
||||||
DWORD len = GetShortPathName (filename, NULL, 0);
|
DWORD len = GetShortPathName (filename, NULL, 0);
|
||||||
if (len == ERROR_INVALID_PARAMETER)
|
if (len == 0 && GetLastError () == ERROR_INVALID_PARAMETER)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
||||||
filename);
|
filename);
|
||||||
|
@ -141,7 +144,8 @@ get_short_name (const char *filename)
|
||||||
fprintf (stderr, "%s: out of memory\n", prog_name);
|
fprintf (stderr, "%s: out of memory\n", prog_name);
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
if (GetShortPathName (filename, sbuf, len) == ERROR_INVALID_PARAMETER)
|
len = GetShortPathName (filename, sbuf, len);
|
||||||
|
if (len == 0 && GetLastError () == ERROR_INVALID_PARAMETER)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
fprintf (stderr, "%s: cannot create short name of %s\n", prog_name,
|
||||||
filename);
|
filename);
|
||||||
|
@ -261,9 +265,6 @@ main (int argc, char **argv)
|
||||||
int c, o = 0;
|
int c, o = 0;
|
||||||
int options_from_file_flag;
|
int options_from_file_flag;
|
||||||
char *filename;
|
char *filename;
|
||||||
char buf[MAX_PATH], buf2[MAX_PATH];
|
|
||||||
WIN32_FIND_DATA w32_fd;
|
|
||||||
LPITEMIDLIST id;
|
|
||||||
|
|
||||||
prog_name = strrchr (argv[0], '/');
|
prog_name = strrchr (argv[0], '/');
|
||||||
if (prog_name == NULL)
|
if (prog_name == NULL)
|
||||||
|
@ -282,7 +283,7 @@ main (int argc, char **argv)
|
||||||
allusers_flag = 0;
|
allusers_flag = 0;
|
||||||
output_flag = 0;
|
output_flag = 0;
|
||||||
while ((c =
|
while ((c =
|
||||||
getopt_long (argc, argv, (char *) "hac:f:opsSuvwWiDPA",
|
getopt_long (argc, argv, (char *) "hac:f:opsSuvwWiDPAH",
|
||||||
long_options, (int *) NULL)) != EOF)
|
long_options, (int *) NULL)) != EOF)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
|
@ -330,31 +331,14 @@ main (int argc, char **argv)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'D':
|
case 'D':
|
||||||
if (output_flag)
|
case 'H':
|
||||||
usage (stderr, 1);
|
|
||||||
output_flag = 1;
|
|
||||||
o = 'D';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'P':
|
case 'P':
|
||||||
if (output_flag)
|
|
||||||
usage (stderr, 1);
|
|
||||||
output_flag = 1;
|
|
||||||
o = 'P';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'S':
|
case 'S':
|
||||||
if (output_flag)
|
|
||||||
usage (stderr, 1);
|
|
||||||
output_flag = 1;
|
|
||||||
o = 'S';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'W':
|
case 'W':
|
||||||
if (output_flag)
|
if (output_flag)
|
||||||
usage (stderr, 1);
|
usage (stderr, 1);
|
||||||
output_flag = 1;
|
output_flag = 1;
|
||||||
o = 'W';
|
o = c;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'i':
|
case 'i':
|
||||||
|
@ -378,6 +362,14 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
if (output_flag)
|
if (output_flag)
|
||||||
{
|
{
|
||||||
|
char *buf, buf1[MAX_PATH], buf2[MAX_PATH];
|
||||||
|
DWORD len = MAX_PATH;
|
||||||
|
WIN32_FIND_DATA w32_fd;
|
||||||
|
LPITEMIDLIST id;
|
||||||
|
HINSTANCE hinst;
|
||||||
|
BOOL (*GetProfilesDirectoryAPtr) (LPSTR, LPDWORD) = 0;
|
||||||
|
|
||||||
|
buf = buf1;
|
||||||
switch (o)
|
switch (o)
|
||||||
{
|
{
|
||||||
case 'D':
|
case 'D':
|
||||||
|
@ -393,12 +385,7 @@ main (int argc, char **argv)
|
||||||
SHGetSpecialFolderLocation (NULL, CSIDL_DESKTOPDIRECTORY, &id);
|
SHGetSpecialFolderLocation (NULL, CSIDL_DESKTOPDIRECTORY, &id);
|
||||||
SHGetPathFromIDList (id, buf);
|
SHGetPathFromIDList (id, buf);
|
||||||
}
|
}
|
||||||
if (!windows_flag)
|
break;
|
||||||
cygwin_conv_to_posix_path (buf, buf2);
|
|
||||||
else
|
|
||||||
strcpy (buf2, buf);
|
|
||||||
printf ("%s\n", buf2);
|
|
||||||
exit (0);
|
|
||||||
|
|
||||||
case 'P':
|
case 'P':
|
||||||
if (!allusers_flag)
|
if (!allusers_flag)
|
||||||
|
@ -412,36 +399,48 @@ main (int argc, char **argv)
|
||||||
SHGetSpecialFolderLocation (NULL, CSIDL_PROGRAMS, &id);
|
SHGetSpecialFolderLocation (NULL, CSIDL_PROGRAMS, &id);
|
||||||
SHGetPathFromIDList (id, buf);
|
SHGetPathFromIDList (id, buf);
|
||||||
}
|
}
|
||||||
if (!windows_flag)
|
break;
|
||||||
cygwin_conv_to_posix_path (buf, buf2);
|
|
||||||
|
case 'H':
|
||||||
|
hinst = LoadLibrary ("userenv");
|
||||||
|
if (hinst)
|
||||||
|
GetProfilesDirectoryAPtr = (BOOL (*) (LPSTR, LPDWORD))
|
||||||
|
GetProcAddress (hinst, "GetProfilesDirectoryA");
|
||||||
|
if (GetProfilesDirectoryAPtr)
|
||||||
|
(*GetProfilesDirectoryAPtr) (buf, &len);
|
||||||
else
|
else
|
||||||
strcpy (buf2, buf);
|
{
|
||||||
printf ("%s\n", buf2);
|
GetWindowsDirectory (buf, MAX_PATH);
|
||||||
exit (0);
|
strcat (buf, "\\Profiles");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'S':
|
case 'S':
|
||||||
GetSystemDirectory (buf, MAX_PATH);
|
GetSystemDirectory (buf, MAX_PATH);
|
||||||
FindFirstFile (buf, &w32_fd);
|
FindFirstFile (buf, &w32_fd);
|
||||||
strcpy (strrchr (buf, '\\') + 1, w32_fd.cFileName);
|
strcpy (strrchr (buf, '\\') + 1, w32_fd.cFileName);
|
||||||
if (!windows_flag)
|
break;
|
||||||
cygwin_conv_to_posix_path (buf, buf2);
|
|
||||||
else
|
|
||||||
strcpy (buf2, buf);
|
|
||||||
printf ("%s\n", buf2);
|
|
||||||
exit (0);
|
|
||||||
|
|
||||||
case 'W':
|
case 'W':
|
||||||
GetWindowsDirectory (buf, MAX_PATH);
|
GetWindowsDirectory (buf, MAX_PATH);
|
||||||
if (!windows_flag)
|
break;
|
||||||
cygwin_conv_to_posix_path (buf, buf2);
|
|
||||||
else
|
|
||||||
strcpy (buf2, buf);
|
|
||||||
printf ("%s\n", buf2);
|
|
||||||
exit (0);
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf (stderr, "ERROR: main: switch (o)!\n");
|
usage (stderr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!windows_flag)
|
||||||
|
{
|
||||||
|
cygwin_conv_to_posix_path (buf, buf2);
|
||||||
|
buf = buf2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (shortname_flag)
|
||||||
|
buf = get_short_name (buf);
|
||||||
|
}
|
||||||
|
printf ("%s\n", buf);
|
||||||
|
exit (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options_from_file_flag && !file_arg)
|
if (options_from_file_flag && !file_arg)
|
||||||
|
|
|
@ -82,6 +82,7 @@ Usage: cygpath.exe [-p|--path] (-u|--unix)|(-w|--windows [-s|--short-name]) file
|
||||||
-v|--version output version information and exit
|
-v|--version output version information and exit
|
||||||
-w|--windows print Windows form of filename
|
-w|--windows print Windows form of filename
|
||||||
-A|--allusers use `All Users' instead of current user for -D, -P
|
-A|--allusers use `All Users' instead of current user for -D, -P
|
||||||
|
-H|--homeroot output `Profiles' directory (home root) and exit\n\
|
||||||
-D|--desktop output `Desktop' directory and exit
|
-D|--desktop output `Desktop' directory and exit
|
||||||
-P|--smprograms output Start Menu `Programs' directory and exit
|
-P|--smprograms output Start Menu `Programs' directory and exit
|
||||||
-S|--sysdir output system directory and exit
|
-S|--sysdir output system directory and exit
|
||||||
|
@ -127,15 +128,18 @@ done
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<para>The capital options
|
<para>The capital options
|
||||||
<literal>-D</literal>, <literal>-P</literal>, <literal>-S</literal>, and
|
<literal>-D</literal>, <literal>-H</literal>, <literal>-P</literal>,
|
||||||
<literal>-W</literal> output directories used by Windows that are not the
|
<literal>-S</literal>, and <literal>-W</literal> output directories used
|
||||||
same on all systems, for example <literal>-S</literal> might output
|
by Windows that are not the same on all systems, for example
|
||||||
C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM. The <literal>-A</literal> option
|
<literal>-S</literal> might output C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM.
|
||||||
forces use of the "All Users" directories instead of the current user
|
The <literal>-A</literal> option forces use of the "All Users" directories
|
||||||
for the <literal>-D</literal> and <literal>-P</literal> options.
|
instead of the current user for the <literal>-D</literal> and
|
||||||
|
<literal>-P</literal> options. The <literal>-H</literal> shows the Windows'
|
||||||
|
profiles directory that can be used as root of home.
|
||||||
On Win9x systems with only a single user, <literal>-A</literal> has no
|
On Win9x systems with only a single user, <literal>-A</literal> has no
|
||||||
effect; <literal>-D</literal> and <literal>-AD</literal> would have the
|
effect; <literal>-D</literal> and <literal>-AD</literal> would have the
|
||||||
same output.
|
same output.
|
||||||
|
The <literal>-ws</literal> options can be combined with the capital options.
|
||||||
|
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue