-INTERNAL char *buffer = 0;
-INTERNAL char *write_pos;
-INTERNAL struct iovec *iovecs = 0;
-INTERNAL struct iovec *cur_vec;
-INTERNAL unsigned length;
-
-INTERNAL inline void next_vec(void)
-{
- if(write_pos!=cur_vec->iov_base)
- {
- cur_vec->iov_len = write_pos-(char *)cur_vec->iov_base;
- length += cur_vec->iov_len;
- ++cur_vec;
- cur_vec->iov_base = write_pos;
- }
-}
-
-INTERNAL inline void write_bytes(const char *ptr, unsigned size)
-{
- unsigned i;
- for(i=0; i<size; ++i)
- *write_pos++ = *ptr++;
-}
-
-INTERNAL inline void write_char(char v)
-{
- *write_pos++ = v;
-}
-
-INTERNAL inline void write_short(short v)
-{
- write_bytes((char *)&v, sizeof(short));
-}
-
-INTERNAL inline void write_int(int v)
-{
- write_bytes((char *)&v, sizeof(int));
-}
-
-INTERNAL inline void write_long(long v)
-{
- write_bytes((char *)&v, sizeof(long));
-}
-
-INTERNAL inline void write_long_long(long long v)
-{
- write_bytes((char *)&v, sizeof(long long));
-}
-
-INTERNAL inline void write_float(float v)
-{
- write_bytes((char *)&v, sizeof(float));
-}
-
-INTERNAL inline void write_double(double v)
-{
- write_bytes((char *)&v, sizeof(double));
-}
-
-INTERNAL inline void write_pointer(const void *p)
-{
- write_bytes((char *)&p, sizeof(void *));
-}
-
-INTERNAL inline void write_data(const void *data, unsigned size)
-{
- if(data)
- {
- write_int(size);
- next_vec();
- cur_vec->iov_base = (void *)data;
- cur_vec->iov_len = size;
- length += size;
- ++cur_vec;
- cur_vec->iov_base = write_pos;
- }
- else
- write_int(0);
-}
-
-INTERNAL inline void write_string(const char *s)
-{
- write_data(s, strlen(s)+1);
-}
-
-INTERNAL inline void write_string_array(const char **sa, unsigned size)
-{
- unsigned i;
- size /= sizeof(const char *);
- write_int(size);
- for(i=0; i<size; ++i)
- write_string(sa[i]);
-}
-
-INTERNAL inline void begin_packet(int func)
-{
- if(!buffer)
- buffer = (char *)malloc(1024);
- if(!iovecs)
- iovecs = (struct iovec *)malloc(16*sizeof(struct iovec));
-
- write_pos = buffer;
- cur_vec = iovecs;
- cur_vec->iov_base = write_pos;
- length = 0;
-
- write_int(0);
- write_short(func);
-}
-
-INTERNAL inline int get_out_fd(void)