Lines Matching full:stream
97 libder_stream_init(struct libder_ctx *ctx, struct libder_stream *stream) in libder_stream_init() argument
101 stream->stream_ctx = ctx; in libder_stream_init()
102 stream->stream_error = 0; in libder_stream_init()
103 stream->stream_eof = false; in libder_stream_init()
104 stream->stream_offset = 0; in libder_stream_init()
105 stream->stream_consumed = 0; in libder_stream_init()
106 stream->stream_last_commit = 0; in libder_stream_init()
107 if (stream->stream_type == LDST_NONE) { in libder_stream_init()
108 assert(stream->stream_src_buf != NULL); in libder_stream_init()
109 assert(stream->stream_bufsz != 0); in libder_stream_init()
110 assert(stream->stream_resid != 0); in libder_stream_init()
118 stream->stream_buf = malloc(buffer_size); in libder_stream_init()
119 if (stream->stream_buf == NULL) { in libder_stream_init()
122 stream->stream_bufsz = buffer_size; in libder_stream_init()
123 stream->stream_resid = 0; /* Nothing read yet */ in libder_stream_init()
126 return (stream->stream_buf != NULL); in libder_stream_init()
130 libder_stream_free(struct libder_stream *stream) in libder_stream_free() argument
132 if (stream->stream_buf != NULL) { in libder_stream_free()
133 libder_bzero(stream->stream_buf, stream->stream_bufsz); in libder_stream_free()
134 free(stream->stream_buf); in libder_stream_free()
139 libder_stream_commit(struct libder_stream *stream) in libder_stream_commit() argument
142 if (stream->stream_offset <= stream->stream_last_commit) in libder_stream_commit()
145 stream->stream_consumed += stream->stream_offset - stream->stream_last_commit; in libder_stream_commit()
146 stream->stream_last_commit = stream->stream_offset; in libder_stream_commit()
150 libder_stream_dynamic(const struct libder_stream *stream) in libder_stream_dynamic() argument
153 return (stream->stream_type != LDST_NONE); in libder_stream_dynamic()
157 libder_stream_eof(const struct libder_stream *stream) in libder_stream_eof() argument
164 return (stream->stream_eof && stream->stream_resid == 0); in libder_stream_eof()
168 libder_stream_repack(struct libder_stream *stream) in libder_stream_repack() argument
174 if (stream->stream_offset == 0) in libder_stream_repack()
182 if (stream->stream_resid != 0) { in libder_stream_repack()
183 uint8_t *dst = &stream->stream_buf[0]; in libder_stream_repack()
184 uint8_t *src = &stream->stream_buf[stream->stream_offset]; in libder_stream_repack()
186 memmove(dst, src, stream->stream_resid); in libder_stream_repack()
189 stream->stream_last_commit -= stream->stream_offset; in libder_stream_repack()
190 stream->stream_offset = 0; in libder_stream_repack()
194 libder_stream_refill(struct libder_stream *stream, size_t req) in libder_stream_refill() argument
196 size_t offset = stream->stream_offset; in libder_stream_refill()
209 if (stream->stream_type == LDST_NONE) in libder_stream_refill()
210 src = stream->stream_src_buf; in libder_stream_refill()
212 src = stream->stream_buf; in libder_stream_refill()
214 if (stream->stream_resid >= req) { in libder_stream_refill()
215 stream->stream_offset += req; in libder_stream_refill()
216 stream->stream_resid -= req; in libder_stream_refill()
221 if (stream->stream_type == LDST_NONE) { in libder_stream_refill()
222 stream->stream_eof = true; in libder_stream_refill()
226 bufleft = stream->stream_bufsz - (stream->stream_offset + stream->stream_resid); in libder_stream_refill()
232 if (req > bufleft && stream->stream_offset != 0) { in libder_stream_refill()
233 libder_stream_repack(stream); in libder_stream_refill()
235 bufleft = stream->stream_bufsz - stream->stream_resid; in libder_stream_refill()
236 offset = stream->stream_offset; in libder_stream_refill()
239 refill_buf = &stream->stream_buf[offset + stream->stream_resid]; in libder_stream_refill()
240 needed = req - stream->stream_resid; in libder_stream_refill()
245 bufend = &stream->stream_buf[stream->stream_bufsz]; in libder_stream_refill()
249 switch (stream->stream_type) { in libder_stream_refill()
251 assert(stream->stream_src_file != NULL); in libder_stream_refill()
256 freadsz = fread(refill_buf, 1, needed, stream->stream_src_file); in libder_stream_refill()
261 stream->stream_eof = true; in libder_stream_refill()
262 if (ferror(stream->stream_src_file)) in libder_stream_refill()
263 stream->stream_error = 1; in libder_stream_refill()
267 stream->stream_resid += freadsz; in libder_stream_refill()
274 assert(stream->stream_src_fd >= 0); in libder_stream_refill()
279 readsz = read(stream->stream_src_fd, refill_buf, needed); in libder_stream_refill()
291 !libder_check_abort(stream->stream_ctx)) in libder_stream_refill()
293 stream->stream_eof = true; in libder_stream_refill()
295 stream->stream_ctx->abort = false; in libder_stream_refill()
296 stream->stream_error = errno; in libder_stream_refill()
297 if (stream->stream_ctx->verbose > 0) in libder_stream_refill()
303 stream->stream_resid += readsz; in libder_stream_refill()
311 assert(0 && "Unrecognized stream type"); in libder_stream_refill()
319 stream->stream_consumed += totalsz; in libder_stream_refill()
320 stream->stream_last_commit += totalsz; in libder_stream_refill()
323 if (stream->stream_error != 0) in libder_stream_refill()
324 libder_set_error(stream->stream_ctx, LDE_STREAMERR); in libder_stream_refill()
327 stream->stream_offset += req; in libder_stream_refill()
328 stream->stream_resid -= req; in libder_stream_refill()
331 return (&stream->stream_buf[offset]); in libder_stream_refill()
367 der_read_structure_tag(struct libder_ctx *ctx, struct libder_stream *stream, in der_read_structure_tag() argument
379 if ((buf = libder_stream_refill(stream, 1)) == NULL) { in der_read_structure_tag()
381 if (!libder_stream_eof(stream)) in der_read_structure_tag()
447 der_read_structure(struct libder_ctx *ctx, struct libder_stream *stream, in der_read_structure() argument
455 if (!der_read_structure_tag(ctx, stream, type)) { in der_read_structure()
459 if ((buf = libder_stream_refill(stream, 1)) == NULL) { in der_read_structure()
460 if (!libder_stream_eof(stream)) in der_read_structure()
477 } else if ((buf = libder_stream_refill(stream, bsz)) == NULL) { in der_read_structure()
505 * If we're not running a dynamic stream, we can just use a in der_read_structure()
510 if (!libder_stream_dynamic(stream)) { in der_read_structure()
517 __DECONST(void *, libder_stream_refill(stream, rsz)); in der_read_structure()
541 req = MIN(stream->stream_bufsz, resid); in der_read_structure()
542 if ((buf = libder_stream_refill(stream, req)) == NULL) { in der_read_structure()
575 libder_stream_commit(stream); in der_read_structure()
584 libder_read_object(struct libder_ctx *ctx, struct libder_stream *stream) in libder_read_object() argument
595 error = der_read_structure(ctx, stream, &type, &payload, &varlen); in libder_read_object()
653 childstream = stream; in libder_read_object()
726 libder_read_stream(struct libder_ctx *ctx, struct libder_stream *stream) in libder_read_stream() argument
731 root = libder_read_object(ctx, stream); in libder_read_stream()
742 assert(stream->stream_consumed != 0); in libder_read_stream()
756 struct libder_stream *stream; in libder_read() local
759 stream = malloc(sizeof(*stream)); in libder_read()
760 if (stream == NULL) { in libder_read()
765 *stream = (struct libder_stream){ in libder_read()
774 if (!libder_stream_init(ctx, stream)) { in libder_read()
775 free(stream); in libder_read()
779 root = libder_read_stream(ctx, stream); in libder_read()
780 if (stream->stream_consumed != 0) in libder_read()
781 *datasz = stream->stream_consumed; in libder_read()
783 libder_stream_free(stream); in libder_read()
784 free(stream); in libder_read()
797 struct libder_stream *stream; in libder_read_fd() local
800 stream = malloc(sizeof(*stream)); in libder_read_fd()
801 if (stream == NULL) { in libder_read_fd()
806 *stream = (struct libder_stream){ in libder_read_fd()
814 if (!libder_stream_init(ctx, stream)) { in libder_read_fd()
815 free(stream); in libder_read_fd()
819 root = libder_read_stream(ctx, stream); in libder_read_fd()
820 if (consumed != NULL && stream->stream_consumed != 0) in libder_read_fd()
821 *consumed = stream->stream_consumed; in libder_read_fd()
823 libder_stream_free(stream); in libder_read_fd()
824 free(stream); in libder_read_fd()
834 struct libder_stream *stream; in libder_read_file() local
837 stream = malloc(sizeof(*stream)); in libder_read_file()
838 if (stream == NULL) { in libder_read_file()
843 *stream = (struct libder_stream){ in libder_read_file()
851 if (!libder_stream_init(ctx, stream)) { in libder_read_file()
852 free(stream); in libder_read_file()
856 root = libder_read_stream(ctx, stream); in libder_read_file()
857 if (consumed != NULL && stream->stream_consumed != 0) in libder_read_file()
858 *consumed = stream->stream_consumed; in libder_read_file()
860 libder_stream_free(stream); in libder_read_file()
861 free(stream); in libder_read_file()