Import Wine commit (by Nikolay Sivov):
- 164fe0470ccf7cb3c0946cbb52d4139aec0c4a03, Query for NPAddConnection and NPAddConnection3 when loading a provider.

CORE-10032

svn path=/trunk/; revision=70754
This commit is contained in:
Pierre Schweitzer 2016-02-15 20:15:54 +00:00
parent cf5302e3de
commit f873af4b21
2 changed files with 256 additions and 252 deletions

View file

@ -49,7 +49,7 @@ Index: wnet.c
=================================================================== ===================================================================
--- wnet.c (révision 70645) --- wnet.c (révision 70645)
+++ wnet.c (copie de travail) +++ wnet.c (copie de travail)
@@ -1549,6 +1549,33 @@ @@ -1553,6 +1553,33 @@
dwFlags, NULL, 0, NULL); dwFlags, NULL, 0, NULL);
} }
@ -83,7 +83,7 @@ Index: wnet.c
/***************************************************************** /*****************************************************************
* WNetUseConnectionA [MPR.@] * WNetUseConnectionA [MPR.@]
*/ */
@@ -1557,12 +1584,67 @@ @@ -1561,12 +1588,67 @@
LPSTR lpAccessName, LPDWORD lpBufferSize, LPSTR lpAccessName, LPDWORD lpBufferSize,
LPDWORD lpResult ) LPDWORD lpResult )
{ {
@ -156,7 +156,7 @@ Index: wnet.c
} }
/***************************************************************** /*****************************************************************
@@ -1573,12 +1655,75 @@ @@ -1577,12 +1659,75 @@
LPWSTR lpAccessName, LPDWORD lpBufferSize, LPWSTR lpAccessName, LPDWORD lpBufferSize,
LPDWORD lpResult ) LPDWORD lpResult )
{ {

View file

@ -46,6 +46,8 @@ typedef struct _WNetProvider
PF_NPEnumResource enumResource; PF_NPEnumResource enumResource;
PF_NPCloseEnum closeEnum; PF_NPCloseEnum closeEnum;
PF_NPGetResourceInformation getResourceInformation; PF_NPGetResourceInformation getResourceInformation;
PF_NPAddConnection addConnection;
PF_NPAddConnection3 addConnection3;
} WNetProvider, *PWNetProvider; } WNetProvider, *PWNetProvider;
typedef struct _WNetProviderTable typedef struct _WNetProviderTable
@ -152,8 +154,9 @@ static void _tryLoadProvider(PCWSTR provider)
if (hLib) if (hLib)
{ {
PF_NPGetCaps getCaps = (PF_NPGetCaps)GetProcAddress(hLib, #define MPR_GETPROC(proc) ((PF_##proc)GetProcAddress(hLib, #proc))
"NPGetCaps");
PF_NPGetCaps getCaps = MPR_GETPROC(NPGetCaps);
TRACE("loaded lib %p\n", hLib); TRACE("loaded lib %p\n", hLib);
if (getCaps) if (getCaps)
@ -172,22 +175,17 @@ static void _tryLoadProvider(PCWSTR provider)
if (provider->dwEnumScopes) if (provider->dwEnumScopes)
{ {
TRACE("supports enumeration\n"); TRACE("supports enumeration\n");
provider->openEnum = (PF_NPOpenEnum) provider->openEnum = MPR_GETPROC(NPOpenEnum);
GetProcAddress(hLib, "NPOpenEnum"); TRACE("NPOpenEnum %p\n", provider->openEnum);
TRACE("openEnum is %p\n", provider->openEnum); provider->enumResource = MPR_GETPROC(NPEnumResource);
provider->enumResource = (PF_NPEnumResource) TRACE("NPEnumResource %p\n", provider->enumResource);
GetProcAddress(hLib, "NPEnumResource"); provider->closeEnum = MPR_GETPROC(NPCloseEnum);
TRACE("enumResource is %p\n", TRACE("NPCloseEnum %p\n", provider->closeEnum);
provider->enumResource); provider->getResourceInformation = MPR_GETPROC(NPGetResourceInformation);
provider->closeEnum = (PF_NPCloseEnum) TRACE("NPGetResourceInformation %p\n", provider->getResourceInformation);
GetProcAddress(hLib, "NPCloseEnum"); if (!provider->openEnum ||
TRACE("closeEnum is %p\n", provider->closeEnum); !provider->enumResource ||
provider->getResourceInformation = (PF_NPGetResourceInformation) !provider->closeEnum)
GetProcAddress(hLib, "NPGetResourceInformation");
TRACE("getResourceInformation is %p\n",
provider->getResourceInformation);
if (!provider->openEnum || !provider->enumResource
|| !provider->closeEnum)
{ {
provider->openEnum = NULL; provider->openEnum = NULL;
provider->enumResource = NULL; provider->enumResource = NULL;
@ -196,6 +194,10 @@ static void _tryLoadProvider(PCWSTR provider)
WARN("Couldn't load enumeration functions\n"); WARN("Couldn't load enumeration functions\n");
} }
} }
provider->addConnection = MPR_GETPROC(NPAddConnection);
provider->addConnection3 = MPR_GETPROC(NPAddConnection3);
TRACE("NPAddConnection %p\n", provider->addConnection);
TRACE("NPAddConnection3 %p\n", provider->addConnection3);
providerTable->numProviders++; providerTable->numProviders++;
} }
else else
@ -205,6 +207,8 @@ static void _tryLoadProvider(PCWSTR provider)
HeapFree(GetProcessHeap(), 0, name); HeapFree(GetProcessHeap(), 0, name);
FreeLibrary(hLib); FreeLibrary(hLib);
} }
#undef MPR_GETPROC
} }
else else
{ {