Return from GetFileVersionInfo(Size) if specified file found, but
[wine] / dlls / version / ver16.c
1 /*
2  * Implementation of VER.DLL
3  *
4  * Copyright 1999 Ulrich Weigand
5  */
6
7 #include "winbase.h"
8 #include "wine/winbase16.h"
9 #include "winver.h"
10 #include "debugtools.h"
11
12 DEFAULT_DEBUG_CHANNEL(ver);
13
14
15 /*************************************************************************
16  * GetFileVersionInfoSize16                  [VER.6]
17  */
18 DWORD WINAPI GetFileVersionInfoSize16( LPCSTR lpszFileName, LPDWORD lpdwHandle )
19 {
20     TRACE("(%s, %p)\n", debugstr_a(lpszFileName), lpdwHandle );
21     return GetFileVersionInfoSizeA( lpszFileName, lpdwHandle );
22 }
23
24 /*************************************************************************
25  * GetFileVersionInfo16                      [VER.7]
26  */
27 DWORD WINAPI GetFileVersionInfo16( LPCSTR lpszFileName, DWORD handle,
28                                    DWORD cbBuf, LPVOID lpvData )
29 {
30     TRACE("(%s, %08lx, %ld, %p)\n", 
31                 debugstr_a(lpszFileName), handle, cbBuf, lpvData );
32
33     return GetFileVersionInfoA( lpszFileName, handle, cbBuf, lpvData );
34 }
35
36 /*************************************************************************
37  * VerFindFile16                             [VER.8]
38  */
39 DWORD WINAPI VerFindFile16( UINT16 flags, LPCSTR lpszFilename, 
40                             LPCSTR lpszWinDir, LPCSTR lpszAppDir,
41                             LPSTR lpszCurDir, UINT16 *lpuCurDirLen,
42                             LPSTR lpszDestDir, UINT16 *lpuDestDirLen )
43 {
44     UINT curDirLen, destDirLen;
45     DWORD retv = VerFindFileA( flags, lpszFilename, lpszWinDir, lpszAppDir,
46                                  lpszCurDir, &curDirLen, lpszDestDir, &destDirLen );
47
48     *lpuCurDirLen = (UINT16)curDirLen;
49     *lpuDestDirLen = (UINT16)destDirLen;
50     return retv;
51 }
52
53 /*************************************************************************
54  * VerInstallFile16                          [VER.9]
55  */
56 DWORD WINAPI VerInstallFile16( UINT16 flags, 
57                                LPCSTR lpszSrcFilename, LPCSTR lpszDestFilename, 
58                                LPCSTR lpszSrcDir, LPCSTR lpszDestDir, LPCSTR lpszCurDir,
59                                LPSTR lpszTmpFile, UINT16 *lpwTmpFileLen )
60 {
61     UINT filelen;
62     DWORD retv = VerInstallFileA( flags, lpszSrcFilename, lpszDestFilename, 
63                                     lpszSrcDir, lpszDestDir, lpszCurDir, 
64                                     lpszTmpFile, &filelen);
65
66     *lpwTmpFileLen = (UINT16)filelen;
67     return retv;
68 }
69
70 /*************************************************************************
71  * VerLanguageName16                        [VER.10]
72  */
73 DWORD WINAPI VerLanguageName16( UINT16 uLang, LPSTR lpszLang, UINT16 cbLang )
74 {
75     return VerLanguageNameA( uLang, lpszLang, cbLang );
76 }
77
78 /*************************************************************************
79  * VerQueryValue16                          [VER.11]
80  */
81 DWORD WINAPI VerQueryValue16( SEGPTR spvBlock, LPCSTR lpszSubBlock, 
82                               SEGPTR *lpspBuffer, UINT16 *lpcb )
83 {
84     LPVOID lpvBlock = MapSL( spvBlock );
85     LPVOID buffer = lpvBlock;
86     UINT buflen;
87     DWORD retv;
88
89     TRACE("(%p, %s, %p, %p)\n", 
90                 lpvBlock, debugstr_a(lpszSubBlock), lpspBuffer, lpcb );
91
92     retv = VerQueryValueA( lpvBlock, lpszSubBlock, &buffer, &buflen );
93     if ( !retv ) return FALSE;
94
95     if ( OFFSETOF( spvBlock ) + ((char *) buffer - (char *) lpvBlock) >= 0x10000 )
96     {
97         FIXME("offset %08X too large relative to %04X:%04X\n",
98                (char *) buffer - (char *) lpvBlock, SELECTOROF( spvBlock ), OFFSETOF( spvBlock ) );
99         return FALSE;
100     }
101
102     if (lpcb) *lpcb = buflen;
103     *lpspBuffer = (SEGPTR) ((char *) spvBlock + ((char *) buffer - (char *) lpvBlock));
104
105     return retv;
106 }
107