Add --exclude option (to make uClibc-0.9.28 headers install using busybox tar).
I have no idea how to apply bb_getopt_complementally to a --longopt that has no short option. The documentation from vodz has a bad case of babelfish poisoning, and I can't understand it. It sort of seems to suggest there is a way, but what it is I have no idea. So I used \n as the short option, which is fairly unlikely to be used for something else. :)
This commit is contained in:
parent
f704b27b5b
commit
3ee6c24ea2
@ -59,12 +59,12 @@
|
|||||||
# define TAR_MAGIC "ustar" /* ustar and a null */
|
# define TAR_MAGIC "ustar" /* ustar and a null */
|
||||||
# define TAR_VERSION " " /* Be compatable with GNU tar format */
|
# define TAR_VERSION " " /* Be compatable with GNU tar format */
|
||||||
|
|
||||||
static const int TAR_BLOCK_SIZE = 512;
|
#define TAR_BLOCK_SIZE 512
|
||||||
static const int TAR_MAGIC_LEN = 6;
|
#define TAR_MAGIC_LEN 6
|
||||||
static const int TAR_VERSION_LEN = 2;
|
#define TAR_VERSION_LEN 2
|
||||||
|
|
||||||
/* POSIX tar Header Block, from POSIX 1003.1-1990 */
|
/* POSIX tar Header Block, from POSIX 1003.1-1990 */
|
||||||
enum { NAME_SIZE = 100 }; /* because gcc won't let me use 'static const int' */
|
#define NAME_SIZE 100
|
||||||
struct TarHeader { /* byte offset */
|
struct TarHeader { /* byte offset */
|
||||||
char name[NAME_SIZE]; /* 0-99 */
|
char name[NAME_SIZE]; /* 0-99 */
|
||||||
char mode[8]; /* 100-107 */
|
char mode[8]; /* 100-107 */
|
||||||
@ -670,6 +670,7 @@ static const struct option tar_long_options[] = {
|
|||||||
# ifdef CONFIG_FEATURE_TAR_FROM
|
# ifdef CONFIG_FEATURE_TAR_FROM
|
||||||
{ "files-from", 1, NULL, 'T' },
|
{ "files-from", 1, NULL, 'T' },
|
||||||
{ "exclude-from", 1, NULL, 'X' },
|
{ "exclude-from", 1, NULL, 'X' },
|
||||||
|
{ "exclude", 1, NULL, '\n' },
|
||||||
# endif
|
# endif
|
||||||
# ifdef CONFIG_FEATURE_TAR_GZIP
|
# ifdef CONFIG_FEATURE_TAR_GZIP
|
||||||
{ "gzip", 0, NULL, 'z' },
|
{ "gzip", 0, NULL, 'z' },
|
||||||
@ -688,7 +689,7 @@ int tar_main(int argc, char **argv)
|
|||||||
char *base_dir = NULL;
|
char *base_dir = NULL;
|
||||||
const char *tar_filename = "-";
|
const char *tar_filename = "-";
|
||||||
unsigned long opt;
|
unsigned long opt;
|
||||||
unsigned long ctx_flag = 0;
|
llist_t *excludes;
|
||||||
|
|
||||||
|
|
||||||
/* Initialise default values */
|
/* Initialise default values */
|
||||||
@ -697,9 +698,9 @@ int tar_main(int argc, char **argv)
|
|||||||
|
|
||||||
/* Prepend '-' to the first argument if required */
|
/* Prepend '-' to the first argument if required */
|
||||||
#ifdef CONFIG_FEATURE_TAR_CREATE
|
#ifdef CONFIG_FEATURE_TAR_CREATE
|
||||||
bb_opt_complementally = "--:-1:X::T::c:t:x:?:c--tx:t--cx:x--ct";
|
bb_opt_complementally = "--:-1:X::T::\n::c:t:x:?:c--tx:t--cx:x--ct";
|
||||||
#else
|
#else
|
||||||
bb_opt_complementally = "--:-1:X::T::t:x:?:t--x:x--t";
|
bb_opt_complementally = "--:-1:X::T::\n::t:x:?:t--x:x--t";
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_TAR_LONG_OPTIONS
|
#ifdef CONFIG_FEATURE_TAR_LONG_OPTIONS
|
||||||
bb_applet_long_options = tar_long_options;
|
bb_applet_long_options = tar_long_options;
|
||||||
@ -709,12 +710,12 @@ int tar_main(int argc, char **argv)
|
|||||||
&tar_filename /* archive filename */
|
&tar_filename /* archive filename */
|
||||||
#ifdef CONFIG_FEATURE_TAR_FROM
|
#ifdef CONFIG_FEATURE_TAR_FROM
|
||||||
, &(tar_handle->accept),
|
, &(tar_handle->accept),
|
||||||
&(tar_handle->reject)
|
&(tar_handle->reject),
|
||||||
|
&excludes
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
ctx_flag = opt & (CTX_CREATE | CTX_TEST | CTX_EXTRACT);
|
if(opt & CTX_TEST) {
|
||||||
if(ctx_flag & CTX_TEST) {
|
|
||||||
if ((tar_handle->action_header == header_list) ||
|
if ((tar_handle->action_header == header_list) ||
|
||||||
(tar_handle->action_header == header_verbose_list)) {
|
(tar_handle->action_header == header_verbose_list)) {
|
||||||
tar_handle->action_header = header_verbose_list;
|
tar_handle->action_header = header_verbose_list;
|
||||||
@ -722,10 +723,10 @@ int tar_main(int argc, char **argv)
|
|||||||
tar_handle->action_header = header_list;
|
tar_handle->action_header = header_list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ctx_flag & CTX_EXTRACT) {
|
if(opt & CTX_EXTRACT) {
|
||||||
if (tar_handle->action_data != data_extract_to_stdout)
|
if (tar_handle->action_data != data_extract_to_stdout)
|
||||||
tar_handle->action_data = data_extract_all;
|
tar_handle->action_data = data_extract_all;
|
||||||
}
|
}
|
||||||
if(opt & TAR_OPT_2STDOUT) {
|
if(opt & TAR_OPT_2STDOUT) {
|
||||||
/* To stdout */
|
/* To stdout */
|
||||||
tar_handle->action_data = data_extract_to_stdout;
|
tar_handle->action_data = data_extract_to_stdout;
|
||||||
@ -734,7 +735,7 @@ int tar_main(int argc, char **argv)
|
|||||||
if ((tar_handle->action_header == header_list) ||
|
if ((tar_handle->action_header == header_list) ||
|
||||||
(tar_handle->action_header == header_verbose_list))
|
(tar_handle->action_header == header_verbose_list))
|
||||||
{
|
{
|
||||||
tar_handle->action_header = header_verbose_list;
|
tar_handle->action_header = header_verbose_list;
|
||||||
} else {
|
} else {
|
||||||
tar_handle->action_header = header_list;
|
tar_handle->action_header = header_list;
|
||||||
}
|
}
|
||||||
@ -759,12 +760,15 @@ int tar_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_TAR_FROM
|
#ifdef CONFIG_FEATURE_TAR_FROM
|
||||||
if(opt & TAR_OPT_EXCLUDE_FROM) {
|
tar_handle->reject = append_file_list_to_list(tar_handle->reject);
|
||||||
tar_handle->reject = append_file_list_to_list(tar_handle->reject);
|
/* Append excludes to reject */
|
||||||
}
|
while(excludes) {
|
||||||
if(opt & TAR_OPT_INCLUDE_FROM) {
|
llist_t *temp = excludes->link;
|
||||||
tar_handle->accept = append_file_list_to_list(tar_handle->accept);
|
excludes->link = tar_handle->reject;
|
||||||
|
tar_handle->reject = excludes;
|
||||||
|
excludes = temp;
|
||||||
}
|
}
|
||||||
|
tar_handle->accept = append_file_list_to_list(tar_handle->accept);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Check if we are reading from stdin */
|
/* Check if we are reading from stdin */
|
||||||
|
Loading…
Reference in New Issue
Block a user