diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/bb_archive.h | 50 | ||||
-rw-r--r-- | include/libbb.h | 11 |
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; | |||
203 | void dealloc_bunzip(bunzip_data *bd) FAST_FUNC; | 203 | void 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 */ |
206 | typedef struct transformer_aux_data_t { | 206 | typedef 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 | ||
214 | void init_transformer_aux_data(transformer_aux_data_t *aux) FAST_FUNC; | 226 | void init_transformer_state(transformer_state_t *xstate) FAST_FUNC; |
215 | int FAST_FUNC check_signature16(transformer_aux_data_t *aux, int src_fd, unsigned magic16) FAST_FUNC; | 227 | ssize_t transformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC; |
228 | ssize_t xtransformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC; | ||
229 | int check_signature16(transformer_state_t *xstate, unsigned magic16) FAST_FUNC; | ||
216 | 230 | ||
217 | IF_DESKTOP(long long) int inflate_unzip(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; | 231 | IF_DESKTOP(long long) int inflate_unzip(transformer_state_t *xstate) FAST_FUNC; |
218 | IF_DESKTOP(long long) int unpack_Z_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; | 232 | IF_DESKTOP(long long) int unpack_Z_stream(transformer_state_t *xstate) FAST_FUNC; |
219 | IF_DESKTOP(long long) int unpack_gz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; | 233 | IF_DESKTOP(long long) int unpack_gz_stream(transformer_state_t *xstate) FAST_FUNC; |
220 | IF_DESKTOP(long long) int unpack_bz2_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; | 234 | IF_DESKTOP(long long) int unpack_bz2_stream(transformer_state_t *xstate) FAST_FUNC; |
221 | IF_DESKTOP(long long) int unpack_lzma_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; | 235 | IF_DESKTOP(long long) int unpack_lzma_stream(transformer_state_t *xstate) FAST_FUNC; |
222 | IF_DESKTOP(long long) int unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC; | 236 | IF_DESKTOP(long long) int unpack_xz_stream(transformer_state_t *xstate) FAST_FUNC; |
223 | 237 | ||
224 | char* append_ext(char *filename, const char *expected_ext) FAST_FUNC; | 238 | char* append_ext(char *filename, const char *expected_ext) FAST_FUNC; |
225 | int bbunpack(char **argv, | 239 | int 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 | ||
231 | void check_errors_in_children(int signo); | 245 | void check_errors_in_children(int signo); |
232 | #if BB_MMU | 246 | #if BB_MMU |
233 | void open_transformer(int fd, | 247 | void 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 |
240 | void open_transformer(int fd, const char *transform_prog) FAST_FUNC; | 254 | void 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 */ |
745 | extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; | 745 | extern 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) */ | ||
750 | unsigned bb_arg_max(void) FAST_FUNC; | 752 | unsigned 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 |
754 | unsigned bb_clk_tck(void) FAST_FUNC; | 757 | unsigned bb_clk_tck(void) FAST_FUNC; |
@@ -765,11 +768,12 @@ unsigned bb_clk_tck(void) FAST_FUNC; | |||
765 | extern int setup_unzip_on_fd(int fd, int fail_if_not_compressed) FAST_FUNC; | 768 | extern int setup_unzip_on_fd(int fd, int fail_if_not_compressed) FAST_FUNC; |
766 | /* Autodetects .gz etc */ | 769 | /* Autodetects .gz etc */ |
767 | extern int open_zipped(const char *fname, int fail_if_not_compressed) FAST_FUNC; | 770 | extern int open_zipped(const char *fname, int fail_if_not_compressed) FAST_FUNC; |
771 | extern 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 |
772 | extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; | ||
773 | 777 | ||
774 | extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC; | 778 | extern 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; | |||
1120 | extern void bb_perror_nomsg(void) FAST_FUNC; | 1124 | extern void bb_perror_nomsg(void) FAST_FUNC; |
1121 | extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; | 1125 | extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; |
1122 | extern void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; | 1126 | extern void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; |
1127 | extern 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 |