diff options
Diffstat (limited to 'archival/ar.c')
-rw-r--r-- | archival/ar.c | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/archival/ar.c b/archival/ar.c index af9793f23..71f949e79 100644 --- a/archival/ar.c +++ b/archival/ar.c | |||
@@ -48,16 +48,6 @@ | |||
48 | 48 | ||
49 | //kbuild:lib-$(CONFIG_AR) += ar.o | 49 | //kbuild:lib-$(CONFIG_AR) += ar.o |
50 | 50 | ||
51 | //usage:#define ar_trivial_usage | ||
52 | //usage: "[-optxv] ARCHIVE FILES" | ||
53 | //usage:#define ar_full_usage "\n\n" | ||
54 | //usage: "Extract or list FILES from an ar archive\n" | ||
55 | //usage: "\n -o Preserve original dates" | ||
56 | //usage: "\n -p Extract to stdout" | ||
57 | //usage: "\n -t List" | ||
58 | //usage: "\n -x Extract" | ||
59 | //usage: "\n -v Verbose" | ||
60 | |||
61 | #include "libbb.h" | 51 | #include "libbb.h" |
62 | #include "bb_archive.h" | 52 | #include "bb_archive.h" |
63 | #include "ar_.h" | 53 | #include "ar_.h" |
@@ -220,23 +210,36 @@ static void FAST_FUNC header_verbose_list_ar(const file_header_t *file_header) | |||
220 | ); | 210 | ); |
221 | } | 211 | } |
222 | 212 | ||
223 | #define AR_OPT_VERBOSE (1 << 0) | 213 | //usage:#define ar_trivial_usage |
224 | #define AR_OPT_PRESERVE_DATE (1 << 1) | 214 | //usage: "x|p|t"IF_FEATURE_AR_CREATE("|r")" [-ov] ARCHIVE [FILE]..." |
225 | /* "ar r" implies create, but warns about it. c suppresses warning. | 215 | //usage:#define ar_full_usage "\n\n" |
226 | * bbox accepts but ignores it: */ | 216 | //usage: "Extract or list FILEs from an ar archive"IF_FEATURE_AR_CREATE(", or create it")"\n" |
227 | #define AR_OPT_CREATE (1 << 2) | 217 | //usage: "\n x Extract" |
228 | 218 | //usage: "\n p Extract to stdout" | |
229 | #define AR_CMD_PRINT (1 << 3) | 219 | //usage: "\n t List" |
230 | #define FIRST_CMD AR_CMD_PRINT | 220 | //usage: IF_FEATURE_AR_CREATE( |
231 | #define AR_CMD_LIST (1 << 4) | 221 | //usage: "\n r Create" |
232 | #define AR_CMD_EXTRACT (1 << 5) | 222 | //usage: ) |
233 | #define AR_CMD_INSERT (1 << 6) | 223 | //usage: "\n -o Restore mtime" |
224 | //usage: "\n -v Verbose" | ||
234 | 225 | ||
235 | int ar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 226 | int ar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
236 | int ar_main(int argc UNUSED_PARAM, char **argv) | 227 | int ar_main(int argc UNUSED_PARAM, char **argv) |
237 | { | 228 | { |
238 | archive_handle_t *archive_handle; | 229 | archive_handle_t *archive_handle; |
239 | unsigned opt, t; | 230 | unsigned opt, t; |
231 | enum { | ||
232 | OPT_VERBOSE = (1 << 0), | ||
233 | OPT_PRESERVE_DATE = (1 << 1), | ||
234 | /* "ar r" implies create, but warns about it. c suppresses warning. | ||
235 | * bbox accepts but ignores it: */ | ||
236 | OPT_CREATE = (1 << 2), | ||
237 | CMD_PRINT = (1 << 3), | ||
238 | FIRST_CMD = CMD_PRINT, | ||
239 | CMD_LIST = (1 << 4), | ||
240 | CMD_EXTRACT = (1 << 5), | ||
241 | CMD_INSERT = ((1 << 6) * ENABLE_FEATURE_AR_CREATE), | ||
242 | }; | ||
240 | 243 | ||
241 | archive_handle = init_handle(); | 244 | archive_handle = init_handle(); |
242 | 245 | ||
@@ -256,26 +259,26 @@ int ar_main(int argc UNUSED_PARAM, char **argv) | |||
256 | if (t & (t-1)) /* more than one of p,t,x[,r] are specified */ | 259 | if (t & (t-1)) /* more than one of p,t,x[,r] are specified */ |
257 | bb_show_usage(); | 260 | bb_show_usage(); |
258 | 261 | ||
259 | if (opt & AR_CMD_PRINT) { | 262 | if (opt & CMD_PRINT) { |
260 | archive_handle->action_data = data_extract_to_stdout; | 263 | archive_handle->action_data = data_extract_to_stdout; |
261 | } | 264 | } |
262 | if (opt & AR_CMD_LIST) { | 265 | if (opt & CMD_LIST) { |
263 | archive_handle->action_header = header_list; | 266 | archive_handle->action_header = header_list; |
264 | } | 267 | } |
265 | if (opt & AR_CMD_EXTRACT) { | 268 | if (opt & CMD_EXTRACT) { |
266 | archive_handle->action_data = data_extract_all; | 269 | archive_handle->action_data = data_extract_all; |
267 | } | 270 | } |
268 | if (opt & AR_OPT_PRESERVE_DATE) { | 271 | if (opt & OPT_PRESERVE_DATE) { |
269 | archive_handle->ah_flags |= ARCHIVE_RESTORE_DATE; | 272 | archive_handle->ah_flags |= ARCHIVE_RESTORE_DATE; |
270 | } | 273 | } |
271 | if (opt & AR_OPT_VERBOSE) { | 274 | if (opt & OPT_VERBOSE) { |
272 | archive_handle->action_header = header_verbose_list_ar; | 275 | archive_handle->action_header = header_verbose_list_ar; |
273 | } | 276 | } |
274 | #if ENABLE_FEATURE_AR_CREATE | 277 | #if ENABLE_FEATURE_AR_CREATE |
275 | archive_handle->ar__name = *argv; | 278 | archive_handle->ar__name = *argv; |
276 | #endif | 279 | #endif |
277 | archive_handle->src_fd = xopen(*argv++, | 280 | archive_handle->src_fd = xopen(*argv++, |
278 | (opt & AR_CMD_INSERT) | 281 | (opt & CMD_INSERT) |
279 | ? O_RDWR | O_CREAT | 282 | ? O_RDWR | O_CREAT |
280 | : O_RDONLY | 283 | : O_RDONLY |
281 | ); | 284 | ); |
@@ -287,7 +290,7 @@ int ar_main(int argc UNUSED_PARAM, char **argv) | |||
287 | } | 290 | } |
288 | 291 | ||
289 | #if ENABLE_FEATURE_AR_CREATE | 292 | #if ENABLE_FEATURE_AR_CREATE |
290 | if (opt & AR_CMD_INSERT) | 293 | if (opt & CMD_INSERT) |
291 | return write_ar_archive(archive_handle); | 294 | return write_ar_archive(archive_handle); |
292 | #endif | 295 | #endif |
293 | 296 | ||