printf("%s: reading directory: %s\n", swcm->prefix,
fxp_error());
return NULL;
- }
+ } else if (swcm->names->nnames == 0) {
+ /*
+ * Another failure mode which we treat as EOF is if
+ * the server reports success from FXP_READDIR but
+ * returns no actual names. This is unusual, since
+ * from most servers you'd expect at least "." and
+ * "..", but there's nothing forbidding a server from
+ * omitting those if it wants to.
+ */
+ return NULL;
+ }
swcm->namepos = 0;
}
* >this has "quotes" in<
* >and"this"<
*/
- while (*p) {
+ while (1) {
/* skip whitespace */
while (*p && (*p == ' ' || *p == '\t'))
p++;
+ /* terminate loop */
+ if (!*p)
+ break;
/* mark start of word */
q = r = p; /* q sits at start, r writes word */
quoting = 0;
if (flags & FLAG_VERBOSE)
verbose = 1;
} else if (strcmp(argv[i], "-h") == 0 ||
- strcmp(argv[i], "-?") == 0) {
+ strcmp(argv[i], "-?") == 0 ||
+ strcmp(argv[i], "--help") == 0) {
usage();
} else if (strcmp(argv[i], "-pgpfp") == 0) {
pgp_fingerprints();
return 1;
- } else if (strcmp(argv[i], "-V") == 0) {
+ } else if (strcmp(argv[i], "-V") == 0 ||
+ strcmp(argv[i], "--version") == 0) {
version();
} else if (strcmp(argv[i], "-batch") == 0) {
console_batch_mode = 1;