void buffer_putnstr(struct buffer *b, const char *str,size_t n) { _buffer_extendby(b, n + 1); memcpy(&b->buf[b->NUL], str, n); b->NUL += n; b->buf[b->NUL] = '\0'; }
void _string_vprintf(struct buffer *b, const char *fmt, va_list ap) { int num_required; while ((num_required = vsnprintf(b->buf + b->NUL, b->buflen - b->NUL, fmt, ap)) >= b->buflen - b->NUL) _buffer_extendby(b, num_required + 1); b->NUL += num_required; }
/* * Big-Endian */ void buffer_putint(struct buffer *b, int val) { _buffer_extendby(b, sizeof(int)); b->buf[b->NUL++] = (val >> 24) & 0xff; b->buf[b->NUL++] = (val >> 16) & 0xff; b->buf[b->NUL++] = (val >> 8) & 0xff; b->buf[b->NUL++] = val & 0xff; }
void buffer_putstr(struct buffer *b, const char *str) { size_t len = strlen(str); _buffer_extendby(b, len + 1); memcpy(&b->buf[b->NUL], str, len); b->NUL += len; b->buf[b->NUL] = '\0'; }
struct buffer *buffer_new(size_t reserve) { struct buffer *b = xmalloc(sizeof(struct buffer)); memset(b, 0, sizeof(struct buffer)); if (reserve) _buffer_extendby(b, reserve + 1); return b; }
void buffer_putfilter( struct buffer *b,bloom_filter* bfilter ) { int len; len = bfilter->filter_size * sizeof(unsigned) + sizeof(bfilter->filter_size) + sizeof(bfilter->num_buckets); if (len > b->buflen) _buffer_extendby(b, len + 1024); buffer_putint(b,bfilter->filter_size); buffer_putint(b,bfilter->num_buckets); buffer_putnstr(b,bfilter->filter,bfilter->filter_size * sizeof(unsigned)); }
struct buffer *buffer_new(size_t reserve) { struct buffer *b = malloc(sizeof(struct buffer)); b->buf = NULL; b->NUL = 0; b->buflen = 0; if (reserve) _buffer_extendby(b, reserve + 1); return b; }
/* * Big-Endian */ void buffer_putlong(struct buffer *b, uint64_t val) { _buffer_extendby(b, sizeof(uint64_t)); b->buf[b->NUL++] = (val >> 56) & 0xff; b->buf[b->NUL++] = (val >> 48) & 0xff; b->buf[b->NUL++] = (val >> 40) & 0xff; b->buf[b->NUL++] = (val >> 32) & 0xff; b->buf[b->NUL++] = (val >> 24) & 0xff; b->buf[b->NUL++] = (val >> 16) & 0xff; b->buf[b->NUL++] = (val >> 8) & 0xff; b->buf[b->NUL++] = val & 0xff; }
void buffer_putdata(struct buffer *b, struct data_item* d) { int len; len = d->key_len + d->value_len; if(b->NUL + len + 21 >= b->buflen)//21 is the other member of data_item:int int int int64 char = 21 _buffer_extendby(b, 1024); buffer_putint(b,len); buffer_putint(b,d->key_len); buffer_putint(b,d->value_len); buffer_putc(b,d->type); buffer_putlong(b,d->version); buffer_putnstr(b,d->key,d->key_len); buffer_putnstr(b,d->value,d->value_len); }
void buffer_putc(struct buffer *b, const char c) { _buffer_extendby(b, 2); b->buf[b->NUL++] = c; b->buf[b->NUL] = '\0'; }
void buffer_putshort(struct buffer *b, short val) { _buffer_extendby(b, sizeof(short)); b->buf[b->NUL++] = val & 0xff; b->buf[b->NUL++] = (val >> 8) & 0xff; }