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