* fhandler_disk_file.cc (fhandler_disk_file::link): Fix linking
against symlinks.
This commit is contained in:
parent
88797e5979
commit
39f50e387b
|
@ -1,3 +1,8 @@
|
||||||
|
2008-08-14 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler_disk_file.cc (fhandler_disk_file::link): Fix linking
|
||||||
|
against symlinks.
|
||||||
|
|
||||||
2008-08-14 Corinna Vinschen <corinna@vinschen.de>
|
2008-08-14 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* external.cc (cygwin_internal): Call set_security_attribute with
|
* external.cc (cygwin_internal): Call set_security_attribute with
|
||||||
|
|
|
@ -1118,8 +1118,6 @@ fhandler_disk_file::ftruncate (_off64_t length, bool allow_truncate)
|
||||||
int
|
int
|
||||||
fhandler_disk_file::link (const char *newpath)
|
fhandler_disk_file::link (const char *newpath)
|
||||||
{
|
{
|
||||||
extern bool allow_winsymlinks;
|
|
||||||
|
|
||||||
path_conv newpc (newpath, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
|
path_conv newpc (newpath, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
|
||||||
if (newpc.error)
|
if (newpc.error)
|
||||||
{
|
{
|
||||||
|
@ -1137,7 +1135,7 @@ fhandler_disk_file::link (const char *newpath)
|
||||||
char new_buf[strlen (newpath) + 5];
|
char new_buf[strlen (newpath) + 5];
|
||||||
if (!newpc.error)
|
if (!newpc.error)
|
||||||
{
|
{
|
||||||
if (allow_winsymlinks && pc.is_lnk_special ())
|
if (pc.is_lnk_special ())
|
||||||
{
|
{
|
||||||
/* Shortcut hack. */
|
/* Shortcut hack. */
|
||||||
stpcpy (stpcpy (new_buf, newpath), ".lnk");
|
stpcpy (stpcpy (new_buf, newpath), ".lnk");
|
||||||
|
@ -1182,18 +1180,16 @@ fhandler_disk_file::link (const char *newpath)
|
||||||
if (status == STATUS_INVALID_DEVICE_REQUEST)
|
if (status == STATUS_INVALID_DEVICE_REQUEST)
|
||||||
{
|
{
|
||||||
/* FS doesn't support hard links. Try to copy file. */
|
/* FS doesn't support hard links. Try to copy file. */
|
||||||
WCHAR pcw[pc.get_nt_native_path ()->Length + 1];
|
WCHAR pcw[(pc.get_nt_native_path ()->Length / sizeof (WCHAR)) + 1];
|
||||||
WCHAR newpcw[newpc.get_nt_native_path ()->Length + 1];
|
WCHAR newpcw[(newpc.get_nt_native_path ()->Length / sizeof (WCHAR))
|
||||||
|
+ 1];
|
||||||
if (!CopyFileW (pc.get_wide_win32_path (pcw),
|
if (!CopyFileW (pc.get_wide_win32_path (pcw),
|
||||||
newpc.get_wide_win32_path (newpcw), TRUE))
|
newpc.get_wide_win32_path (newpcw), TRUE))
|
||||||
{
|
{
|
||||||
__seterrno ();
|
__seterrno ();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!allow_winsymlinks && pc.is_lnk_special ())
|
SetFileAttributesW (newpcw, pc.file_attributes ());
|
||||||
SetFileAttributesW (newpcw, pc.file_attributes ()
|
|
||||||
| FILE_ATTRIBUTE_SYSTEM
|
|
||||||
| FILE_ATTRIBUTE_READONLY);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue