1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/* SPDX-License-Identifier: GPL-3.0-or-later */
#ifndef DATA_WRITER_H
#define DATA_WRITER_H
#include "squashfs.h"
#include "compress.h"
#include "fstree.h"
#include "util.h"
typedef struct data_writer_t data_writer_t;
/*
Create a data writer. The pointer to the super block is kept internally and
used to automatically update various counters when writing data.
Returns NULL on failure and prints errors to stderr.
*/
data_writer_t *data_writer_create(sqfs_super_t *super, compressor_t *cmp,
int outfd);
void data_writer_destroy(data_writer_t *data);
/*
Write the finalfragment table to the underlying file.
Returns 0 on success, prints errors to stderr.
*/
int data_writer_write_fragment_table(data_writer_t *data);
/*
Compress and flush the current fragment buffer even if it is not full yet.
Returns 0 on success, prints errors to stderr.
*/
int data_writer_flush_fragments(data_writer_t *data);
/*
Read data from the given file descriptor, partition it into blocks and
write them out (possibly compressed) to the underlying file. If the size
is not a multiple of the block size, the last bit is kept in an internal
fragment buffer which is written out if full.
The file_info_t object is updated accordingly and used to determine the
number of bytes to write and the input file name to report errors.
Blocks or fragments that are all zero bytes automatically detected,
not written out and the sparse file accounting updated accordingly.
Returns 0 on success, prints errors to stderr.
*/
int write_data_from_fd(data_writer_t *data, file_info_t *fi, int infd);
/*
Does the same as write_data_from_fd but the input file is the condensed
representation of a sparse file. The layout must be in order and
non-overlapping.
Returns 0 on success, prints errors to stderr.
*/
int write_data_from_fd_condensed(data_writer_t *data, file_info_t *fi,
int infd, sparse_map_t *map);
#endif /* DATA_WRITER_H */
|