Finished separation of shell32 and wsock32.
This commit is contained in:
parent
1ec253d205
commit
3a0f8b7953
|
@ -945,9 +945,12 @@ debug_channels (comm debugstr dll int resource stress thunk toolhelp win32)
|
||||||
@ stdcall FindResource16(long str str) FindResource16
|
@ stdcall FindResource16(long str str) FindResource16
|
||||||
@ stdcall FreeResource16(long) FreeResource16
|
@ stdcall FreeResource16(long) FreeResource16
|
||||||
@ stdcall GetCurrentTask() GetCurrentTask
|
@ stdcall GetCurrentTask() GetCurrentTask
|
||||||
|
@ stdcall GetDOSEnvironment16() GetDOSEnvironment16
|
||||||
|
@ stdcall GetModuleFileName16(long ptr long) GetModuleFileName16
|
||||||
@ stdcall GetModuleHandle16(str) GetModuleHandle16
|
@ stdcall GetModuleHandle16(str) GetModuleHandle16
|
||||||
@ stdcall LoadResource16(long long) LoadResource16
|
@ stdcall LoadResource16(long long) LoadResource16
|
||||||
@ stdcall LockResource16(long) LockResource16
|
@ stdcall LockResource16(long) LockResource16
|
||||||
|
@ stdcall WinExec16(str long) WinExec16
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Wine internal extensions
|
# Wine internal extensions
|
||||||
|
@ -965,3 +968,6 @@ debug_channels (comm debugstr dll int resource stress thunk toolhelp win32)
|
||||||
@ stdcall wine_call_to_16_long(ptr long) wine_call_to_16_long
|
@ stdcall wine_call_to_16_long(ptr long) wine_call_to_16_long
|
||||||
@ stdcall wine_call_to_16_regs_short(ptr long) wine_call_to_16_regs_short
|
@ stdcall wine_call_to_16_regs_short(ptr long) wine_call_to_16_regs_short
|
||||||
@ stdcall wine_call_to_16_regs_long (ptr long) wine_call_to_16_regs_long
|
@ stdcall wine_call_to_16_regs_long (ptr long) wine_call_to_16_regs_long
|
||||||
|
|
||||||
|
# Unix files
|
||||||
|
@ stdcall wine_get_unix_file_name(str ptr long) wine_get_unix_file_name
|
||||||
|
|
|
@ -5,7 +5,6 @@ VPATH = @srcdir@
|
||||||
MODULE = shell32
|
MODULE = shell32
|
||||||
ALTNAMES = shell
|
ALTNAMES = shell
|
||||||
EXTRALIBS = -lwine_unicode
|
EXTRALIBS = -lwine_unicode
|
||||||
IMPORTS = user32 gdi32 kernel32 ntdll
|
|
||||||
|
|
||||||
LDDLLFLAGS = @LDDLLFLAGS@
|
LDDLLFLAGS = @LDDLLFLAGS@
|
||||||
SYMBOLFILE = $(MODULE).tmp.o
|
SYMBOLFILE = $(MODULE).tmp.o
|
||||||
|
|
|
@ -785,7 +785,7 @@ LRESULT WINAPI ShellHookProc16(INT16 code, WPARAM16 wParam, LPARAM lParam)
|
||||||
case HSHELL_WINDOWDESTROYED: uMsg = uMsgWndDestroyed; break;
|
case HSHELL_WINDOWDESTROYED: uMsg = uMsgWndDestroyed; break;
|
||||||
case HSHELL_ACTIVATESHELLWINDOW: uMsg = uMsgShellActivate;
|
case HSHELL_ACTIVATESHELLWINDOW: uMsg = uMsgShellActivate;
|
||||||
}
|
}
|
||||||
PostMessage16( SHELL_hWnd, uMsg, wParam, 0 );
|
PostMessageA( SHELL_hWnd, uMsg, wParam, 0 );
|
||||||
}
|
}
|
||||||
return CallNextHookEx16( WH_SHELL, code, wParam, lParam );
|
return CallNextHookEx16( WH_SHELL, code, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
@ -825,3 +825,25 @@ BOOL WINAPI RegisterShellHook16(HWND16 hWnd, UINT16 uAction)
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DriveType16 (SHELL.262)
|
||||||
|
*/
|
||||||
|
UINT16 WINAPI DriveType16( UINT16 drive )
|
||||||
|
{
|
||||||
|
UINT ret;
|
||||||
|
char path[] = "A:\\";
|
||||||
|
path[0] += drive;
|
||||||
|
ret = GetDriveTypeA(path);
|
||||||
|
switch(ret) /* some values are not supported in Win16 */
|
||||||
|
{
|
||||||
|
case DRIVE_CDROM:
|
||||||
|
ret = DRIVE_REMOTE;
|
||||||
|
break;
|
||||||
|
case DRIVE_DOESNOTEXIST:
|
||||||
|
ret = DRIVE_CANNOTDETERMINE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ owner shell32
|
||||||
157 stub RESTARTDIALOG
|
157 stub RESTARTDIALOG
|
||||||
# 166 PICKICONDLG
|
# 166 PICKICONDLG
|
||||||
|
|
||||||
262 pascal16 DriveType(long) GetDriveType16
|
262 pascal16 DriveType(long) DriveType16
|
||||||
|
|
||||||
# 263 SH16TO32DRIVEIOCTL
|
# 263 SH16TO32DRIVEIOCTL
|
||||||
# 264 SH16TO32INT2526
|
# 264 SH16TO32INT2526
|
||||||
|
|
|
@ -8,11 +8,11 @@ import ole32.dll
|
||||||
|
|
||||||
import shlwapi.dll
|
import shlwapi.dll
|
||||||
import comctl32.dll
|
import comctl32.dll
|
||||||
#import user32.dll
|
import user32.dll
|
||||||
#import gdi32.dll
|
import gdi32.dll
|
||||||
#import advapi32.dll
|
import advapi32.dll
|
||||||
#import kernel32.dll
|
import kernel32.dll
|
||||||
#import ntdll.dll
|
import ntdll.dll
|
||||||
|
|
||||||
debug_channels (exec pidl shell)
|
debug_channels (exec pidl shell)
|
||||||
|
|
||||||
|
|
|
@ -646,6 +646,7 @@ BOOL WINAPI AboutDlgProc( HWND hWnd, UINT msg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if 0 /* FIXME: should use DoDragDrop */
|
||||||
case WM_LBTRACKPOINT:
|
case WM_LBTRACKPOINT:
|
||||||
hWndCtl = GetDlgItem(hWnd, IDC_LISTBOX);
|
hWndCtl = GetDlgItem(hWnd, IDC_LISTBOX);
|
||||||
if( (INT16)GetKeyState( VK_CONTROL ) < 0 )
|
if( (INT16)GetKeyState( VK_CONTROL ) < 0 )
|
||||||
|
@ -670,6 +671,7 @@ BOOL WINAPI AboutDlgProc( HWND hWnd, UINT msg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case WM_QUERYDROPOBJECT:
|
case WM_QUERYDROPOBJECT:
|
||||||
if( wParam == 0 )
|
if( wParam == 0 )
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
|
#include "winreg.h"
|
||||||
|
|
||||||
#include "shlobj.h"
|
#include "shlobj.h"
|
||||||
#include "wine/undocshell.h"
|
#include "wine/undocshell.h"
|
||||||
|
@ -28,8 +29,6 @@
|
||||||
#include "pidl.h"
|
#include "pidl.h"
|
||||||
#include "shell32_main.h"
|
#include "shell32_main.h"
|
||||||
#include "shlguid.h"
|
#include "shlguid.h"
|
||||||
#include "file.h"
|
|
||||||
#include "options.h"
|
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(shell);
|
DEFAULT_DEBUG_CHANNEL(shell);
|
||||||
|
|
||||||
|
@ -450,10 +449,10 @@ static int ExtractFromICO(const char *szFileName, const char *szXPMFileName)
|
||||||
/* get the Unix file name for a given path, allocating the string */
|
/* get the Unix file name for a given path, allocating the string */
|
||||||
inline static char *get_unix_file_name( const char *dos )
|
inline static char *get_unix_file_name( const char *dos )
|
||||||
{
|
{
|
||||||
DOS_FULL_NAME path;
|
char buffer[MAX_PATH];
|
||||||
|
|
||||||
if (!DOSFS_GetFullName( dos, FALSE, &path )) return NULL;
|
if (!wine_get_unix_file_name( dos, buffer, sizeof(buffer) )) return NULL;
|
||||||
return HEAP_strdupA( GetProcessHeap(), 0, path.long_name );
|
return HEAP_strdupA( GetProcessHeap(), 0, buffer );
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL create_default_icon( const char *filename )
|
static BOOL create_default_icon( const char *filename )
|
||||||
|
@ -493,6 +492,7 @@ static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFile
|
||||||
char *path_name = NULL;
|
char *path_name = NULL;
|
||||||
char *work_dir = NULL;
|
char *work_dir = NULL;
|
||||||
BOOL bDesktop;
|
BOOL bDesktop;
|
||||||
|
HKEY hkey;
|
||||||
|
|
||||||
_ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
|
_ICOM_THIS_From_IPersistFile(IShellLinkImpl, iface);
|
||||||
|
|
||||||
|
@ -507,7 +507,14 @@ static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFile
|
||||||
if (strcasecmp( p, ".exe" )) return NOERROR;
|
if (strcasecmp( p, ".exe" )) return NOERROR;
|
||||||
|
|
||||||
/* check if ShellLinker configured */
|
/* check if ShellLinker configured */
|
||||||
PROFILE_GetWineIniString( "wine", "ShellLinker", "", buffer, sizeof(buffer) );
|
buffer[0] = 0;
|
||||||
|
if (!RegOpenKeyExA( HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Wine",
|
||||||
|
0, KEY_ALL_ACCESS, &hkey ))
|
||||||
|
{
|
||||||
|
DWORD type, count = sizeof(buffer);
|
||||||
|
if (RegQueryValueExA( hkey, "ShellLinker", 0, &type, buffer, &count )) buffer[0] = 0;
|
||||||
|
RegCloseKey( hkey );
|
||||||
|
}
|
||||||
if (!*buffer) return NOERROR;
|
if (!*buffer) return NOERROR;
|
||||||
shell_link_app = HEAP_strdupA( GetProcessHeap(), 0, buffer );
|
shell_link_app = HEAP_strdupA( GetProcessHeap(), 0, buffer );
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
#include "debugtools.h"
|
#include "debugtools.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "heap.h"
|
|
||||||
|
|
||||||
#include "shellapi.h"
|
#include "shellapi.h"
|
||||||
#include "shlobj.h"
|
#include "shlobj.h"
|
||||||
|
@ -126,3 +125,86 @@ HRESULT WINAPI SHRegCloseKey (HKEY hkey)
|
||||||
TRACE("0x%04x\n",hkey);
|
TRACE("0x%04x\n",hkey);
|
||||||
return RegCloseKey( hkey );
|
return RegCloseKey( hkey );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 16-bit functions */
|
||||||
|
|
||||||
|
/* 0 and 1 are valid rootkeys in win16 shell.dll and are used by
|
||||||
|
* some programs. Do not remove those cases. -MM
|
||||||
|
*/
|
||||||
|
static inline void fix_win16_hkey( HKEY *hkey )
|
||||||
|
{
|
||||||
|
if (*hkey == 0 || *hkey == 1) *hkey = HKEY_CLASSES_ROOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegOpenKey16 [SHELL.1]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, LPHKEY retkey )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
return RegOpenKeyA( hkey, name, retkey );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegCreateKey16 [SHELL.2]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, LPHKEY retkey )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
return RegCreateKeyA( hkey, name, retkey );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegCloseKey16 [SHELL.3]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegCloseKey16( HKEY hkey )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
return RegCloseKey( hkey );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegDeleteKey16 [SHELL.4]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
return RegDeleteKeyA( hkey, name );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegSetValue16 [SHELL.5]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
return RegSetValueA( hkey, name, type, data, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegQueryValue16 [SHELL.6]
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
* Is this HACK still applicable?
|
||||||
|
*
|
||||||
|
* HACK
|
||||||
|
* The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just
|
||||||
|
* mask out the high 16 bit. This (not so much incidently) hopefully fixes
|
||||||
|
* Aldus FH4)
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
if (count) *count &= 0xffff;
|
||||||
|
return RegQueryValueA( hkey, name, data, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* RegEnumKey16 [SHELL.7]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len )
|
||||||
|
{
|
||||||
|
fix_win16_hkey( &hkey );
|
||||||
|
return RegEnumKeyA( hkey, index, name, name_len );
|
||||||
|
}
|
||||||
|
|
|
@ -656,9 +656,11 @@ debug_channels (accel caret class clipboard combo cursor dc ddeml dialog driver
|
||||||
################################################################
|
################################################################
|
||||||
# Wine extensions: Win16 functions that are needed by other dlls
|
# Wine extensions: Win16 functions that are needed by other dlls
|
||||||
#
|
#
|
||||||
|
@ stdcall CallNextHookEx16(long long long long) CallNextHookEx16
|
||||||
@ stdcall CallWindowProc16(long long long long long) CallWindowProc16
|
@ stdcall CallWindowProc16(long long long long long) CallWindowProc16
|
||||||
@ stdcall CreateDialogIndirectParam16(long ptr long long long) CreateDialogIndirectParam16
|
@ stdcall CreateDialogIndirectParam16(long ptr long long long) CreateDialogIndirectParam16
|
||||||
@ stdcall DialogBoxIndirectParam16(long long long long long) DialogBoxIndirectParam16
|
@ stdcall DialogBoxIndirectParam16(long long long long long) DialogBoxIndirectParam16
|
||||||
|
@ stdcall SetWindowsHookEx16(long long long long) SetWindowsHookEx16
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Wine extensions: extra useful functions not exported under Windows
|
# Wine extensions: extra useful functions not exported under Windows
|
||||||
|
|
|
@ -146,9 +146,6 @@ typedef struct /* WSAAsyncSelect() control struct */
|
||||||
|
|
||||||
typedef struct _WSINFO
|
typedef struct _WSINFO
|
||||||
{
|
{
|
||||||
DWORD dwThisProcess;
|
|
||||||
struct _WSINFO *lpNextIData;
|
|
||||||
|
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
INT16 num_startup; /* reference counter */
|
INT16 num_startup; /* reference counter */
|
||||||
INT16 num_async_rq;
|
INT16 num_async_rq;
|
||||||
|
@ -326,44 +323,16 @@ static int _get_sock_error(SOCKET s, unsigned int bit)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LPWSINFO lpFirstIData = NULL;
|
static WSINFO wsinfo;
|
||||||
|
|
||||||
static LPWSINFO WINSOCK_GetIData(void)
|
inline static LPWSINFO WINSOCK_GetIData(void)
|
||||||
{
|
{
|
||||||
DWORD pid = GetCurrentProcessId();
|
return &wsinfo;
|
||||||
LPWSINFO iData;
|
|
||||||
|
|
||||||
for (iData = lpFirstIData; iData; iData = iData->lpNextIData) {
|
|
||||||
if (iData->dwThisProcess == pid)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return iData;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL WINSOCK_CreateIData(void)
|
|
||||||
{
|
|
||||||
LPWSINFO iData;
|
|
||||||
|
|
||||||
iData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WSINFO));
|
|
||||||
if (!iData)
|
|
||||||
return FALSE;
|
|
||||||
iData->dwThisProcess = GetCurrentProcessId();
|
|
||||||
iData->lpNextIData = lpFirstIData;
|
|
||||||
lpFirstIData = iData;
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WINSOCK_DeleteIData(void)
|
static void WINSOCK_DeleteIData(void)
|
||||||
{
|
{
|
||||||
LPWSINFO iData = WINSOCK_GetIData();
|
LPWSINFO iData = WINSOCK_GetIData();
|
||||||
LPWSINFO* ppid;
|
|
||||||
if (iData) {
|
|
||||||
for (ppid = &lpFirstIData; *ppid; ppid = &(*ppid)->lpNextIData) {
|
|
||||||
if (*ppid == iData) {
|
|
||||||
*ppid = iData->lpNextIData;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( iData->flags & WSI_BLOCKINGCALL )
|
if( iData->flags & WSI_BLOCKINGCALL )
|
||||||
TRACE("\tinside blocking call!\n");
|
TRACE("\tinside blocking call!\n");
|
||||||
|
@ -374,7 +343,6 @@ static void WINSOCK_DeleteIData(void)
|
||||||
if( iData->dbuffer ) SEGPTR_FREE(iData->dbuffer);
|
if( iData->dbuffer ) SEGPTR_FREE(iData->dbuffer);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, iData);
|
HeapFree(GetProcessHeap(), 0, iData);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -391,21 +359,6 @@ BOOL WINAPI WSOCK32_LibMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* WINSOCK_LibMain (WINSOCK.init)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI WINSOCK_LibMain(DWORD fdwReason, HINSTANCE hInstDLL, WORD ds,
|
|
||||||
WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)
|
|
||||||
{
|
|
||||||
TRACE("0x%x 0x%lx\n", hInstDLL, fdwReason);
|
|
||||||
switch (fdwReason) {
|
|
||||||
case DLL_PROCESS_DETACH:
|
|
||||||
WINSOCK_DeleteIData();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* convert_sockopt()
|
* convert_sockopt()
|
||||||
*
|
*
|
||||||
|
@ -650,12 +603,6 @@ INT16 WINAPI WSAStartup16(UINT16 wVersionRequested, LPWSADATA lpWSAData)
|
||||||
if( _WSHeap == 0 ) return WSASYSNOTREADY;
|
if( _WSHeap == 0 ) return WSASYSNOTREADY;
|
||||||
|
|
||||||
pwsi = WINSOCK_GetIData();
|
pwsi = WINSOCK_GetIData();
|
||||||
if( pwsi == NULL )
|
|
||||||
{
|
|
||||||
WINSOCK_CreateIData();
|
|
||||||
pwsi = WINSOCK_GetIData();
|
|
||||||
if (!pwsi) return WSASYSNOTREADY;
|
|
||||||
}
|
|
||||||
pwsi->num_startup++;
|
pwsi->num_startup++;
|
||||||
|
|
||||||
/* return winsock information */
|
/* return winsock information */
|
||||||
|
@ -711,12 +658,6 @@ INT WINAPI WSAStartup(UINT wVersionRequested, LPWSADATA lpWSAData)
|
||||||
if( _WSHeap == 0 ) return WSASYSNOTREADY;
|
if( _WSHeap == 0 ) return WSASYSNOTREADY;
|
||||||
|
|
||||||
pwsi = WINSOCK_GetIData();
|
pwsi = WINSOCK_GetIData();
|
||||||
if( pwsi == NULL )
|
|
||||||
{
|
|
||||||
WINSOCK_CreateIData();
|
|
||||||
pwsi = WINSOCK_GetIData();
|
|
||||||
if (!pwsi) return WSASYSNOTREADY;
|
|
||||||
}
|
|
||||||
pwsi->num_startup++;
|
pwsi->num_startup++;
|
||||||
|
|
||||||
/* return winsock information */
|
/* return winsock information */
|
||||||
|
@ -2832,23 +2773,6 @@ INT16 WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, LONG lEvent)
|
||||||
return (INT16)WSAAsyncSelect( s, hWnd, wMsg, lEvent );
|
return (INT16)WSAAsyncSelect( s, hWnd, wMsg, lEvent );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* WSARecvEx() (WSOCK32.1107)
|
|
||||||
*
|
|
||||||
* WSARecvEx is a Microsoft specific extension to winsock that is identical to recv
|
|
||||||
* except that has an in/out argument call flags that has the value MSG_PARTIAL ored
|
|
||||||
* into the flags parameter when a partial packet is read. This only applies to
|
|
||||||
* sockets using the datagram protocol. This method does not seem to be implemented
|
|
||||||
* correctly by microsoft as the winsock implementation does not set the MSG_PARTIAL
|
|
||||||
* flag when a fragmented packet arrives.
|
|
||||||
*/
|
|
||||||
INT WINAPI WSARecvEx(SOCKET s, char *buf, INT len, INT *flags) {
|
|
||||||
FIXME("(WSARecvEx) partial packet return value not set \n");
|
|
||||||
|
|
||||||
return WSOCK32_recv(s, buf, len, *flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WSARecvEx16() (WINSOCK.1107)
|
* WSARecvEx16() (WINSOCK.1107)
|
||||||
*
|
*
|
||||||
|
|
|
@ -61,5 +61,3 @@ owner ws2_32
|
||||||
116 pascal WSACleanup() WSACleanup
|
116 pascal WSACleanup() WSACleanup
|
||||||
151 pascal16 __WSAFDIsSet(word ptr) __WSAFDIsSet16
|
151 pascal16 __WSAFDIsSet(word ptr) __WSAFDIsSet16
|
||||||
1107 pascal16 WSARecvEx(word ptr word ptr) WSARecvEx16
|
1107 pascal16 WSARecvEx(word ptr word ptr) WSARecvEx16
|
||||||
|
|
||||||
1999 pascal DllEntryPoint(long word word word long word) WINSOCK_LibMain
|
|
||||||
|
|
|
@ -3,8 +3,9 @@ TOPOBJDIR = ../..
|
||||||
SRCDIR = @srcdir@
|
SRCDIR = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
MODULE = wsock32
|
MODULE = wsock32
|
||||||
SOVERSION = 1.0
|
|
||||||
IMPORTS = ws2_32 kernel32 ntdll
|
LDDLLFLAGS = @LDDLLFLAGS@
|
||||||
|
SYMBOLFILE = $(MODULE).tmp.o
|
||||||
|
|
||||||
C_SRCS = socket.c
|
C_SRCS = socket.c
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
#include "debugtools.h"
|
#include "debugtools.h"
|
||||||
#include "winsock2.h"
|
#include "winsock2.h"
|
||||||
#include "winnt.h"
|
#include "winnt.h"
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(winsock);
|
DEFAULT_DEBUG_CHANNEL(winsock);
|
||||||
|
|
||||||
|
static INT (WINAPI *WS2_recv)(SOCKET s, char *buf, INT len, INT flags);
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WsControl()
|
* WsControl()
|
||||||
|
@ -682,6 +684,21 @@ int WSCNTL_GetTransRecvStat(int intNumber, unsigned long *transBytes, unsigned l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WSARecvEx() (WSOCK32.1107)
|
||||||
|
*
|
||||||
|
* WSARecvEx is a Microsoft specific extension to winsock that is identical to recv
|
||||||
|
* except that has an in/out argument call flags that has the value MSG_PARTIAL ored
|
||||||
|
* into the flags parameter when a partial packet is read. This only applies to
|
||||||
|
* sockets using the datagram protocol. This method does not seem to be implemented
|
||||||
|
* correctly by microsoft as the winsock implementation does not set the MSG_PARTIAL
|
||||||
|
* flag when a fragmented packet arrives.
|
||||||
|
*/
|
||||||
|
INT WINAPI WSARecvEx(SOCKET s, char *buf, INT len, INT *flags)
|
||||||
|
{
|
||||||
|
FIXME("(WSARecvEx) partial packet return value not set \n");
|
||||||
|
return WS2_recv(s, buf, len, *flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -692,3 +709,31 @@ void WINAPI WS_s_perror(LPCSTR message)
|
||||||
FIXME("(%s): stub\n",message);
|
FIXME("(%s): stub\n",message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WSOCK_LibMain
|
||||||
|
*/
|
||||||
|
BOOL WINAPI WSOCK_LibMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
||||||
|
{
|
||||||
|
static HMODULE ws2_32;
|
||||||
|
switch (reason)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
/* we import ws2_32 by hand, because we don't want to implicitly */
|
||||||
|
/* link to it; otherwise Unix calls like socket() get redirected */
|
||||||
|
/* to ws2_32.dll and this is not what we want. */
|
||||||
|
|
||||||
|
if (!(ws2_32 = LoadLibraryA( "ws2_32.dll" )))
|
||||||
|
{
|
||||||
|
ERR("could not load ws2_32\n" );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
WS2_recv = (void *)GetProcAddress( ws2_32, "recv" );
|
||||||
|
break;
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
FreeLibrary( ws2_32 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
name wsock32
|
name wsock32
|
||||||
type win32
|
type win32
|
||||||
|
init WSOCK_LibMain
|
||||||
|
|
||||||
import ws2_32.dll
|
|
||||||
import kernel32.dll
|
import kernel32.dll
|
||||||
import ntdll.dll
|
import ntdll.dll
|
||||||
|
|
||||||
|
|
|
@ -1366,6 +1366,21 @@ DWORD WINAPI GetFullPathNameW( LPCWSTR name, DWORD len, LPWSTR buffer,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* wine_get_unix_file_name (Not a Windows API, but exported from KERNEL32)
|
||||||
|
*
|
||||||
|
* Return the full Unix file name for a given path.
|
||||||
|
*/
|
||||||
|
BOOL WINAPI wine_get_unix_file_name( LPCSTR dos, LPSTR buffer, DWORD len )
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
DOS_FULL_NAME path;
|
||||||
|
if ((ret = DOSFS_GetFullName( dos, FALSE, &path ))) lstrcpynA( buffer, dos, len );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DOSFS_FindNextEx
|
* DOSFS_FindNextEx
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1894,6 +1894,12 @@ DWORD WINAPI _ConfirmSysLevel(SYSLEVEL*);
|
||||||
VOID WINAPI _EnterSysLevel(SYSLEVEL*);
|
VOID WINAPI _EnterSysLevel(SYSLEVEL*);
|
||||||
VOID WINAPI _LeaveSysLevel(SYSLEVEL*);
|
VOID WINAPI _LeaveSysLevel(SYSLEVEL*);
|
||||||
|
|
||||||
|
|
||||||
|
/* Wine internal functions */
|
||||||
|
|
||||||
|
BOOL WINAPI wine_get_unix_file_name( LPCSTR dos, LPSTR buffer, DWORD len );
|
||||||
|
|
||||||
|
|
||||||
/* a few optimizations for i386/gcc */
|
/* a few optimizations for i386/gcc */
|
||||||
|
|
||||||
#if defined(__i386__) && defined(__GNUC__)
|
#if defined(__i386__) && defined(__GNUC__)
|
||||||
|
|
Loading…
Reference in New Issue