/* * Append a byte to the buffer. */ int uni_msg_append8(struct uni_msg *msg, u_int u) { if (uni_msg_ensure(msg, 1) == -1) return (-1); *msg->b_wptr++ = u; return (0); }
/* * Append a 32 bit word to the buffer. */ int uni_msg_append32(struct uni_msg *msg, u_int u) { if (uni_msg_ensure(msg, 4) == -1) return (-1); u = htonl(u); bcopy(&u, msg->b_wptr, 4); msg->b_wptr += 4; return (0); }
/* * Append the given buffer to the message. May reallocate the message * buffer. Return 0 if ok, -1 on errors. */ int uni_msg_append(struct uni_msg *m, void *buf, size_t size) { int error; if ((error = uni_msg_ensure(m, size))) return (error); memcpy(m->b_wptr, buf, size); m->b_wptr += size; return (0); }
/* * Make sure there is enough space in front of the data for * len bytes, and update the read pointer. */ int uni_msg_prepend(struct uni_msg *msg, size_t len) { size_t need; if (uni_msg_leading(msg) >= len) { msg->b_rptr -= len; return (0); } need = len - uni_msg_leading(msg); if (uni_msg_ensure(msg, need)) return (-1); memcpy(msg->b_rptr + need, msg->b_rptr, uni_msg_len(msg)); msg->b_rptr += need - len; msg->b_wptr += need; return (0); }