aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/bb_archive.h50
-rw-r--r--include/libbb.h11
2 files changed, 40 insertions, 21 deletions
diff --git a/include/bb_archive.h b/include/bb_archive.h
index b82cfd83c..a6b166fe3 100644
--- a/include/bb_archive.h
+++ b/include/bb_archive.h
@@ -203,43 +203,57 @@ int read_bunzip(bunzip_data *bd, char *outbuf, int len) FAST_FUNC;
203void dealloc_bunzip(bunzip_data *bd) FAST_FUNC; 203void dealloc_bunzip(bunzip_data *bd) FAST_FUNC;
204 204
205/* Meaning and direction (input/output) of the fields are transformer-specific */ 205/* Meaning and direction (input/output) of the fields are transformer-specific */
206typedef struct transformer_aux_data_t { 206typedef struct transformer_state_t {
207 smallint check_signature; /* most often referenced member */ 207 smallint check_signature; /* most often referenced member */
208
209 IF_DESKTOP(long long) int FAST_FUNC (*xformer)(struct transformer_state_t *xstate);
210 USE_FOR_NOMMU(const char *xformer_prog;)
211
212 /* Source */
213 int src_fd;
214 /* Output */
215 int dst_fd;
216 size_t mem_output_size_max; /* if non-zero, decompress to RAM instead of fd */
217 size_t mem_output_size;
218 char *mem_output_buf;
219
208 off_t bytes_out; 220 off_t bytes_out;
209 off_t bytes_in; /* used in unzip code only: needs to know packed size */ 221 off_t bytes_in; /* used in unzip code only: needs to know packed size */
210 uint32_t crc32; 222 uint32_t crc32;
211 time_t mtime; /* gunzip code may set this on exit */ 223 time_t mtime; /* gunzip code may set this on exit */
212} transformer_aux_data_t; 224} transformer_state_t;
213 225
214void init_transformer_aux_data(transformer_aux_data_t *aux) FAST_FUNC; 226void init_transformer_state(transformer_state_t *xstate) FAST_FUNC;
215int FAST_FUNC check_signature16(transformer_aux_data_t *aux, int src_fd, unsigned magic16) FAST_FUNC; 227ssize_t transformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC;
228ssize_t xtransformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC;
229int check_signature16(transformer_state_t *xstate, unsigned magic16) FAST_FUNC;
216 230
217IF_DESKTOP(long long) int inflate_unzip(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; 231IF_DESKTOP(long long) int inflate_unzip(transformer_state_t *xstate) FAST_FUNC;
218IF_DESKTOP(long long) int unpack_Z_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; 232IF_DESKTOP(long long) int unpack_Z_stream(transformer_state_t *xstate) FAST_FUNC;
219IF_DESKTOP(long long) int unpack_gz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; 233IF_DESKTOP(long long) int unpack_gz_stream(transformer_state_t *xstate) FAST_FUNC;
220IF_DESKTOP(long long) int unpack_bz2_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; 234IF_DESKTOP(long long) int unpack_bz2_stream(transformer_state_t *xstate) FAST_FUNC;
221IF_DESKTOP(long long) int unpack_lzma_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; 235IF_DESKTOP(long long) int unpack_lzma_stream(transformer_state_t *xstate) FAST_FUNC;
222IF_DESKTOP(long long) int unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; 236IF_DESKTOP(long long) int unpack_xz_stream(transformer_state_t *xstate) FAST_FUNC;
223 237
224char* append_ext(char *filename, const char *expected_ext) FAST_FUNC; 238char* append_ext(char *filename, const char *expected_ext) FAST_FUNC;
225int bbunpack(char **argv, 239int bbunpack(char **argv,
226 IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(transformer_aux_data_t *aux), 240 IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(transformer_state_t *xstate),
227 char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext), 241 char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext),
228 const char *expected_ext 242 const char *expected_ext
229) FAST_FUNC; 243) FAST_FUNC;
230 244
231void check_errors_in_children(int signo); 245void check_errors_in_children(int signo);
232#if BB_MMU 246#if BB_MMU
233void open_transformer(int fd, 247void fork_transformer(int fd,
234 int check_signature, 248 int check_signature,
235 IF_DESKTOP(long long) int FAST_FUNC (*transformer)(transformer_aux_data_t *aux, int src_fd, int dst_fd) 249 IF_DESKTOP(long long) int FAST_FUNC (*transformer)(transformer_state_t *xstate)
236) FAST_FUNC; 250) FAST_FUNC;
237#define open_transformer_with_sig(fd, transformer, transform_prog) open_transformer((fd), 1, (transformer)) 251#define fork_transformer_with_sig(fd, transformer, transform_prog) fork_transformer((fd), 1, (transformer))
238#define open_transformer_with_no_sig(fd, transformer) open_transformer((fd), 0, (transformer)) 252#define fork_transformer_with_no_sig(fd, transformer) fork_transformer((fd), 0, (transformer))
239#else 253#else
240void open_transformer(int fd, const char *transform_prog) FAST_FUNC; 254void fork_transformer(int fd, const char *transform_prog) FAST_FUNC;
241#define open_transformer_with_sig(fd, transformer, transform_prog) open_transformer((fd), (transform_prog)) 255#define fork_transformer_with_sig(fd, transformer, transform_prog) fork_transformer((fd), (transform_prog))
242/* open_transformer_with_no_sig() does not exist on NOMMU */ 256/* fork_transformer_with_no_sig() does not exist on NOMMU */
243#endif 257#endif
244 258
245 259
diff --git a/include/libbb.h b/include/libbb.h
index 21a56d78f..802779932 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -744,11 +744,14 @@ extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p) FAST
744/* Never returns NULL */ 744/* Never returns NULL */
745extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; 745extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
746 746
747#if defined ARG_MAX 747#if defined(ARG_MAX) && (ARG_MAX >= 60*1024 || !defined(_SC_ARG_MAX))
748/* Use _constant_ maximum if: defined && (big enough || no variable one exists) */
748# define bb_arg_max() ((unsigned)ARG_MAX) 749# define bb_arg_max() ((unsigned)ARG_MAX)
749#elif defined _SC_ARG_MAX 750#elif defined(_SC_ARG_MAX)
751/* Else use variable one (a bit more expensive) */
750unsigned bb_arg_max(void) FAST_FUNC; 752unsigned bb_arg_max(void) FAST_FUNC;
751#else 753#else
754/* If all else fails */
752# define bb_arg_max() ((unsigned)(32 * 1024)) 755# define bb_arg_max() ((unsigned)(32 * 1024))
753#endif 756#endif
754unsigned bb_clk_tck(void) FAST_FUNC; 757unsigned bb_clk_tck(void) FAST_FUNC;
@@ -765,11 +768,12 @@ unsigned bb_clk_tck(void) FAST_FUNC;
765extern int setup_unzip_on_fd(int fd, int fail_if_not_compressed) FAST_FUNC; 768extern int setup_unzip_on_fd(int fd, int fail_if_not_compressed) FAST_FUNC;
766/* Autodetects .gz etc */ 769/* Autodetects .gz etc */
767extern int open_zipped(const char *fname, int fail_if_not_compressed) FAST_FUNC; 770extern int open_zipped(const char *fname, int fail_if_not_compressed) FAST_FUNC;
771extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
768#else 772#else
769# define setup_unzip_on_fd(...) (0) 773# define setup_unzip_on_fd(...) (0)
770# define open_zipped(fname, fail_if_not_compressed) open((fname), O_RDONLY); 774# define open_zipped(fname, fail_if_not_compressed) open((fname), O_RDONLY);
775# define xmalloc_open_zipped_read_close(fname, maxsz_p) xmalloc_open_read_close((fname), (maxsz_p))
771#endif 776#endif
772extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
773 777
774extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC; 778extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC;
775// NB: will return short write on error, not -1, 779// NB: will return short write on error, not -1,
@@ -1120,6 +1124,7 @@ extern void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC;
1120extern void bb_perror_nomsg(void) FAST_FUNC; 1124extern void bb_perror_nomsg(void) FAST_FUNC;
1121extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1125extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC;
1122extern void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; 1126extern void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC;
1127extern void bb_logenv_override(void) FAST_FUNC;
1123 1128
1124/* We need to export XXX_main from libbusybox 1129/* We need to export XXX_main from libbusybox
1125 * only if we build "individual" binaries 1130 * only if we build "individual" binaries