qdr_field_t *qdr_field_from_iter(qd_iterator_t *iter) { if (!iter) return 0; qdr_field_t *field = new_qdr_field_t(); qd_buffer_t *buf; int remaining; int length; ZERO(field); qd_iterator_reset(iter); remaining = qd_iterator_remaining(iter); length = remaining; while (remaining) { buf = qd_buffer(); size_t cap = qd_buffer_capacity(buf); int copied = qd_iterator_ncopy(iter, qd_buffer_cursor(buf), cap); qd_buffer_insert(buf, copied); DEQ_INSERT_TAIL(field->buffers, buf); remaining = qd_iterator_remaining(iter); } field->iterator = qd_iterator_buffer(DEQ_HEAD(field->buffers), 0, length, ITER_VIEW_ALL); return field; }
unsigned char *qd_iterator_copy(qd_iterator_t *iter) { if (!iter) return 0; int length = qd_iterator_length(iter); unsigned char *copy = malloc(length+1); int i = qd_iterator_ncopy(iter, copy, length+1); copy[i] = '\0'; return copy; }
char* qd_iterator_strncpy(qd_iterator_t *iter, char* buffer, int n) { int i = qd_iterator_ncopy(iter, (unsigned char*) buffer, n-1); buffer[i] = '\0'; return buffer; }