(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:
Assar Westerlund
1998-11-22 09:30:25 +00:00
parent 000d724fbc
commit 59e75644e4

View File

@@ -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);