mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 04:49:25 +08:00
* syscalls.cc (nt_path_has_suffix): New function.
(rename): Don't append .exe suffix if binary target name has any suffix at all.
This commit is contained in:
parent
e807aacea9
commit
ac4ad8bffc
@ -1,3 +1,9 @@
|
||||
2009-11-05 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* syscalls.cc (nt_path_has_suffix): New function.
|
||||
(rename): Don't append .exe suffix if binary target name has any suffix
|
||||
at all.
|
||||
|
||||
2009-11-05 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* spawn.cc (dll_suffixes): Disable. Explain why.
|
||||
|
@ -1643,6 +1643,30 @@ stop_transaction (NTSTATUS status, HANDLE old_trans, HANDLE trans)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* This function tests if a filename has *any* suffix. In order to
|
||||
make this quick and simple, we define a suffix as being not longer
|
||||
than 4 chars, plus the leading dot. */
|
||||
static inline bool
|
||||
nt_path_has_suffix (PUNICODE_STRING upath)
|
||||
{
|
||||
USHORT pos = upath->Length / sizeof (WCHAR);
|
||||
const PWCHAR path = upath->Buffer;
|
||||
USHORT upto;
|
||||
|
||||
/* Too short for a native path? */
|
||||
if (pos < 8)
|
||||
return false;
|
||||
upto = pos - 5;
|
||||
while (--pos >= upto)
|
||||
{
|
||||
if (path[pos] == L'.')
|
||||
return true;
|
||||
if (path[pos] == L'\\')
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
rename (const char *oldpath, const char *newpath)
|
||||
{
|
||||
@ -1841,9 +1865,8 @@ rename (const char *oldpath, const char *newpath)
|
||||
&ro_u_lnk, TRUE))
|
||||
rename_append_suffix (newpc, newpath, nlen, ".lnk");
|
||||
else if (oldpc.is_binary () && !old_explicit_suffix
|
||||
&& !RtlEqualUnicodePathSuffix (newpc.get_nt_native_path (),
|
||||
&ro_u_exe, TRUE))
|
||||
/* To rename an executable foo.exe to bar-without-exe-suffix, the
|
||||
&& !nt_path_has_suffix (newpc.get_nt_native_path ()))
|
||||
/* To rename an executable foo.exe to bar-without-suffix, the
|
||||
.exe suffix must be given explicitly in oldpath. */
|
||||
rename_append_suffix (newpc, newpath, nlen, ".exe");
|
||||
}
|
||||
@ -1872,8 +1895,8 @@ rename (const char *oldpath, const char *newpath)
|
||||
}
|
||||
else if (oldpc.is_binary ())
|
||||
{
|
||||
if (!RtlEqualUnicodePathSuffix (newpc.get_nt_native_path (),
|
||||
&ro_u_exe, TRUE))
|
||||
/* Never append .exe suffix if file has any suffix already. */
|
||||
if (!nt_path_has_suffix (newpc.get_nt_native_path ()))
|
||||
{
|
||||
rename_append_suffix (new2pc, newpath, nlen, ".exe");
|
||||
removepc = &newpc;
|
||||
|
Loading…
x
Reference in New Issue
Block a user