(retrying): support on-the-fly decompression
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5221 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -854,14 +854,15 @@ retrieve(char *cmd, char *name)
|
|||||||
st.st_size = 0;
|
st.st_size = 0;
|
||||||
if(fin == NULL){
|
if(fin == NULL){
|
||||||
struct cmds {
|
struct cmds {
|
||||||
char *ext;
|
const char *ext;
|
||||||
char *cmd;
|
const char *cmd;
|
||||||
|
const char *rev_cmd;
|
||||||
} cmds[] = {
|
} cmds[] = {
|
||||||
{".tar", "/bin/gtar cPf - %s"},
|
{".tar", "/bin/gtar cPf - %s", NULL},
|
||||||
{".tar.gz", "/bin/gtar zcPf - %s"},
|
{".tar.gz", "/bin/gtar zcPf - %s", NULL},
|
||||||
{".tar.Z", "/bin/gtar ZcPf - %s"},
|
{".tar.Z", "/bin/gtar ZcPf - %s", NULL},
|
||||||
{".gz", "/bin/gzip -c %s"},
|
{".gz", "/bin/gzip -c %s", "/bin/gzip -c -d %s"},
|
||||||
{".Z", "/bin/compress -c %s"},
|
{".Z", "/bin/compress -c %s", "/bin/uncompress -c -d %s"},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
struct cmds *p;
|
struct cmds *p;
|
||||||
@@ -877,6 +878,21 @@ retrieve(char *cmd, char *name)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*tail = c;
|
*tail = c;
|
||||||
|
if (p->rev_cmd != NULL) {
|
||||||
|
char *ext;
|
||||||
|
|
||||||
|
asprintf(&ext, "%s%s", name, p->ext);
|
||||||
|
if (ext != NULL) {
|
||||||
|
if (access(ext, R_OK) == 0) {
|
||||||
|
snprintf (line, sizeof(line),
|
||||||
|
p->rev_cmd, ext);
|
||||||
|
free(ext);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
free(ext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if(p->ext){
|
if(p->ext){
|
||||||
fin = ftpd_popen(line, "r", 0, 0);
|
fin = ftpd_popen(line, "r", 0, 0);
|
||||||
|
Reference in New Issue
Block a user