diff options
author | Martynas Venckus <martynas@cvs.openbsd.org> | 2008-07-08 21:07:58 +0000 |
---|---|---|
committer | Martynas Venckus <martynas@cvs.openbsd.org> | 2008-07-08 21:07:58 +0000 |
commit | 66a9ee29034eff1ef97bd24b19f4535c46d34b39 (patch) | |
tree | 77b34a49e6173e9b4c9f16116a58c71b195c422f /usr.bin/ftp/list.c | |
parent | 7a3d395c69db3c8452efe68ea465fcf6112fd974 (diff) |
- add support for recursive transfers (but not for floppies), e.g.
'mget -cr 4.*' would recursively fetch (-r), and resume the previous
transfers (-c) of 4.X release directories
uses local matching (fnmatch), but only for recursive transfers.
current behavior is not changed in any way.
- while here, ifndef SMALL debugging stuff, this saves some space,
for floppies
- some debugging code was enabled for non-debugging mode, checks
assume debug is set to zero, but it's not initially set
- all "Confirm with" prompts are forced, remove redundant argument
- fix usage: -C and -c are not available for SMALL
discussed a year ago w/ pyr@
looks good to millert@
previous version looked good to pyr@
man page tweaks & ok jmc@
Diffstat (limited to 'usr.bin/ftp/list.c')
-rw-r--r-- | usr.bin/ftp/list.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/usr.bin/ftp/list.c b/usr.bin/ftp/list.c new file mode 100644 index 00000000000..909b7592975 --- /dev/null +++ b/usr.bin/ftp/list.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2008 Martynas Venckus <martynas@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SMALL +#include <string.h> + +void +parse_unix(char **line, char *type) +{ + char *tok; + int field = 0; + + while ((tok = strsep(line, " \t")) != NULL) { + if (*tok == '\0') + continue; + + if (field == 0) + *type = *tok; + + if (field == 7) { + while (**line == ' ' || **line == '\t') + (*line)++; + break; + } + + field++; + } +} + +void +parse_windows(char **line, char *type) +{ + char *tok; + int field = 0; + + *type = '-'; + while ((tok = strsep(line, " \t")) != NULL) { + if (*tok == '\0') + continue; + + if (field == 2 && strcmp(tok, "<DIR>") == 0) + *type = 'd'; + + if (field == 2) { + while (**line == ' ' || **line == '\t') + (*line)++; + break; + } + + field++; + } +} + +void +parse_list(char **line, char *type) +{ + if (**line >= '0' && **line <= '9') + return parse_windows(line, type); + + return parse_unix(line, type); +} + +#endif /* !SMALL */ |