Calculate the size of the next mailslot message correctly.
This commit is contained in:
parent
2f30d307df
commit
d6fdac2676
@ -200,9 +200,7 @@ static int mailslot_test()
|
|||||||
dwNext = dwMsgCount = 0;
|
dwNext = dwMsgCount = 0;
|
||||||
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
||||||
"getmailslotinfo failed\n");
|
"getmailslotinfo failed\n");
|
||||||
todo_wine {
|
|
||||||
ok( dwNext == 1, "dwNext incorrect\n");
|
ok( dwNext == 1, "dwNext incorrect\n");
|
||||||
}
|
|
||||||
ok( dwMsgCount == 1, "dwMsgCount incorrect\n");
|
ok( dwMsgCount == 1, "dwMsgCount incorrect\n");
|
||||||
|
|
||||||
buffer[0] = 'b';
|
buffer[0] = 'b';
|
||||||
@ -213,8 +211,8 @@ static int mailslot_test()
|
|||||||
dwNext = dwMsgCount = 0;
|
dwNext = dwMsgCount = 0;
|
||||||
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
||||||
"getmailslotinfo failed\n");
|
"getmailslotinfo failed\n");
|
||||||
todo_wine {
|
|
||||||
ok( dwNext == 1, "dwNext incorrect\n");
|
ok( dwNext == 1, "dwNext incorrect\n");
|
||||||
|
todo_wine {
|
||||||
ok( dwMsgCount == 2, "dwMsgCount incorrect\n");
|
ok( dwMsgCount == 2, "dwMsgCount incorrect\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,8 +223,8 @@ static int mailslot_test()
|
|||||||
dwNext = dwMsgCount = 0;
|
dwNext = dwMsgCount = 0;
|
||||||
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
||||||
"getmailslotinfo failed\n");
|
"getmailslotinfo failed\n");
|
||||||
todo_wine {
|
|
||||||
ok( dwNext == 1, "dwNext incorrect\n");
|
ok( dwNext == 1, "dwNext incorrect\n");
|
||||||
|
todo_wine {
|
||||||
ok( dwMsgCount == 3, "dwMsgCount incorrect\n");
|
ok( dwMsgCount == 3, "dwMsgCount incorrect\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,8 +243,8 @@ static int mailslot_test()
|
|||||||
dwNext = dwMsgCount = 0;
|
dwNext = dwMsgCount = 0;
|
||||||
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ),
|
||||||
"getmailslotinfo failed\n");
|
"getmailslotinfo failed\n");
|
||||||
todo_wine {
|
|
||||||
ok( dwNext == 2, "dwNext incorrect\n");
|
ok( dwNext == 2, "dwNext incorrect\n");
|
||||||
|
todo_wine {
|
||||||
ok( dwMsgCount == 2, "dwMsgCount incorrect\n");
|
ok( dwMsgCount == 2, "dwMsgCount incorrect\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +162,16 @@ static int mailslot_message_count(struct mailslot *mailslot)
|
|||||||
return (poll( &pfd, 1, 0 ) == 1) ? 1 : 0;
|
return (poll( &pfd, 1, 0 ) == 1) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mailslot_next_msg_size( struct mailslot *mailslot )
|
||||||
|
{
|
||||||
|
int size, fd;
|
||||||
|
|
||||||
|
size = 0;
|
||||||
|
fd = get_unix_fd( mailslot->fd );
|
||||||
|
ioctl( fd, FIONREAD, &size );
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
static int mailslot_get_info( struct fd *fd )
|
static int mailslot_get_info( struct fd *fd )
|
||||||
{
|
{
|
||||||
struct mailslot *mailslot = get_fd_user( fd );
|
struct mailslot *mailslot = get_fd_user( fd );
|
||||||
@ -434,8 +444,6 @@ DECL_HANDLER(set_mailslot_info)
|
|||||||
|
|
||||||
if( mailslot )
|
if( mailslot )
|
||||||
{
|
{
|
||||||
int r, fd = get_unix_fd( mailslot->fd );
|
|
||||||
|
|
||||||
if( req->flags & MAILSLOT_SET_READ_TIMEOUT )
|
if( req->flags & MAILSLOT_SET_READ_TIMEOUT )
|
||||||
mailslot->read_timeout = req->read_timeout;
|
mailslot->read_timeout = req->read_timeout;
|
||||||
reply->max_msgsize = mailslot->max_msgsize;
|
reply->max_msgsize = mailslot->max_msgsize;
|
||||||
@ -443,11 +451,10 @@ DECL_HANDLER(set_mailslot_info)
|
|||||||
reply->msg_count = mailslot_message_count(mailslot);
|
reply->msg_count = mailslot_message_count(mailslot);
|
||||||
|
|
||||||
/* get the size of the next message */
|
/* get the size of the next message */
|
||||||
r = recv( fd, NULL, 0, MSG_PEEK | MSG_TRUNC );
|
if( reply->msg_count )
|
||||||
if( r < 0 )
|
reply->next_msgsize = mailslot_next_msg_size(mailslot);
|
||||||
reply->next_msgsize = MAILSLOT_NO_MESSAGE;
|
|
||||||
else
|
else
|
||||||
reply->next_msgsize = r;
|
reply->next_msgsize = MAILSLOT_NO_MESSAGE;
|
||||||
|
|
||||||
release_object( mailslot );
|
release_object( mailslot );
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user