Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
91f96b28
Commit
91f96b28
authored
Apr 01, 2019
by
Michael Müller
Committed by
Alexandre Julliard
May 01, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
version: Correctly return VFF_CURNEDEST in VerFindFileA.
Signed-off-by:
Vijay Kiran Kamuju
<
infyquest@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
1a6458ba
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
169 additions
and
22 deletions
+169
-22
Makefile.in
dlls/version/tests/Makefile.in
+1
-1
install.c
dlls/version/tests/install.c
+145
-6
version.c
dlls/version/version.c
+23
-15
No files found.
dlls/version/tests/Makefile.in
View file @
91f96b28
TESTDLL
=
version.dll
IMPORTS
=
version
IMPORTS
=
version
shell32
C_SRCS
=
\
info.c
\
...
...
dlls/version/tests/install.c
View file @
91f96b28
...
...
@@ -24,11 +24,13 @@
#include "winbase.h"
#include "winerror.h"
#include "winver.h"
#include "shlobj.h"
static
void
test_find_file
(
void
)
{
DWORD
ret
;
UINT
dwCur
,
dwOut
;
char
tmp
[
MAX_PATH
];
char
appdir
[
MAX_PATH
];
char
curdir
[
MAX_PATH
];
char
filename
[
MAX_PATH
];
...
...
@@ -115,10 +117,11 @@ static void test_find_file(void)
}
}
}
if
(
!
GetModuleFileNameA
(
NULL
,
filename
,
MAX_PATH
)
||
!
GetSystemDirectoryA
(
windir
,
MAX_PATH
)
||
!
GetTempPathA
(
MAX_PATH
,
appdir
))
trace
(
"GetModuleFileNameA, GetSystemDirectoryA or GetTempPathA failed
\n
"
);
if
(
!
GetSystemDirectoryA
(
windir
,
MAX_PATH
)
||
!
SHGetSpecialFolderPathA
(
0
,
appdir
,
CSIDL_PROGRAM_FILES
,
FALSE
)
||
!
GetTempPathA
(
MAX_PATH
,
tmp
)
||
!
GetTempFileNameA
(
tmp
,
"tes"
,
0
,
filename
))
ok
(
0
,
"GetSystemDirectoryA, SHGetSpecialFolderPathA, GetTempPathA or GetTempFileNameA failed
\n
"
);
else
{
char
*
p
=
strrchr
(
filename
,
'\\'
);
if
(
p
)
{
...
...
@@ -150,7 +153,7 @@ static void test_find_file(void)
memset
(
outBuf
,
0
,
MAX_PATH
);
memset
(
curdir
,
0
,
MAX_PATH
);
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
filename
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
todo_wine
ok
(
VFF_CURNEDEST
==
ret
,
"Wrong return value got %x expected VFF_CURNEDEST
\n
"
,
ret
);
ok
(
VFF_CURNEDEST
==
ret
,
"Wrong return value got %x expected VFF_CURNEDEST
\n
"
,
ret
);
ok
(
dwOut
==
1
+
strlen
(
windir
),
"Wrong length of buffer for current location: "
"got %d(%s) expected %d
\n
"
,
dwOut
,
outBuf
,
lstrlenA
(
windir
)
+
1
);
...
...
@@ -159,9 +162,145 @@ static void test_find_file(void)
memset
(
outBuf
,
0
,
MAX_PATH
);
memset
(
curdir
,
0
,
MAX_PATH
);
ret
=
VerFindFileA
(
0
,
filename
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
todo_wine
ok
(
VFF_CURNEDEST
==
ret
,
"Wrong return value got %x expected VFF_CURNEDEST
\n
"
,
ret
);
ok
(
VFF_CURNEDEST
==
ret
,
"Wrong return value got %x expected VFF_CURNEDEST
\n
"
,
ret
);
ok
(
dwOut
==
1
+
strlen
(
appdir
),
"Wrong length of buffer for current location: "
"got %d(%s) expected %d
\n
"
,
dwOut
,
outBuf
,
lstrlenA
(
appdir
)
+
1
);
/* search for filename */
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
filename
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
filename
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
filename
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
filename
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
filename
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
filename
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
/* search for regedit */
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"regedit"
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
!
ret
,
"Wrong return value got %x expected 0
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"regedit"
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
!
ret
,
"Wrong return value got %x expected 0
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"regedit"
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"regedit"
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"regedit"
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"regedit"
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
/* search for regedit.exe */
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"regedit.exe"
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"regedit.exe"
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"regedit.exe"
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"regedit.exe"
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"regedit.exe"
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"regedit.exe"
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
/* nonexistent filename */
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"doesnotexist.exe"
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
!
ret
,
"Wrong return value got %x expected 0
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"doesnotexist.exe"
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
!
ret
,
"Wrong return value got %x expected 0
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"doesnotexist.exe"
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
0
,
"doesnotexist.exe"
,
NULL
,
"C:
\\
random_path_does_not_exist"
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"doesnotexist.exe"
,
NULL
,
NULL
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"doesnotexist.exe"
,
NULL
,
empty
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"doesnotexist.exe"
,
NULL
,
appdir
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
dwCur
=
MAX_PATH
;
dwOut
=
MAX_PATH
;
ret
=
VerFindFileA
(
VFFF_ISSHAREDFILE
,
"doesnotexist.exe"
,
NULL
,
"C:
\\
random_path_does_not_exist"
,
curdir
,
&
dwCur
,
outBuf
,
&
dwOut
);
ok
(
ret
&
VFF_CURNEDEST
,
"Wrong return value got %x expected VFF_CURNEDEST set
\n
"
,
ret
);
DeleteFileA
(
filename
);
}
}
...
...
dlls/version/version.c
View file @
91f96b28
...
...
@@ -1128,16 +1128,22 @@ static int testFileExistenceA( char const * path, char const * file, BOOL excl )
fileinfo
.
cBytes
=
sizeof
(
OFSTRUCT
);
strcpy
(
filename
,
path
);
filenamelen
=
strlen
(
filename
);
if
(
path
)
{
strcpy
(
filename
,
path
);
filenamelen
=
strlen
(
filename
);
/* Add a trailing \ if necessary */
if
(
filenamelen
)
{
if
(
filename
[
filenamelen
-
1
]
!=
'\\'
)
strcat
(
filename
,
"
\\
"
);
/* Add a trailing \ if necessary */
if
(
filenamelen
)
{
if
(
filename
[
filenamelen
-
1
]
!=
'\\'
)
strcat
(
filename
,
"
\\
"
);
}
else
/* specify the current directory */
strcpy
(
filename
,
".
\\
"
);
}
else
/* specify the current directory */
strcpy
(
filename
,
".
\\
"
)
;
else
filename
[
0
]
=
0
;
/* Create the full pathname */
strcat
(
filename
,
file
);
...
...
@@ -1227,10 +1233,10 @@ DWORD WINAPI VerFindFileA(
{
if
(
testFileExistenceA
(
destDir
,
lpszFilename
,
FALSE
))
curDir
=
destDir
;
else
if
(
lpszAppDir
&&
testFileExistenceA
(
lpszAppDir
,
lpszFilename
,
FALSE
))
{
curDir
=
lpszAppDir
;
if
(
!
testFileExistenceA
(
systemDir
,
lpszFilename
,
FALSE
))
retval
|=
VFF_CURNEDEST
;
}
}
}
else
/* not a shared file */
...
...
@@ -1241,15 +1247,17 @@ DWORD WINAPI VerFindFileA(
GetWindowsDirectoryA
(
winDir
,
MAX_PATH
);
if
(
testFileExistenceA
(
destDir
,
lpszFilename
,
FALSE
))
curDir
=
destDir
;
else
if
(
testFileExistenceA
(
winDir
,
lpszFilename
,
FALSE
))
{
curDir
=
winDir
;
retval
|=
VFF_CURNEDEST
;
}
else
if
(
testFileExistenceA
(
systemDir
,
lpszFilename
,
FALSE
))
{
curDir
=
systemDir
;
retval
|=
VFF_CURNEDEST
;
if
(
lpszAppDir
&&
lpszAppDir
[
0
])
{
if
(
!
testFileExistenceA
(
lpszAppDir
,
lpszFilename
,
FALSE
))
retval
|=
VFF_CURNEDEST
;
}
else
if
(
testFileExistenceA
(
NULL
,
lpszFilename
,
FALSE
))
retval
|=
VFF_CURNEDEST
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment