X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhstoresbr.c;h=b2a3e31b2fcf59a8ca4283e2709aa3b6ea919b72;hp=d849609ffc1778130e10e8a83b25c9687493ff41;hb=0f540a390a62d9732f61fdb21f82048093a3d63d;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b diff --git a/uip/mhstoresbr.c b/uip/mhstoresbr.c index d849609..b2a3e31 100644 --- a/uip/mhstoresbr.c +++ b/uip/mhstoresbr.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include @@ -218,7 +218,7 @@ store_application (CT ct) * attribute/value pairs which specify if this a tar file. */ if (!ct->c_storeproc && ct->c_subtype == APPLICATION_OCTETS) { - int tarP = 0, zP = 0; + int tarP = 0, zP = 0, gzP = 0; for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) { /* check for "type=tar" attribute */ @@ -236,19 +236,30 @@ store_application (CT ct) zP = 1; continue; } + /* check for "conversions=gzip" attribute */ + if ((!strcasecmp (*ap, "conversions") || !strcasecmp (*ap, "x-conversions")) + && (!strcasecmp (*ep, "gzip") || !strcasecmp (*ep, "x-gzip"))) { + gzP = 1; + continue; + } } if (tarP) { ct->c_showproc = add (zP ? "%euncompress | tar tvf -" - : "%etar tvf -", NULL); - if (!ct->c_storeproc) + : (gzP ? "%egzip -dc | tar tvf -" + : "%etar tvf -"), NULL); + if (!ct->c_storeproc) { if (autosw) { ct->c_storeproc = add (zP ? "| uncompress | tar xvpf -" - : "| tar xvpf -", NULL); + : (gzP ? "| gzip -dc | tar xvpf -" + : "| tar xvpf -"), NULL); ct->c_umask = 0022; } else { - ct->c_storeproc = add (zP ? "%m%P.tar.Z" : "%m%P.tar", NULL); + ct->c_storeproc= add (zP ? "%m%P.tar.Z" + : (gzP ? "%m%P.tar.gz" + : "%m%P.tar"), NULL); } + } } }