[Bug 47100] Simple command that needs CreateSymbolicLinkW doesn`t work anymore in Staging-4.7

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Apr 30 09:58:11 CDT 2019


https://bugs.winehq.org/show_bug.cgi?id=47100

--- Comment #3 from Erich E. Hoover <erich.e.hoover at gmail.com> ---
(In reply to Louis Lenders from comment #2)
> >I'm looking into a possibly related issue at the moment, does it work if the >destination exists?
> 
> Do you mean like below? It makes a difference apparently but it looks weird
> to me:   File: foo -> .///././/////////////////////////.//.//bar
> ...

Yes, that is exactly what I mean.  It looks like I made a mistake in validating
the destination path and am currently requiring it to exist before it will make
a symlink/junction point.  If you wouldn't mind testing, you should be able to
fix it by replacing this line in FILE_CreateSymlink (dlls/ntdll/file.c):
    if ((status = wine_nt_to_unix_file_name( &nt_dest, &unix_dest, FILE_OPEN,
FALSE )))
with these two:
    status = wine_nt_to_unix_file_name( &nt_dest, &unix_dest, 0, FALSE );
    if (status != STATUS_SUCCESS && status != STATUS_NO_SUCH_FILE)

The reason it looks "weird" is that it is encoding the Reparse Tag into the
symlink as "binary" (no period = 0, period = 1).  This allows us to tell the
difference between a Junction Point (IO_REPARSE_TAG_MOUNT_POINT) and an NT
Symlink (IO_REPARSE_TAG_SYMLINK).  This wouldn't matter so much if the format
of the returned data was the same, but the two reparse types return
incompatible structures.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list