Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
37f5c111
Commit
37f5c111
authored
Jul 23, 2000
by
Eric Pouech
Committed by
Alexandre Julliard
Jul 23, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Insured that all parameters of async functions are copied before
returnig from request.
parent
690142dc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
59 deletions
+77
-59
async.c
dlls/winsock/async.c
+77
-59
No files found.
dlls/winsock/async.c
View file @
37f5c111
...
...
@@ -271,11 +271,17 @@ typedef struct _async_query {
HANDLE16
async_handle
;
int
flags
;
#define AQ_WIN16 0
#define AQ_WIN32 4
#define AQ_WIN16 0
x00
#define AQ_WIN32
0x0
4
#define HB_WIN32(hb) (hb->flags & AQ_WIN32)
#define AQ_NUMBER 0
#define AQ_NAME 8
#define AQ_NUMBER 0x00
#define AQ_NAME 0x08
#define AQ_COPYPTR1 0x10
#define AQ_DUPLOWPTR1 0x20
#define AQ_MASKPTR1 0x30
#define AQ_COPYPTR2 0x40
#define AQ_DUPLOWPTR2 0x80
#define AQ_MASKPTR2 0xC0
#define AQ_GETHOST 0
#define AQ_GETPROTO 1
...
...
@@ -387,41 +393,43 @@ static HANDLE16 __WSAsyncDBQuery(
void
*
sbuf
,
INT
sbuflen
,
UINT
flags
)
{
async_query
*
aq
;
HANDLE
hthread
;
int
xbuflen
=
0
;
/* allocate buffer to copy protocol- and service name to */
/* note: this is done in the calling thread so we can return */
/* a decent error code if the Alloc fails */
if
(
flags
&
(
AQ_GETPROTO
|
AQ_GETSERV
))
{
if
(
ptr1
)
xbuflen
+=
strlen
(
ptr1
)
+
1
;
if
(
ptr2
)
xbuflen
+=
strlen
(
ptr2
)
+
1
;
}
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
async_query
)
+
xbuflen
);
if
(
!
aq
)
{
SetLastError
(
WSAEWOULDBLOCK
);
/* insufficient resources */
return
0
;
}
/* convert protocol- and service names to lower case */
if
(
flags
&
(
AQ_GETPROTO
|
AQ_GETSERV
))
{
const
char
*
pfrom
;
char
*
pto
=
aq
->
xbuf
;
if
(
ptr1
)
{
pfrom
=
ptr1
;
ptr1
=
pto
;
do
*
pto
++
=
tolower
(
*
pfrom
);
while
(
*
pfrom
++
);
}
if
(
ptr2
)
{
pfrom
=
ptr2
;
ptr2
=
pto
;
do
*
pto
++
=
tolower
(
*
pfrom
);
while
(
*
pfrom
++
);
}
}
async_query
*
aq
;
char
*
pto
;
LPCSTR
pfm
;
int
xbuflen
=
0
;
/* allocate buffer to copy protocol- and service name to */
/* note: this is done in the calling thread so we can return */
/* a decent error code if the Alloc fails */
switch
(
flags
&
AQ_MASKPTR1
)
{
case
0
:
break
;
case
AQ_COPYPTR1
:
xbuflen
+=
int1
;
break
;
case
AQ_DUPLOWPTR1
:
xbuflen
+=
strlen
(
ptr1
)
+
1
;
break
;
}
switch
(
flags
&
AQ_MASKPTR2
)
{
case
0
:
break
;
case
AQ_COPYPTR2
:
xbuflen
+=
int2
;
break
;
case
AQ_DUPLOWPTR2
:
xbuflen
+=
strlen
(
ptr2
)
+
1
;
break
;
}
if
(
!
(
aq
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
async_query
)
+
xbuflen
)))
{
SetLastError
(
WSAEWOULDBLOCK
);
/* insufficient resources */
return
0
;
}
pto
=
aq
->
xbuf
;
if
(
ptr1
)
switch
(
flags
&
AQ_MASKPTR1
)
{
case
0
:
break
;
case
AQ_COPYPTR1
:
memcpy
(
pto
,
ptr1
,
int1
);
ptr1
=
pto
;
pto
+=
int1
;
break
;
case
AQ_DUPLOWPTR1
:
pfm
=
ptr1
;
ptr1
=
pto
;
do
*
pto
++
=
tolower
(
*
pfm
);
while
(
*
pfm
++
);
break
;
}
if
(
ptr2
)
switch
(
flags
&
AQ_MASKPTR2
)
{
case
0
:
break
;
case
AQ_COPYPTR2
:
memcpy
(
pto
,
ptr2
,
int2
);
ptr2
=
pto
;
pto
+=
int2
;
break
;
case
AQ_DUPLOWPTR2
:
pfm
=
ptr2
;
ptr2
=
pto
;
do
*
pto
++
=
tolower
(
*
pfm
);
while
(
*
pfm
++
);
break
;
}
aq
->
hWnd
=
hWnd
;
aq
->
uMsg
=
uMsg
;
...
...
@@ -433,9 +441,9 @@ static HANDLE16 __WSAsyncDBQuery(
aq
->
flags
=
flags
;
aq
->
sbuf
=
(
SEGPTR
)
sbuf
;
aq
->
sbuflen
=
sbuflen
;
#if 1
hthread
=
CreateThread
(
NULL
,
0
,
_async_queryfun
,
aq
,
0
,
NULL
);
if
(
hthread
==
INVALID_HANDLE_VALUE
)
if
(
CreateThread
(
NULL
,
0
,
_async_queryfun
,
aq
,
0
,
NULL
)
==
INVALID_HANDLE_VALUE
)
#endif
_async_queryfun
(
aq
);
return
__ws_async_handle
;
...
...
@@ -450,7 +458,8 @@ HANDLE16 WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 uMsg, LPCSTR addr,
{
TRACE
(
"hwnd %04x, msg %04x, addr %08x[%i]
\n
"
,
hWnd
,
uMsg
,
(
unsigned
)
addr
,
len
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
len
,
addr
,
type
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_NUMBER
|
AQ_WIN16
|
AQ_GETHOST
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
len
,
addr
,
type
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_NUMBER
|
AQ_COPYPTR1
|
AQ_WIN16
|
AQ_GETHOST
);
}
/***********************************************************************
...
...
@@ -461,7 +470,8 @@ HANDLE WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
{
TRACE
(
"hwnd %04x, msg %04x, addr %08x[%i]
\n
"
,
hWnd
,
uMsg
,
(
unsigned
)
addr
,
len
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
len
,
addr
,
type
,
NULL
,
sbuf
,
buflen
,
AQ_NUMBER
|
AQ_WIN32
|
AQ_GETHOST
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
len
,
addr
,
type
,
NULL
,
sbuf
,
buflen
,
AQ_NUMBER
|
AQ_COPYPTR1
|
AQ_WIN32
|
AQ_GETHOST
);
}
/***********************************************************************
...
...
@@ -470,9 +480,10 @@ HANDLE WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
HANDLE16
WINAPI
WSAAsyncGetHostByName16
(
HWND16
hWnd
,
UINT16
uMsg
,
LPCSTR
name
,
SEGPTR
sbuf
,
INT16
buflen
)
{
TRACE
(
"hwnd %04x, msg %04x, host %s, buffer %i
\n
"
,
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
int
)
buflen
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_NAME
|
AQ_WIN16
|
AQ_GETHOST
);
TRACE
(
"hwnd %04x, msg %04x, host %s, buffer %i
\n
"
,
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
int
)
buflen
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_NAME
|
AQ_DUPLOWPTR1
|
AQ_WIN16
|
AQ_GETHOST
);
}
/***********************************************************************
...
...
@@ -483,7 +494,8 @@ HANDLE WINAPI WSAAsyncGetHostByName(HWND hWnd, UINT uMsg, LPCSTR name,
{
TRACE
(
"hwnd %04x, msg %08x, host %s, buffer %i
\n
"
,
(
HWND16
)
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
int
)
buflen
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,
sbuf
,
buflen
,
AQ_NAME
|
AQ_WIN32
|
AQ_GETHOST
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,
sbuf
,
buflen
,
AQ_NAME
|
AQ_DUPLOWPTR1
|
AQ_WIN32
|
AQ_GETHOST
);
}
/***********************************************************************
...
...
@@ -494,7 +506,8 @@ HANDLE16 WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,
{
TRACE
(
"hwnd %04x, msg %08x, protocol %s
\n
"
,
(
HWND16
)
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_GETPROTO
|
AQ_NAME
|
AQ_WIN16
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_NAME
|
AQ_DUPLOWPTR1
|
AQ_WIN16
|
AQ_GETPROTO
);
}
/***********************************************************************
...
...
@@ -505,7 +518,8 @@ HANDLE WINAPI WSAAsyncGetProtoByName(HWND hWnd, UINT uMsg, LPCSTR name,
{
TRACE
(
"hwnd %04x, msg %08x, protocol %s
\n
"
,
(
HWND16
)
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,
sbuf
,
buflen
,
AQ_GETPROTO
|
AQ_NAME
|
AQ_WIN32
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
NULL
,
sbuf
,
buflen
,
AQ_NAME
|
AQ_DUPLOWPTR1
|
AQ_WIN32
|
AQ_GETPROTO
);
}
...
...
@@ -516,7 +530,8 @@ HANDLE16 WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd,UINT16 uMsg,INT16 number,
SEGPTR
sbuf
,
INT16
buflen
)
{
TRACE
(
"hwnd %04x, msg %04x, num %i
\n
"
,
hWnd
,
uMsg
,
number
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
number
,
NULL
,
0
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_GETPROTO
|
AQ_NUMBER
|
AQ_WIN16
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
number
,
NULL
,
0
,
NULL
,(
void
*
)
sbuf
,
buflen
,
AQ_GETPROTO
|
AQ_NUMBER
|
AQ_WIN16
);
}
/***********************************************************************
...
...
@@ -526,8 +541,8 @@ HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND hWnd, UINT uMsg, INT number,
LPSTR
sbuf
,
INT
buflen
)
{
TRACE
(
"hwnd %04x, msg %04x, num %i
\n
"
,
hWnd
,
uMsg
,
number
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
number
,
NULL
,
0
,
NULL
,
sbuf
,
buflen
,
AQ_GETPROTO
|
AQ_NUMBER
|
AQ_WIN32
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
number
,
NULL
,
0
,
NULL
,
sbuf
,
buflen
,
AQ_GETPROTO
|
AQ_NUMBER
|
AQ_WIN32
);
}
/***********************************************************************
...
...
@@ -537,9 +552,9 @@ HANDLE16 WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,
LPCSTR
proto
,
SEGPTR
sbuf
,
INT16
buflen
)
{
TRACE
(
"hwnd %04x, msg %04x, name %s, proto %s
\n
"
,
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
proto
)
?
proto
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
proto
,(
void
*
)
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NAME
|
AQ_WIN16
);
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
proto
)
?
proto
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
proto
,(
void
*
)
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NAME
|
AQ_DUPLOWPTR1
|
AQ_DUPLOWPTR2
|
AQ_WIN16
);
}
/***********************************************************************
...
...
@@ -549,8 +564,9 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
LPCSTR
proto
,
LPSTR
sbuf
,
INT
buflen
)
{
TRACE
(
"hwnd %04x, msg %04x, name %s, proto %s
\n
"
,
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
proto
)
?
proto
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
proto
,
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NAME
|
AQ_WIN32
);
hWnd
,
uMsg
,
(
name
)
?
name
:
"<null>"
,
(
proto
)
?
proto
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
0
,
name
,
0
,
proto
,
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NAME
|
AQ_DUPLOWPTR1
|
AQ_DUPLOWPTR2
|
AQ_WIN32
);
}
/***********************************************************************
...
...
@@ -561,7 +577,8 @@ HANDLE16 WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 uMsg, INT16 port,
{
TRACE
(
"hwnd %04x, msg %04x, port %i, proto %s
\n
"
,
hWnd
,
uMsg
,
port
,
(
proto
)
?
proto
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
port
,
NULL
,
0
,
proto
,(
void
*
)
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NUMBER
|
AQ_WIN16
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
port
,
NULL
,
0
,
proto
,(
void
*
)
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NUMBER
|
AQ_DUPLOWPTR2
|
AQ_WIN16
);
}
/***********************************************************************
...
...
@@ -572,7 +589,8 @@ HANDLE WINAPI WSAAsyncGetServByPort(HWND hWnd, UINT uMsg, INT port,
{
TRACE
(
"hwnd %04x, msg %04x, port %i, proto %s
\n
"
,
hWnd
,
uMsg
,
port
,
(
proto
)
?
proto
:
"<null>"
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
port
,
NULL
,
0
,
proto
,
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NUMBER
|
AQ_WIN32
);
return
__WSAsyncDBQuery
(
hWnd
,
uMsg
,
port
,
NULL
,
0
,
proto
,
sbuf
,
buflen
,
AQ_GETSERV
|
AQ_NUMBER
|
AQ_DUPLOWPTR2
|
AQ_WIN32
);
}
/***********************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment