#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <X11/ICE/ICElib.h>
#include "ICElibint.h"
void
_IceAddReplyWait (
IceConn iceConn,
IceReplyWaitInfo *replyWait
)
{
_IceSavedReplyWait *savedReplyWait;
_IceSavedReplyWait *prev, *last;
prev = NULL;
last = iceConn->saved_reply_waits;
while (last)
{
if (last->reply_wait == replyWait)
return;
prev = last;
last = last->next;
}
savedReplyWait = (_IceSavedReplyWait *) malloc (
sizeof (_IceSavedReplyWait));
savedReplyWait->reply_wait = replyWait;
savedReplyWait->reply_ready = False;
savedReplyWait->next = NULL;
if (prev == NULL)
iceConn->saved_reply_waits = savedReplyWait;
else
prev->next = savedReplyWait;
}
IceReplyWaitInfo *
_IceSearchReplyWaits (
IceConn iceConn,
int majorOpcode
)
{
_IceSavedReplyWait *savedReplyWait = iceConn->saved_reply_waits;
while (savedReplyWait && !savedReplyWait->reply_ready &&
savedReplyWait->reply_wait->major_opcode_of_request != majorOpcode)
{
savedReplyWait = savedReplyWait->next;
}
return (savedReplyWait ? savedReplyWait->reply_wait : NULL);
}
void
_IceSetReplyReady (
IceConn iceConn,
IceReplyWaitInfo *replyWait
)
{
_IceSavedReplyWait *savedReplyWait = iceConn->saved_reply_waits;
while (savedReplyWait && savedReplyWait->reply_wait != replyWait)
savedReplyWait = savedReplyWait->next;
if (savedReplyWait)
savedReplyWait->reply_ready = True;
}
Bool
_IceCheckReplyReady (
IceConn iceConn,
IceReplyWaitInfo *replyWait
)
{
_IceSavedReplyWait *savedReplyWait = iceConn->saved_reply_waits;
_IceSavedReplyWait *prev = NULL;
Bool found = False;
Bool ready;
while (savedReplyWait && !found)
{
if (savedReplyWait->reply_wait == replyWait)
found = True;
else
{
prev = savedReplyWait;
savedReplyWait = savedReplyWait->next;
}
}
ready = found && savedReplyWait->reply_ready;
if (ready)
{
if (prev == NULL)
iceConn->saved_reply_waits = savedReplyWait->next;
else
prev->next = savedReplyWait->next;
free ((char *) savedReplyWait);
}
return (ready);
}