version 1.3, 1996/06/03 15:55:48 |
version 1.4, 1996/06/03 16:35:05 |
|
|
while (argc > 0 && strchr(argv[0], ':')) { |
while (argc > 0 && strchr(argv[0], ':')) { |
char *xargv[5]; |
char *xargv[5]; |
extern char *__progname; |
extern char *__progname; |
char portstr[20], *p, *bufp; |
char portstr[20], *p, *bufp = NULL; |
|
char *host = NULL, *dir = NULL, *file = NULL; |
int xargc = 2; |
int xargc = 2; |
|
|
if (setjmp(toplevel)) |
if (setjmp(toplevel)) |
|
|
(void) signal(SIGPIPE, lostpeer); |
(void) signal(SIGPIPE, lostpeer); |
xargv[0] = __progname; |
xargv[0] = __progname; |
|
|
/* connect to host */ |
host = strdup(argv[0]); |
bufp = xargv[1] = strdup(argv[0]); |
if (host == NULL) { |
p = strchr(xargv[1], ':'); |
ret = 1; |
|
goto bail; |
|
} |
|
|
|
if (strncmp(host, "ftp://", sizeof("ftp://")-1) == 0) { |
|
host += sizeof("ftp://") - 1; |
|
p = strchr(host, '/'); |
|
} else |
|
p = strchr(host, ':'); |
*p = '\0'; |
*p = '\0'; |
|
dir = ++p; |
|
p = strrchr(p, '/'); |
|
if (p) { |
|
*p = '\0'; |
|
file = ++p; |
|
} else { |
|
file = dir; |
|
dir = NULL; |
|
} |
|
|
|
xargv[1] = host; |
xargv[2] = NULL; |
xargv[2] = NULL; |
|
xargc = 2; |
if (force_port) { |
if (force_port) { |
xargv[2] = portstr; |
xargv[2] = portstr; |
snprintf(portstr, sizeof portstr, "%d", |
snprintf(portstr, sizeof portstr, "%d", |
|
|
} |
} |
setpeer(xargc, xargv); |
setpeer(xargc, xargv); |
if (!connected) { |
if (!connected) { |
printf("failed to connect to %s\n", xargv[1]); |
printf("failed to connect to %s\n", host); |
ret = 1; |
ret = 1; |
goto bail; |
goto bail; |
} |
} |
free(bufp); |
|
|
|
setbinary(NULL, 0); |
setbinary(NULL, 0); |
|
|
/* cd into correct directory */ |
if (dir) { |
bufp = xargv[1] = strdup(argv[0]); |
xargv[1] = dir; |
if (xargv[1] == NULL) { |
xargv[2] = NULL; |
ret = 1; |
xargc = 2; |
goto bail; |
cd(xargc, xargv); |
} |
} |
xargv[1] = strchr(xargv[1], ':'); |
|
xargv[1]++; |
|
p = strrchr(xargv[1], '/'); |
|
if (p) |
|
*p = '\0'; |
|
xargv[2] = NULL; |
|
xargc = 2; |
|
cd(xargc, xargv); |
|
free(bufp); |
|
|
|
/* fetch file */ |
/* fetch file */ |
bufp = xargv[1] = strdup(argv[0]); |
xargv[1] = file; |
if (xargv[1] == NULL) { |
|
ret = 1; |
|
goto bail; |
|
} |
|
xargv[1] = strchr(xargv[1], ':'); |
|
xargv[1]++; |
|
p = strrchr(xargv[1], '/'); |
|
if (p) |
|
xargv[1] = p + 1; |
|
xargv[2] = NULL; |
xargv[2] = NULL; |
xargc = 2; |
xargc = 2; |
get(xargc, xargv); |
get(xargc, xargv); |
free(bufp); |
|
|
|
/* get ready for the next file */ |
/* get ready for the next file */ |
bail: |
bail: |
|
if (bufp) |
|
free(bufp); |
if (connected) |
if (connected) |
disconnect(1, xargv); |
disconnect(1, xargv); |
--argc; |
--argc; |