Denys,

Whats the status on this patch?

On Tue, Apr 24, 2012 at 5:06 PM, Natanael Copa <[email protected]> wrote:
> bloatcheck on x86_64:
>
> function                                             old     new   delta
> tar_longopts                                         259     274     +15
> .rodata                                             5757 5772     +15
> tar_main                                            1038    1052     +14
> writeTarFile                                         362     353      -9
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 3/1 up/down: 44/-9)              Total: 35 bytes
>   text    data     bss     dec     hex filename
>  81457    1706    8344   91507   16573 busybox_old
>  81477    1706    8344   91527   16587 busybox_unstripped
>
> Signed-off-by: Natanael Copa <[email protected]>
> ---
>  archival/tar.c |   19 ++++++++++++-------
>  1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/archival/tar.c b/archival/tar.c
> index cf972c2..a64d651 100644
> --- a/archival/tar.c
> +++ b/archival/tar.c
> @@ -60,8 +60,8 @@
>
>  #if !ENABLE_FEATURE_SEAMLESS_GZ && !ENABLE_FEATURE_SEAMLESS_BZ2
>  /* Do not pass gzip flag to writeTarFile() */
> -#define writeTarFile(tar_fd, verboseFlag, dereferenceFlag, include, exclude, 
> gzip) \
> -       writeTarFile(tar_fd, verboseFlag, dereferenceFlag, include, exclude)
> +#define writeTarFile(tar_fd, verboseFlag, recurseFlags, include, exclude, 
> gzip) \
> +       writeTarFile(tar_fd, verboseFlag, recurseFlags, include, exclude)
>  #endif
>
>
> @@ -598,7 +598,7 @@ static void NOINLINE vfork_compressor(int tar_fd, int 
> gzip)
>
>  /* gcc 4.2.1 inlines it, making code bigger */
>  static NOINLINE int writeTarFile(int tar_fd, int verboseFlag,
> -       int dereferenceFlag, const llist_t *include,
> +       int recurseFlags, const llist_t *include,
>        const llist_t *exclude, int gzip)
>  {
>        int errorFlag = FALSE;
> @@ -621,8 +621,7 @@ static NOINLINE int writeTarFile(int tar_fd, int 
> verboseFlag,
>
>        /* Read the directory/files and iterate over them one at a time */
>        while (include) {
> -               if (!recursive_action(include->data, ACTION_RECURSE |
> -                               (dereferenceFlag ? ACTION_FOLLOWLINKS : 0),
> +               if (!recursive_action(include->data, recurseFlags,
>                                writeFileToTarball, writeFileToTarball, 
> &tbInfo, 0)
>                ) {
>                        errorFlag = TRUE;
> @@ -662,7 +661,7 @@ static NOINLINE int writeTarFile(int tar_fd, int 
> verboseFlag,
>  }
>  #else
>  int writeTarFile(int tar_fd, int verboseFlag,
> -       int dereferenceFlag, const llist_t *include,
> +       int recurseFlags, const llist_t *include,
>        const llist_t *exclude, int gzip);
>  #endif /* FEATURE_TAR_CREATE */
>
> @@ -749,6 +748,7 @@ static llist_t *append_file_list_to_list(llist_t *list)
>  //     o       no-same-owner
>  //     p       same-permissions
>  //     k       keep-old
> +//     no-recursion
>  //     numeric-owner
>  //     no-same-permissions
>  //     overwrite
> @@ -768,6 +768,7 @@ enum {
>        IF_FEATURE_SEAMLESS_Z(   OPTBIT_COMPRESS    ,) // 16th bit
>        IF_FEATURE_TAR_NOPRESERVE_TIME(OPTBIT_NOPRESERVE_TIME,)
>  #if ENABLE_FEATURE_TAR_LONG_OPTIONS
> +       OPTBIT_NORECURSION,
>        IF_FEATURE_TAR_TO_COMMAND(OPTBIT_2COMMAND   ,)
>        OPTBIT_NUMERIC_OWNER,
>        OPTBIT_NOPRESERVE_PERM,
> @@ -791,6 +792,7 @@ enum {
>        OPT_GZIP         = IF_FEATURE_SEAMLESS_GZ(  (1 << OPTBIT_GZIP        
> )) + 0, // z
>        OPT_COMPRESS     = IF_FEATURE_SEAMLESS_Z(   (1 << OPTBIT_COMPRESS    
> )) + 0, // Z
>        OPT_NOPRESERVE_TIME = IF_FEATURE_TAR_NOPRESERVE_TIME((1 << 
> OPTBIT_NOPRESERVE_TIME)) + 0, // m
> +       OPT_NORECURSION     = IF_FEATURE_TAR_LONG_OPTIONS((1 << 
> OPTBIT_NORECURSION    )) + 0, // no-recursion
>        OPT_2COMMAND        = IF_FEATURE_TAR_TO_COMMAND(  (1 << 
> OPTBIT_2COMMAND       )) + 0, // to-command
>        OPT_NUMERIC_OWNER   = IF_FEATURE_TAR_LONG_OPTIONS((1 << 
> OPTBIT_NUMERIC_OWNER  )) + 0, // numeric-owner
>        OPT_NOPRESERVE_PERM = IF_FEATURE_TAR_LONG_OPTIONS((1 << 
> OPTBIT_NOPRESERVE_PERM)) + 0, // no-same-permissions
> @@ -835,6 +837,7 @@ static const char tar_longopts[] ALIGN1 =
>  # if ENABLE_FEATURE_TAR_NOPRESERVE_TIME
>        "touch\0"               No_argument       "m"
>  # endif
> +       "no-recursion\0"        No_argument       "\xfa"
>  # if ENABLE_FEATURE_TAR_TO_COMMAND
>        "to-command\0"          Required_argument "\xfb"
>  # endif
> @@ -1050,7 +1053,9 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
>                        zipMode = 2;
>  #endif
>                /* NB: writeTarFile() closes tar_handle->src_fd */
> -               return writeTarFile(tar_handle->src_fd, verboseFlag, opt & 
> OPT_DEREFERENCE,
> +               return writeTarFile(tar_handle->src_fd, verboseFlag,
> +                               (opt & OPT_DEREFERENCE ? ACTION_FOLLOWLINKS : 
> 0)
> +                               | (opt & OPT_NORECURSION ? 0 : 
> ACTION_RECURSE),
>                                tar_handle->accept,
>                                tar_handle->reject, zipMode);
>        }
> --
> 1.7.10
>



-- 
Natanael Copa
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to