Lines Matching refs:stream

78 static bool rzipstream_read_file_header(rzipstream_t *stream)  in rzipstream_read_file_header()  argument
84 if (!stream) in rzipstream_read_file_header()
91 length = filestream_read(stream->file, header_bytes, sizeof(header_bytes)); in rzipstream_read_file_header()
113 stream->chunk_size = ((uint32_t)header_bytes[11] << 24) | in rzipstream_read_file_header()
117 if (stream->chunk_size == 0) in rzipstream_read_file_header()
121 stream->size = ((uint64_t)header_bytes[19] << 56) | in rzipstream_read_file_header()
129 if (stream->size == 0) in rzipstream_read_file_header()
132 stream->is_compressed = true; in rzipstream_read_file_header()
138 filestream_seek(stream->file, 0, SEEK_SET); in rzipstream_read_file_header()
141 stream->size = filestream_get_size(stream->file); in rzipstream_read_file_header()
143 stream->is_compressed = false; in rzipstream_read_file_header()
150 static bool rzipstream_write_file_header(rzipstream_t *stream) in rzipstream_write_file_header() argument
156 if (!stream) in rzipstream_write_file_header()
174 header_bytes[11] = (stream->chunk_size >> 24) & 0xFF; in rzipstream_write_file_header()
175 header_bytes[10] = (stream->chunk_size >> 16) & 0xFF; in rzipstream_write_file_header()
176 header_bytes[9] = (stream->chunk_size >> 8) & 0xFF; in rzipstream_write_file_header()
177 header_bytes[8] = stream->chunk_size & 0xFF; in rzipstream_write_file_header()
180 header_bytes[19] = (stream->size >> 56) & 0xFF; in rzipstream_write_file_header()
181 header_bytes[18] = (stream->size >> 48) & 0xFF; in rzipstream_write_file_header()
182 header_bytes[17] = (stream->size >> 40) & 0xFF; in rzipstream_write_file_header()
183 header_bytes[16] = (stream->size >> 32) & 0xFF; in rzipstream_write_file_header()
184 header_bytes[15] = (stream->size >> 24) & 0xFF; in rzipstream_write_file_header()
185 header_bytes[14] = (stream->size >> 16) & 0xFF; in rzipstream_write_file_header()
186 header_bytes[13] = (stream->size >> 8) & 0xFF; in rzipstream_write_file_header()
187 header_bytes[12] = stream->size & 0xFF; in rzipstream_write_file_header()
190 filestream_seek(stream->file, 0, SEEK_SET); in rzipstream_write_file_header()
193 length = filestream_write(stream->file, in rzipstream_write_file_header()
206 rzipstream_t *stream, const char *path, bool is_writing) in rzipstream_init_stream() argument
210 if (!stream) in rzipstream_init_stream()
214 stream->size = 0; in rzipstream_init_stream()
215 stream->chunk_size = RZIP_DEFAULT_CHUNK_SIZE; in rzipstream_init_stream()
216 stream->file = NULL; in rzipstream_init_stream()
217 stream->deflate_backend = NULL; in rzipstream_init_stream()
218 stream->deflate_stream = NULL; in rzipstream_init_stream()
219 stream->inflate_backend = NULL; in rzipstream_init_stream()
220 stream->inflate_stream = NULL; in rzipstream_init_stream()
221 stream->in_buf = NULL; in rzipstream_init_stream()
222 stream->in_buf_size = 0; in rzipstream_init_stream()
223 stream->in_buf_ptr = 0; in rzipstream_init_stream()
224 stream->out_buf = NULL; in rzipstream_init_stream()
225 stream->out_buf_size = 0; in rzipstream_init_stream()
226 stream->out_buf_ptr = 0; in rzipstream_init_stream()
227 stream->out_buf_occupancy = 0; in rzipstream_init_stream()
230 stream->is_writing = is_writing; in rzipstream_init_stream()
231 if (stream->is_writing) in rzipstream_init_stream()
234 stream->is_compressed = true; in rzipstream_init_stream()
243 stream->file = filestream_open( in rzipstream_init_stream()
245 if (!stream->file) in rzipstream_init_stream()
251 if (stream->is_writing) in rzipstream_init_stream()
256 if (!rzipstream_write_file_header(stream)) in rzipstream_init_stream()
261 else if (!rzipstream_read_file_header(stream)) in rzipstream_init_stream()
266 if (stream->is_writing) in rzipstream_init_stream()
269 stream->deflate_backend = trans_stream_get_zlib_deflate_backend(); in rzipstream_init_stream()
270 if (!stream->deflate_backend) in rzipstream_init_stream()
273 stream->deflate_stream = stream->deflate_backend->stream_new(); in rzipstream_init_stream()
274 if (!stream->deflate_stream) in rzipstream_init_stream()
278 if (!stream->deflate_backend->define( in rzipstream_init_stream()
279 stream->deflate_stream, "level", RZIP_COMPRESSION_LEVEL)) in rzipstream_init_stream()
285 stream->in_buf_size = stream->chunk_size; in rzipstream_init_stream()
286 stream->out_buf_size = stream->chunk_size * 2; in rzipstream_init_stream()
289 stream->out_buf_size = in rzipstream_init_stream()
290 (stream->out_buf_size < (stream->in_buf_size + 11)) ? in rzipstream_init_stream()
291 stream->out_buf_size + 11 : in rzipstream_init_stream()
292 stream->out_buf_size; in rzipstream_init_stream()
295 if ((stream->in_buf_size == 0) || in rzipstream_init_stream()
296 (stream->out_buf_size == 0)) in rzipstream_init_stream()
301 else if (stream->is_compressed) in rzipstream_init_stream()
304 stream->inflate_backend = trans_stream_get_zlib_inflate_backend(); in rzipstream_init_stream()
305 if (!stream->inflate_backend) in rzipstream_init_stream()
308 stream->inflate_stream = stream->inflate_backend->stream_new(); in rzipstream_init_stream()
309 if (!stream->inflate_stream) in rzipstream_init_stream()
322 stream->in_buf_size = stream->chunk_size * 2; in rzipstream_init_stream()
323 stream->out_buf_size = stream->chunk_size + (stream->chunk_size >> 2); in rzipstream_init_stream()
326 if ((stream->in_buf_size == 0) || in rzipstream_init_stream()
327 (stream->out_buf_size == 0)) in rzipstream_init_stream()
332 if (stream->in_buf_size > 0) in rzipstream_init_stream()
334 stream->in_buf = (uint8_t *)calloc(stream->in_buf_size, 1); in rzipstream_init_stream()
335 if (!stream->in_buf) in rzipstream_init_stream()
339 if (stream->out_buf_size > 0) in rzipstream_init_stream()
341 stream->out_buf = (uint8_t *)calloc(stream->out_buf_size, 1); in rzipstream_init_stream()
342 if (!stream->out_buf) in rzipstream_init_stream()
351 static int rzipstream_free_stream(rzipstream_t *stream) in rzipstream_free_stream() argument
355 if (!stream) in rzipstream_free_stream()
359 if (stream->deflate_stream && stream->deflate_backend) in rzipstream_free_stream()
360 stream->deflate_backend->stream_free(stream->deflate_stream); in rzipstream_free_stream()
362 stream->deflate_stream = NULL; in rzipstream_free_stream()
363 stream->deflate_backend = NULL; in rzipstream_free_stream()
365 if (stream->inflate_stream && stream->inflate_backend) in rzipstream_free_stream()
366 stream->inflate_backend->stream_free(stream->inflate_stream); in rzipstream_free_stream()
368 stream->inflate_stream = NULL; in rzipstream_free_stream()
369 stream->inflate_backend = NULL; in rzipstream_free_stream()
372 if (stream->in_buf) in rzipstream_free_stream()
373 free(stream->in_buf); in rzipstream_free_stream()
374 stream->in_buf = NULL; in rzipstream_free_stream()
376 if (stream->out_buf) in rzipstream_free_stream()
377 free(stream->out_buf); in rzipstream_free_stream()
378 stream->out_buf = NULL; in rzipstream_free_stream()
381 if (stream->file) in rzipstream_free_stream()
382 ret = filestream_close(stream->file); in rzipstream_free_stream()
383 stream->file = NULL; in rzipstream_free_stream()
385 free(stream); in rzipstream_free_stream()
402 rzipstream_t *stream = NULL; in rzipstream_open() local
418 stream = (rzipstream_t*)malloc(sizeof(*stream)); in rzipstream_open()
419 if (!stream) in rzipstream_open()
422 stream->is_compressed = false; in rzipstream_open()
423 stream->is_writing = false; in rzipstream_open()
424 stream->size = 0; in rzipstream_open()
425 stream->chunk_size = 0; in rzipstream_open()
426 stream->virtual_ptr = 0; in rzipstream_open()
427 stream->file = NULL; in rzipstream_open()
428 stream->deflate_backend = NULL; in rzipstream_open()
429 stream->deflate_stream = NULL; in rzipstream_open()
430 stream->inflate_backend = NULL; in rzipstream_open()
431 stream->inflate_stream = NULL; in rzipstream_open()
432 stream->in_buf = NULL; in rzipstream_open()
433 stream->in_buf_size = 0; in rzipstream_open()
434 stream->in_buf_ptr = 0; in rzipstream_open()
435 stream->out_buf = NULL; in rzipstream_open()
436 stream->out_buf_size = 0; in rzipstream_open()
437 stream->out_buf_ptr = 0; in rzipstream_open()
438 stream->out_buf_occupancy = 0; in rzipstream_open()
442 stream, path, in rzipstream_open()
445 rzipstream_free_stream(stream); in rzipstream_open()
449 return stream; in rzipstream_open()
456 static bool rzipstream_read_chunk(rzipstream_t *stream) in rzipstream_read_chunk() argument
465 if (!stream || !stream->inflate_backend || !stream->inflate_stream) in rzipstream_read_chunk()
473 stream->file, chunk_header_bytes, sizeof(chunk_header_bytes)); in rzipstream_read_chunk()
486 if (compressed_chunk_size > stream->in_buf_size) in rzipstream_read_chunk()
488 free(stream->in_buf); in rzipstream_read_chunk()
489 stream->in_buf = NULL; in rzipstream_read_chunk()
491 stream->in_buf_size = compressed_chunk_size; in rzipstream_read_chunk()
492 stream->in_buf = (uint8_t *)calloc(stream->in_buf_size, 1); in rzipstream_read_chunk()
493 if (!stream->in_buf) in rzipstream_read_chunk()
504 stream->file, stream->in_buf, compressed_chunk_size); in rzipstream_read_chunk()
509 stream->inflate_backend->set_in( in rzipstream_read_chunk()
510 stream->inflate_stream, in rzipstream_read_chunk()
511 stream->in_buf, compressed_chunk_size); in rzipstream_read_chunk()
513 stream->inflate_backend->set_out( in rzipstream_read_chunk()
514 stream->inflate_stream, in rzipstream_read_chunk()
515 stream->out_buf, stream->out_buf_size); in rzipstream_read_chunk()
521 if (!stream->inflate_backend->trans( in rzipstream_read_chunk()
522 stream->inflate_stream, true, in rzipstream_read_chunk()
531 (inflate_written > stream->out_buf_size)) in rzipstream_read_chunk()
536 stream->out_buf_occupancy = inflate_written; in rzipstream_read_chunk()
537 stream->out_buf_ptr = 0; in rzipstream_read_chunk()
545 int64_t rzipstream_read(rzipstream_t *stream, void *data, int64_t len) in rzipstream_read() argument
551 if (!stream || stream->is_writing || !data) in rzipstream_read()
556 if (!stream->is_compressed) in rzipstream_read()
557 return filestream_read(stream->file, data, len); in rzipstream_read()
566 if (stream->virtual_ptr >= stream->size) in rzipstream_read()
572 if (stream->out_buf_ptr >= stream->out_buf_occupancy) in rzipstream_read()
573 if (!rzipstream_read_chunk(stream)) in rzipstream_read()
579 read_size = stream->out_buf_occupancy - stream->out_buf_ptr; in rzipstream_read()
584 memcpy(data_ptr, stream->out_buf + stream->out_buf_ptr, read_size); in rzipstream_read()
587 stream->out_buf_ptr += read_size; in rzipstream_read()
591 stream->virtual_ptr += read_size; in rzipstream_read()
604 int rzipstream_getc(rzipstream_t *stream) in rzipstream_getc() argument
608 if (!stream || stream->is_writing) in rzipstream_getc()
612 if (rzipstream_read(stream, &c, 1) == 1) in rzipstream_getc()
626 char* rzipstream_gets(rzipstream_t *stream, char *s, size_t len) in rzipstream_gets() argument
632 if (!stream || stream->is_writing || (len == 0)) in rzipstream_gets()
640 c = rzipstream_getc(stream); in rzipstream_gets()
671 rzipstream_t *stream = NULL; in rzipstream_read_file() local
677 stream = rzipstream_open(path, RETRO_VFS_FILE_ACCESS_READ); in rzipstream_read_file()
679 if (!stream) in rzipstream_read_file()
686 content_buf_size = rzipstream_get_size(stream); in rzipstream_read_file()
701 bytes_read = rzipstream_read(stream, content_buf, content_buf_size); in rzipstream_read_file()
707 rzipstream_close(stream); in rzipstream_read_file()
708 stream = NULL; in rzipstream_read_file()
725 if (stream) in rzipstream_read_file()
726 rzipstream_close(stream); in rzipstream_read_file()
727 stream = NULL; in rzipstream_read_file()
745 static bool rzipstream_write_chunk(rzipstream_t *stream) in rzipstream_write_chunk() argument
753 if (!stream || !stream->deflate_backend || !stream->deflate_stream) in rzipstream_write_chunk()
760 stream->deflate_backend->set_in( in rzipstream_write_chunk()
761 stream->deflate_stream, in rzipstream_write_chunk()
762 stream->in_buf, stream->in_buf_ptr); in rzipstream_write_chunk()
764 stream->deflate_backend->set_out( in rzipstream_write_chunk()
765 stream->deflate_stream, in rzipstream_write_chunk()
766 stream->out_buf, stream->out_buf_size); in rzipstream_write_chunk()
772 if (!stream->deflate_backend->trans( in rzipstream_write_chunk()
773 stream->deflate_stream, true, in rzipstream_write_chunk()
778 if (deflate_read != stream->in_buf_ptr) in rzipstream_write_chunk()
782 (deflate_written > stream->out_buf_size)) in rzipstream_write_chunk()
792 stream->file, chunk_header_bytes, sizeof(chunk_header_bytes)); in rzipstream_write_chunk()
798 stream->file, stream->out_buf, deflate_written); in rzipstream_write_chunk()
804 stream->in_buf_ptr = 0; in rzipstream_write_chunk()
812 int64_t rzipstream_write(rzipstream_t *stream, const void *data, int64_t len) in rzipstream_write() argument
817 if (!stream || !stream->is_writing || !data) in rzipstream_write()
826 if (stream->in_buf_ptr >= stream->in_buf_size) in rzipstream_write()
827 if (!rzipstream_write_chunk(stream)) in rzipstream_write()
833 cache_size = stream->in_buf_size - stream->in_buf_ptr; in rzipstream_write()
838 memcpy(stream->in_buf + stream->in_buf_ptr, data_ptr, cache_size); in rzipstream_write()
841 stream->in_buf_ptr += cache_size; in rzipstream_write()
845 stream->size += cache_size; in rzipstream_write()
846 stream->virtual_ptr += cache_size; in rzipstream_write()
858 int rzipstream_putc(rzipstream_t *stream, int c) in rzipstream_putc() argument
862 if (!stream || !stream->is_writing) in rzipstream_putc()
865 return (rzipstream_write(stream, &c_char, 1) == 1) ? in rzipstream_putc()
874 int rzipstream_vprintf(rzipstream_t *stream, const char* format, va_list args) in rzipstream_vprintf() argument
885 return (int)rzipstream_write(stream, buffer, num_chars); in rzipstream_vprintf()
891 int rzipstream_printf(rzipstream_t *stream, const char* format, ...) in rzipstream_printf() argument
900 result = rzipstream_vprintf(stream, format, vl); in rzipstream_printf()
914 rzipstream_t *stream = NULL; in rzipstream_write_file() local
920 stream = rzipstream_open(path, RETRO_VFS_FILE_ACCESS_WRITE); in rzipstream_write_file()
922 if (!stream) in rzipstream_write_file()
926 bytes_written = rzipstream_write(stream, data, len); in rzipstream_write_file()
929 if (rzipstream_close(stream) == -1) in rzipstream_write_file()
948 void rzipstream_rewind(rzipstream_t *stream) in rzipstream_rewind() argument
950 if (!stream) in rzipstream_rewind()
961 if (!stream->is_compressed) in rzipstream_rewind()
963 filestream_rewind(stream->file); in rzipstream_rewind()
969 if (stream->virtual_ptr == 0) in rzipstream_rewind()
973 if (stream->is_writing) in rzipstream_rewind()
976 filestream_seek(stream->file, RZIP_HEADER_SIZE, SEEK_SET); in rzipstream_rewind()
977 if (filestream_error(stream->file)) in rzipstream_rewind()
986 stream->virtual_ptr = 0; in rzipstream_rewind()
987 stream->in_buf_ptr = 0; in rzipstream_rewind()
990 stream->size = 0; in rzipstream_rewind()
996 if ((stream->virtual_ptr < stream->chunk_size) && in rzipstream_rewind()
997 (stream->out_buf_ptr < stream->out_buf_occupancy)) in rzipstream_rewind()
1001 stream->virtual_ptr = 0; in rzipstream_rewind()
1002 stream->out_buf_ptr = 0; in rzipstream_rewind()
1010 filestream_seek(stream->file, RZIP_HEADER_SIZE, SEEK_SET); in rzipstream_rewind()
1011 if (filestream_error(stream->file)) in rzipstream_rewind()
1020 if (!rzipstream_read_chunk(stream)) in rzipstream_rewind()
1029 stream->virtual_ptr = 0; in rzipstream_rewind()
1030 stream->out_buf_ptr = 0; in rzipstream_rewind()
1042 int64_t rzipstream_get_size(rzipstream_t *stream) in rzipstream_get_size() argument
1044 if (!stream) in rzipstream_get_size()
1047 if (stream->is_compressed) in rzipstream_get_size()
1048 return stream->size; in rzipstream_get_size()
1049 return filestream_get_size(stream->file); in rzipstream_get_size()
1054 int rzipstream_eof(rzipstream_t *stream) in rzipstream_eof() argument
1056 if (!stream) in rzipstream_eof()
1059 if (stream->is_compressed) in rzipstream_eof()
1060 return (stream->virtual_ptr >= stream->size) ? in rzipstream_eof()
1062 return filestream_eof(stream->file); in rzipstream_eof()
1068 int64_t rzipstream_tell(rzipstream_t *stream) in rzipstream_tell() argument
1070 if (!stream) in rzipstream_tell()
1073 return (int64_t)stream->virtual_ptr; in rzipstream_tell()
1078 bool rzipstream_is_compressed(rzipstream_t *stream) in rzipstream_is_compressed() argument
1080 if (!stream) in rzipstream_is_compressed()
1083 return stream->is_compressed; in rzipstream_is_compressed()
1091 int rzipstream_close(rzipstream_t *stream) in rzipstream_close() argument
1093 if (!stream) in rzipstream_close()
1099 if (stream->is_writing) in rzipstream_close()
1101 if (stream->in_buf_ptr > 0) in rzipstream_close()
1102 if (!rzipstream_write_chunk(stream)) in rzipstream_close()
1105 if (!rzipstream_write_file_header(stream)) in rzipstream_close()
1111 return rzipstream_free_stream(stream); in rzipstream_close()
1115 rzipstream_free_stream(stream); in rzipstream_close()