- New implementation of SendMessage, ReceiveMessage, ReplyMessage functions
[wine] / dlls / ver / ver16.c
1 /*
2  * Implementation of VER.DLL
3  *
4  * Copyright 1999 Ulrich Weigand
5  */
6
7 #include "winbase.h"
8 #include "winver.h"
9 #include "ldt.h"
10 #include "ver.h"
11 #include "debug.h"
12
13
14 /*************************************************************************
15  * GetFileResourceSize16                     [VER.2]
16  */
17 DWORD WINAPI GetFileResourceSize16( LPCSTR lpszFileName, 
18                                     SEGPTR spszResType, SEGPTR spszResId,
19                                     LPDWORD lpdwFileOffset )
20 {
21     LPCSTR lpszResType = HIWORD( spszResType )? PTR_SEG_TO_LIN( spszResType )
22                                               : (LPCSTR)spszResType;
23     LPCSTR lpszResId = HIWORD( spszResId )? PTR_SEG_TO_LIN( spszResId )
24                                           : (LPCSTR)spszResId;
25
26     return GetFileResourceSize32( lpszFileName, 
27                                   lpszResType, lpszResId, lpdwFileOffset );
28 }
29
30 /*************************************************************************
31  * GetFileResource16                         [VER.3]
32  */
33 DWORD WINAPI GetFileResource16( LPCSTR lpszFileName, 
34                                 SEGPTR spszResType, SEGPTR spszResId,
35                                 DWORD dwFileOffset, 
36                                 DWORD dwResLen, LPVOID lpvData )
37 {
38     LPCSTR lpszResType = HIWORD( spszResType )? PTR_SEG_TO_LIN( spszResType )
39                                               : (LPCSTR)spszResType;
40     LPCSTR lpszResId = HIWORD( spszResId )? PTR_SEG_TO_LIN( spszResId )
41                                           : (LPCSTR)spszResId;
42
43     return GetFileResource32( lpszFileName, lpszResType, lpszResId,
44                               dwFileOffset, dwResLen, lpvData );
45 }
46
47 /*************************************************************************
48  * GetFileVersionInfoSize16                  [VER.6]
49  */
50 DWORD WINAPI GetFileVersionInfoSize16( LPCSTR lpszFileName, LPDWORD lpdwHandle )
51 {
52     TRACE( ver, "(%s, %p)\n", debugstr_a(lpszFileName), lpdwHandle );
53     return GetFileVersionInfoSize32A( lpszFileName, lpdwHandle );
54 }
55
56 /*************************************************************************
57  * GetFileVersionInfo16                      [VER.7]
58  */
59 DWORD WINAPI GetFileVersionInfo16( LPCSTR lpszFileName, DWORD handle,
60                                    DWORD cbBuf, LPVOID lpvData )
61 {
62     TRACE( ver, "(%s, %08lx, %ld, %p)\n", 
63                 debugstr_a(lpszFileName), handle, cbBuf, lpvData );
64
65     return GetFileVersionInfo32A( lpszFileName, handle, cbBuf, lpvData );
66 }
67
68 /*************************************************************************
69  * VerFindFile16                             [VER.8]
70  */
71 DWORD WINAPI VerFindFile16( UINT16 flags, LPCSTR lpszFilename, 
72                             LPCSTR lpszWinDir, LPCSTR lpszAppDir,
73                             LPSTR lpszCurDir, UINT16 *lpuCurDirLen,
74                             LPSTR lpszDestDir, UINT16 *lpuDestDirLen )
75 {
76     UINT32 curDirLen, destDirLen;
77     DWORD retv = VerFindFile32A( flags, lpszFilename, lpszWinDir, lpszAppDir,
78                                  lpszCurDir, &curDirLen, lpszDestDir, &destDirLen );
79
80     *lpuCurDirLen = (UINT16)curDirLen;
81     *lpuDestDirLen = (UINT16)destDirLen;
82     return retv;
83 }
84
85 /*************************************************************************
86  * VerInstallFile16                          [VER.9]
87  */
88 DWORD WINAPI VerInstallFile16( UINT16 flags, 
89                                LPCSTR lpszSrcFilename, LPCSTR lpszDestFilename, 
90                                LPCSTR lpszSrcDir, LPCSTR lpszDestDir, LPCSTR lpszCurDir,
91                                LPSTR lpszTmpFile, UINT16 *lpwTmpFileLen )
92 {
93     UINT32 filelen;
94     DWORD retv = VerInstallFile32A( flags, lpszSrcFilename, lpszDestFilename, 
95                                     lpszSrcDir, lpszDestDir, lpszCurDir, 
96                                     lpszTmpFile, &filelen);
97
98     *lpwTmpFileLen = (UINT16)filelen;
99     return retv;
100 }
101
102 /*************************************************************************
103  * VerLanguageName16                        [VER.10]
104  */
105 DWORD WINAPI VerLanguageName16( UINT16 uLang, LPSTR lpszLang, UINT16 cbLang )
106 {
107     return VerLanguageName32A( uLang, lpszLang, cbLang );
108 }
109
110 /*************************************************************************
111  * VerQueryValue16                          [VER.11]
112  */
113 DWORD WINAPI VerQueryValue16( SEGPTR spvBlock, LPCSTR lpszSubBlock, 
114                               SEGPTR *lpspBuffer, UINT16 *lpcb )
115 {
116     LPVOID lpvBlock = PTR_SEG_TO_LIN( spvBlock );
117     LPVOID buffer = lpvBlock;
118     UINT32 buflen;
119     DWORD retv;
120
121     TRACE( ver, "(%p, %s, %p, %p)\n", 
122                 lpvBlock, debugstr_a(lpszSubBlock), lpspBuffer, lpcb );
123
124     retv = VerQueryValue32A( lpvBlock, lpszSubBlock, &buffer, &buflen );
125     if ( !retv ) return FALSE;
126
127     if ( OFFSETOF( spvBlock ) + (buffer - lpvBlock) >= 0x10000 )
128     {
129         FIXME( ver, "offset %08X too large relative to %04X:%04X\n",
130                buffer - lpvBlock, SELECTOROF( spvBlock ), OFFSETOF( spvBlock ) );
131         return FALSE;
132     }
133
134     *lpcb = buflen;
135     *lpspBuffer = spvBlock + (buffer - lpvBlock);
136
137     return retv;
138 }
139