version 1.3, 1997/02/05 04:55:16 |
version 1.4, 1997/03/14 04:32:14 |
|
|
/* $OpenBSD$ */ |
/* $OpenBSD$ */ |
/* $NetBSD: fetch.c,v 1.2 1997/02/01 10:45:00 lukem Exp $ */ |
/* $NetBSD: fetch.c,v 1.3 1997/03/13 06:23:15 lukem Exp $ */ |
|
|
/*- |
/*- |
* Copyright (c) 1997 The NetBSD Foundation, Inc. |
* Copyright (c) 1997 The NetBSD Foundation, Inc. |
|
|
for (i = 0, buflen = sizeof(buf), cp = buf; i < buflen; cp++, i++) { |
for (i = 0, buflen = sizeof(buf), cp = buf; i < buflen; cp++, i++) { |
if (read(s, cp, 1) != 1) |
if (read(s, cp, 1) != 1) |
goto improper; |
goto improper; |
|
if (*cp == '\r') |
|
continue; |
if (*cp == '\n') |
if (*cp == '\n') |
break; |
break; |
} |
} |
|
|
for (i = 0, buflen = sizeof(buf), cp = buf; i < buflen; cp++, i++) { |
for (i = 0, buflen = sizeof(buf), cp = buf; i < buflen; cp++, i++) { |
if (read(s, cp, 1) != 1) |
if (read(s, cp, 1) != 1) |
goto improper; |
goto improper; |
|
if (*cp == '\r') |
|
continue; |
if (*cp == '\n' && c == '\n') |
if (*cp == '\n' && c == '\n') |
break; |
break; |
c = *cp; |
c = *cp; |
|
|
{ |
{ |
|
|
alarmtimer(0); |
alarmtimer(0); |
puts("\nhttp fetch aborted"); |
puts("\nhttp fetch aborted."); |
(void)fflush(stdout); |
(void)fflush(stdout); |
longjmp(httpabort, 1); |
longjmp(httpabort, 1); |
} |
} |
|
|
char *xargv[5]; |
char *xargv[5]; |
char *cp, *line, *host, *dir, *file, *portnum; |
char *cp, *line, *host, *dir, *file, *portnum; |
int rval, xargc, argpos; |
int rval, xargc, argpos; |
|
int dirhasglob, filehasglob; |
|
char rempath[MAXPATHLEN]; |
|
|
argpos = 0; |
argpos = 0; |
|
|
|
|
} |
} |
} |
} |
|
|
|
dirhasglob = filehasglob = 0; |
|
if (doglob) { |
|
if (! EMPTYSTRING(dir) && |
|
strpbrk(dir, "*?[]{}") != NULL) |
|
dirhasglob = 1; |
|
if (! EMPTYSTRING(file) && |
|
strpbrk(file, "*?[]{}") != NULL) |
|
filehasglob = 1; |
|
} |
|
|
/* Change directories, if necessary. */ |
/* Change directories, if necessary. */ |
if (! EMPTYSTRING(dir)) { |
if (! EMPTYSTRING(dir) && !dirhasglob) { |
xargv[0] = "cd"; |
xargv[0] = "cd"; |
xargv[1] = dir; |
xargv[1] = dir; |
xargv[2] = NULL; |
xargv[2] = NULL; |
|
|
if (!verbose) |
if (!verbose) |
printf("Retrieving %s/%s\n", dir ? dir : "", file); |
printf("Retrieving %s/%s\n", dir ? dir : "", file); |
|
|
/* Fetch the file. */ |
if (dirhasglob) { |
|
snprintf(rempath, sizeof(rempath), "%s/%s", dir, file); |
|
file = rempath; |
|
} |
|
|
|
/* Fetch the file(s). */ |
xargv[0] = "get"; |
xargv[0] = "get"; |
xargv[1] = file; |
xargv[1] = file; |
xargv[2] = NULL; |
xargv[2] = NULL; |
get(2, xargv); |
if (dirhasglob || filehasglob) { |
|
int ointeractive; |
|
|
if ((code / 100) != COMPLETE) /* XXX: is this valid? */ |
ointeractive = interactive; |
|
interactive = 0; |
|
xargv[0] = "mget"; |
|
mget(2, xargv); |
|
interactive = 1; |
|
} else |
|
get(2, xargv); |
|
|
|
if ((code / 100) != COMPLETE) |
rval = argpos + 1; |
rval = argpos + 1; |
} |
} |
if (connected && rval != -1) |
if (connected && rval != -1) |