void packet_write_data(GlPacket *pkt, const void *data, unsigned size)
{
- if(data)
+ if(!data)
+ packet_write_int(pkt, 0);
+ else if((unsigned long)data<0x100000)
+ {
+ packet_write_int(pkt, ~0);
+ packet_write_pointer(pkt, data);
+ }
+ else
{
GlOutPacket *out = &pkt->out;
++out->vec;
out->vec->iov_base = out->ptr;
}
- else
- packet_write_int(pkt, 0);
}
void packet_write_string(GlPacket *pkt, const char *s)
int vlen;
packet_read_int(pkt, &vlen);
- if(vlen)
+ if(vlen==~0)
+ packet_read_pointer(pkt, v);
+ else if(vlen)
+ {
*v = in->ptr;
+ in->ptr += vlen;
+ in->chunk -= vlen;
+ in->length -= vlen;
+ }
else
*v = NULL;
- in->ptr += vlen;
- in->chunk -= vlen;
- in->length -= vlen;
}
void packet_read_string(GlPacket *pkt, const char **v)