Lines Matching refs:out
78 int (*write_data_chunk)(struct output_file *out, unsigned int len,
80 int (*write_fill_chunk)(struct output_file *out, unsigned int len,
82 int (*write_skip_chunk)(struct output_file *out, int64_t len);
83 int (*write_end_chunk)(struct output_file *out);
101 struct output_file out; member
106 container_of((_o), struct output_file_gz, out)
109 struct output_file out; member
114 container_of((_o), struct output_file_normal, out)
117 struct output_file out; member
123 container_of((_o), struct output_file_callback, out)
125 static int file_open(struct output_file *out, int fd) in file_open() argument
127 struct output_file_normal *outn = to_output_file_normal(out); in file_open()
133 static int file_skip(struct output_file *out, int64_t cnt) in file_skip() argument
136 struct output_file_normal *outn = to_output_file_normal(out); in file_skip()
146 static int file_pad(struct output_file *out, int64_t len) in file_pad() argument
149 struct output_file_normal *outn = to_output_file_normal(out); in file_pad()
159 static int file_write(struct output_file *out, void *data, int len) in file_write() argument
162 struct output_file_normal *outn = to_output_file_normal(out); in file_write()
176 static void file_close(struct output_file *out) in file_close() argument
178 struct output_file_normal *outn = to_output_file_normal(out); in file_close()
191 static int gz_file_open(struct output_file *out, int fd) in gz_file_open() argument
193 struct output_file_gz *outgz = to_output_file_gz(out); in gz_file_open()
205 static int gz_file_skip(struct output_file *out, int64_t cnt) in gz_file_skip() argument
208 struct output_file_gz *outgz = to_output_file_gz(out); in gz_file_skip()
218 static int gz_file_pad(struct output_file *out, int64_t len) in gz_file_pad() argument
221 struct output_file_gz *outgz = to_output_file_gz(out); in gz_file_pad()
242 static int gz_file_write(struct output_file *out, void *data, int len) in gz_file_write() argument
245 struct output_file_gz *outgz = to_output_file_gz(out); in gz_file_write()
259 static void gz_file_close(struct output_file *out) in gz_file_close() argument
261 struct output_file_gz *outgz = to_output_file_gz(out); in gz_file_close()
275 static int callback_file_open(struct output_file *out, int fd) in callback_file_open() argument
280 static int callback_file_skip(struct output_file *out, int64_t off) in callback_file_skip() argument
282 struct output_file_callback *outc = to_output_file_callback(out); in callback_file_skip()
298 static int callback_file_pad(struct output_file *out, int64_t len) in callback_file_pad() argument
303 static int callback_file_write(struct output_file *out, void *data, int len) in callback_file_write() argument
306 struct output_file_callback *outc = to_output_file_callback(out); in callback_file_write()
311 static void callback_file_close(struct output_file *out) in callback_file_close() argument
313 struct output_file_callback *outc = to_output_file_callback(out); in callback_file_close()
348 static int write_sparse_skip_chunk(struct output_file *out, int64_t skip_len) in write_sparse_skip_chunk() argument
353 if (skip_len % out->block_size) { in write_sparse_skip_chunk()
355 skip_len, out->block_size); in write_sparse_skip_chunk()
362 chunk_header.chunk_sz = skip_len / out->block_size; in write_sparse_skip_chunk()
364 ret = out->ops->write(out, &chunk_header, sizeof(chunk_header)); in write_sparse_skip_chunk()
368 out->cur_out_ptr += skip_len; in write_sparse_skip_chunk()
369 out->chunk_cnt++; in write_sparse_skip_chunk()
374 static int write_sparse_fill_chunk(struct output_file *out, unsigned int len, in write_sparse_fill_chunk() argument
383 rnd_up_len = ALIGN(len, out->block_size); in write_sparse_fill_chunk()
388 chunk_header.chunk_sz = rnd_up_len / out->block_size; in write_sparse_fill_chunk()
390 ret = out->ops->write(out, &chunk_header, sizeof(chunk_header)); in write_sparse_fill_chunk()
394 ret = out->ops->write(out, &fill_val, sizeof(fill_val)); in write_sparse_fill_chunk()
398 if (out->use_crc) { in write_sparse_fill_chunk()
399 count = out->block_size / sizeof(uint32_t); in write_sparse_fill_chunk()
401 out->crc32 = sparse_crc32(out->crc32, &fill_val, sizeof(uint32_t)); in write_sparse_fill_chunk()
404 out->cur_out_ptr += rnd_up_len; in write_sparse_fill_chunk()
405 out->chunk_cnt++; in write_sparse_fill_chunk()
410 static int write_sparse_data_chunk(struct output_file *out, unsigned int len, in write_sparse_data_chunk() argument
418 rnd_up_len = ALIGN(len, out->block_size); in write_sparse_data_chunk()
424 chunk_header.chunk_sz = rnd_up_len / out->block_size; in write_sparse_data_chunk()
426 ret = out->ops->write(out, &chunk_header, sizeof(chunk_header)); in write_sparse_data_chunk()
430 ret = out->ops->write(out, data, len); in write_sparse_data_chunk()
434 ret = out->ops->write(out, out->zero_buf, zero_len); in write_sparse_data_chunk()
439 if (out->use_crc) { in write_sparse_data_chunk()
440 out->crc32 = sparse_crc32(out->crc32, data, len); in write_sparse_data_chunk()
442 out->crc32 = sparse_crc32(out->crc32, out->zero_buf, zero_len); in write_sparse_data_chunk()
445 out->cur_out_ptr += rnd_up_len; in write_sparse_data_chunk()
446 out->chunk_cnt++; in write_sparse_data_chunk()
451 int write_sparse_end_chunk(struct output_file *out) in write_sparse_end_chunk() argument
456 if (out->use_crc) { in write_sparse_end_chunk()
462 ret = out->ops->write(out, &chunk_header, sizeof(chunk_header)); in write_sparse_end_chunk()
466 out->ops->write(out, &out->crc32, 4); in write_sparse_end_chunk()
471 out->chunk_cnt++; in write_sparse_end_chunk()
484 static int write_normal_data_chunk(struct output_file *out, unsigned int len, in write_normal_data_chunk() argument
488 unsigned int rnd_up_len = ALIGN(len, out->block_size); in write_normal_data_chunk()
490 ret = out->ops->write(out, data, len); in write_normal_data_chunk()
496 ret = out->ops->skip(out, rnd_up_len - len); in write_normal_data_chunk()
502 static int write_normal_fill_chunk(struct output_file *out, unsigned int len, in write_normal_fill_chunk() argument
510 for (i = 0; i < out->block_size / sizeof(uint32_t); i++) { in write_normal_fill_chunk()
511 out->fill_buf[i] = fill_val; in write_normal_fill_chunk()
515 write_len = min(len, out->block_size); in write_normal_fill_chunk()
516 ret = out->ops->write(out, out->fill_buf, write_len); in write_normal_fill_chunk()
527 static int write_normal_skip_chunk(struct output_file *out, int64_t len) in write_normal_skip_chunk() argument
529 return out->ops->skip(out, len); in write_normal_skip_chunk()
532 int write_normal_end_chunk(struct output_file *out) in write_normal_end_chunk() argument
534 return out->ops->pad(out, out->len); in write_normal_end_chunk()
544 void output_file_close(struct output_file *out) in output_file_close() argument
548 out->sparse_ops->write_end_chunk(out); in output_file_close()
549 out->ops->close(out); in output_file_close()
552 static int output_file_init(struct output_file *out, int block_size, in output_file_init() argument
557 out->len = len; in output_file_init()
558 out->block_size = block_size; in output_file_init()
559 out->cur_out_ptr = 0ll; in output_file_init()
560 out->chunk_cnt = 0; in output_file_init()
561 out->crc32 = 0; in output_file_init()
562 out->use_crc = crc; in output_file_init()
564 out->zero_buf = calloc(block_size, 1); in output_file_init()
565 if (!out->zero_buf) { in output_file_init()
570 out->fill_buf = calloc(block_size, 1); in output_file_init()
571 if (!out->fill_buf) { in output_file_init()
578 out->sparse_ops = &sparse_file_ops; in output_file_init()
580 out->sparse_ops = &normal_file_ops; in output_file_init()
590 .blk_sz = out->block_size, in output_file_init()
591 .total_blks = out->len / out->block_size, in output_file_init()
596 if (out->use_crc) { in output_file_init()
600 ret = out->ops->write(out, &sparse_header, sizeof(sparse_header)); in output_file_init()
609 free(out->fill_buf); in output_file_init()
611 free(out->zero_buf); in output_file_init()
623 outgz->out.ops = &gz_file_ops; in output_file_new_gz()
625 return &outgz->out; in output_file_new_gz()
636 outn->out.ops = &file_ops; in output_file_new_normal()
638 return &outn->out; in output_file_new_normal()
654 outc->out.ops = &callback_file_ops; in output_file_open_callback()
658 ret = output_file_init(&outc->out, block_size, len, sparse, chunks, crc); in output_file_open_callback()
664 return &outc->out; in output_file_open_callback()
671 struct output_file *out; in output_file_open_fd() local
674 out = output_file_new_gz(); in output_file_open_fd()
676 out = output_file_new_normal(); in output_file_open_fd()
679 out->ops->open(out, fd); in output_file_open_fd()
681 ret = output_file_init(out, block_size, len, sparse, chunks, crc); in output_file_open_fd()
683 free(out); in output_file_open_fd()
687 return out; in output_file_open_fd()
691 int write_data_chunk(struct output_file *out, unsigned int len, void *data) in write_data_chunk() argument
693 return out->sparse_ops->write_data_chunk(out, len, data); in write_data_chunk()
697 int write_fill_chunk(struct output_file *out, unsigned int len, in write_fill_chunk() argument
700 return out->sparse_ops->write_fill_chunk(out, len, fill_val); in write_fill_chunk()
703 int write_fd_chunk(struct output_file *out, unsigned int len, in write_fd_chunk() argument
740 ret = out->sparse_ops->write_data_chunk(out, len, ptr); in write_fd_chunk()
752 int write_file_chunk(struct output_file *out, unsigned int len, in write_file_chunk() argument
762 ret = write_fd_chunk(out, len, file_fd, offset); in write_file_chunk()
769 int write_skip_chunk(struct output_file *out, int64_t len) in write_skip_chunk() argument
771 return out->sparse_ops->write_skip_chunk(out, len); in write_skip_chunk()