Import the latest (4/26/04) CVS lukemftp. This adds the ability to

have a prefix string on the progressbar and brings in a patch by mux@
to fix the condition when connect() returns EINTR.

Requested by:	     mux
This commit is contained in:
Mike Heffner 2004-04-27 00:31:36 +00:00
parent 0e54ef8be7
commit 7e475d60f5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/lukemftp/dist/; revision=128671
7 changed files with 57 additions and 34 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: fetch.c,v 1.144 2003/07/31 05:23:59 lukem Exp $ */ /* $NetBSD: fetch.c,v 1.146 2003/12/10 12:34:28 lukem Exp $ */
/*- /*-
* Copyright (c) 1997-2003 The NetBSD Foundation, Inc. * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
@ -41,7 +41,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: fetch.c,v 1.144 2003/07/31 05:23:59 lukem Exp $"); __RCSID("$NetBSD: fetch.c,v 1.146 2003/12/10 12:34:28 lukem Exp $");
#endif /* not lint */ #endif /* not lint */
/* /*
@ -246,7 +246,7 @@ url_decode(char *url)
/* /*
* Parse URL of form: * Parse URL of form:
* <type>://[<user>[:<password>@]]<host>[:<port>][/<path>] * <type>://[<user>[:<password>]@]<host>[:<port>][/<path>]
* Returns -1 if a parse error occurred, otherwise 0. * Returns -1 if a parse error occurred, otherwise 0.
* It's the caller's responsibility to url_decode() the returned * It's the caller's responsibility to url_decode() the returned
* user, pass and path. * user, pass and path.
@ -1303,7 +1303,6 @@ fetch_ftp(const char *url)
if ((parse_url(url, "URL", &urltype, &user, &pass, if ((parse_url(url, "URL", &urltype, &user, &pass,
&host, &port, &portnum, &path) == -1) || &host, &port, &portnum, &path) == -1) ||
(user != NULL && *user == '\0') || (user != NULL && *user == '\0') ||
(pass != NULL && *pass == '\0') ||
EMPTYSTRING(host)) { EMPTYSTRING(host)) {
warnx("Invalid URL `%s'", url); warnx("Invalid URL `%s'", url);
goto cleanup_fetch_ftp; goto cleanup_fetch_ftp;

View File

@ -1,4 +1,4 @@
.\" $NetBSD: ftp.1,v 1.100 2003/08/07 11:13:54 agc Exp $ .\" $NetBSD: ftp.1,v 1.101 2003/12/19 03:46:02 lukem Exp $
.\" .\"
.\" Copyright (c) 1996-2003 The NetBSD Foundation, Inc. .\" Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
.\" All rights reserved. .\" All rights reserved.
@ -64,7 +64,7 @@
.\" .\"
.\" @(#)ftp.1 8.3 (Berkeley) 10/9/94 .\" @(#)ftp.1 8.3 (Berkeley) 10/9/94
.\" .\"
.Dd July 31, 2003 .Dd December 19, 2003
.Dt FTP 1 .Dt FTP 1
.Os .Os
.Sh NAME .Sh NAME
@ -224,7 +224,7 @@ Restrains
.Nm .Nm
from attempting from attempting
.Dq auto-login .Dq auto-login
upon initial connection. upon initial connection for non auto-fetch transfers.
If auto-login is enabled, If auto-login is enabled,
.Nm .Nm
will check the will check the
@ -236,6 +236,8 @@ If no entry exists,
will prompt for the remote machine login name (default is the user will prompt for the remote machine login name (default is the user
identity on the local machine), and, if necessary, prompt for a password identity on the local machine), and, if necessary, prompt for a password
and an account with which to login. and an account with which to login.
To override the auto-login for auto-fetch transfers, specify the
username (and optionally, password) as appropriate.
.It Fl N Ar netrc .It Fl N Ar netrc
Use Use
.Ar netrc .Ar netrc

View File

@ -1,4 +1,4 @@
/* $NetBSD: ftp.c,v 1.122 2003/08/07 11:13:55 agc Exp $ */ /* $NetBSD: ftp.c,v 1.125 2004/04/10 12:21:39 lukem Exp $ */
/*- /*-
* Copyright (c) 1996-2002 The NetBSD Foundation, Inc. * Copyright (c) 1996-2002 The NetBSD Foundation, Inc.
@ -99,7 +99,7 @@
#if 0 #if 0
static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94"; static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94";
#else #else
__RCSID("$NetBSD: ftp.c,v 1.122 2003/08/07 11:13:55 agc Exp $"); __RCSID("$NetBSD: ftp.c,v 1.125 2004/04/10 12:21:39 lukem Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@ -230,10 +230,7 @@ hookup(char *host, char *port)
cause = "socket"; cause = "socket";
continue; continue;
} }
while ((error = xconnect(s, res->ai_addr, res->ai_addrlen)) < 0 error = xconnect(s, res->ai_addr, res->ai_addrlen);
&& errno == EINTR) {
;
}
if (error) { if (error) {
/* this "if" clause is to prevent print warning twice */ /* this "if" clause is to prevent print warning twice */
if (res->ai_next) { if (res->ai_next) {
@ -276,7 +273,8 @@ hookup(char *host, char *port)
int tos = IPTOS_LOWDELAY; int tos = IPTOS_LOWDELAY;
if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos,
sizeof(int)) < 0) sizeof(int)) < 0)
warn("setsockopt TOS (ignored)"); if (debug)
warn("setsockopt TOS (ignored)");
} }
#endif #endif
cin = fdopen(s, "r"); cin = fdopen(s, "r");
@ -573,13 +571,13 @@ empty(FILE *cin, FILE *din, int sec)
struct pollfd pfd[2]; struct pollfd pfd[2];
if (cin) { if (cin) {
pfd[nfd].fd = fileno(cin); pfd[nfd].fd = fileno(cin);
pfd[nfd++].events = POLLIN; pfd[nfd++].events = POLLIN;
} }
if (din) { if (din) {
pfd[nfd].fd = fileno(din); pfd[nfd].fd = fileno(din);
pfd[nfd++].events = POLLIN; pfd[nfd++].events = POLLIN;
} }
if ((nr = poll(pfd, nfd, sec * 1000)) <= 0) if ((nr = poll(pfd, nfd, sec * 1000)) <= 0)
@ -1325,7 +1323,8 @@ initconn(void)
if ((options & SO_DEBUG) && if ((options & SO_DEBUG) &&
setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on,
sizeof(on)) < 0) sizeof(on)) < 0)
warn("setsockopt (ignored)"); if (debug)
warn("setsockopt (ignored)");
result = COMPLETE + 1; result = COMPLETE + 1;
switch (data_addr.su_family) { switch (data_addr.su_family) {
case AF_INET: case AF_INET:
@ -1544,8 +1543,6 @@ initconn(void)
while (xconnect(data, (struct sockaddr *)&data_addr.si_su, while (xconnect(data, (struct sockaddr *)&data_addr.si_su,
data_addr.su_len) < 0) { data_addr.su_len) < 0) {
if (errno == EINTR)
continue;
if (activefallback) { if (activefallback) {
(void)close(data); (void)close(data);
data = -1; data = -1;
@ -1563,7 +1560,8 @@ initconn(void)
on = IPTOS_THROUGHPUT; on = IPTOS_THROUGHPUT;
if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on, if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on,
sizeof(int)) < 0) sizeof(int)) < 0)
warn("setsockopt TOS (ignored)"); if (debug)
warn("setsockopt TOS (ignored)");
} }
#endif #endif
return (0); return (0);
@ -1596,7 +1594,8 @@ initconn(void)
if (options & SO_DEBUG && if (options & SO_DEBUG &&
setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on,
sizeof(on)) < 0) sizeof(on)) < 0)
warn("setsockopt (ignored)"); if (debug)
warn("setsockopt (ignored)");
len = sizeof(data_addr.si_su); len = sizeof(data_addr.si_su);
memset((char *)&data_addr, 0, sizeof (data_addr)); memset((char *)&data_addr, 0, sizeof (data_addr));
if (getsockname(data, (struct sockaddr *)&data_addr.si_su, &len) < 0) { if (getsockname(data, (struct sockaddr *)&data_addr.si_su, &len) < 0) {
@ -1696,7 +1695,8 @@ initconn(void)
on = IPTOS_THROUGHPUT; on = IPTOS_THROUGHPUT;
if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on, if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on,
sizeof(int)) < 0) sizeof(int)) < 0)
warn("setsockopt TOS (ignored)"); if (debug)
warn("setsockopt TOS (ignored)");
} }
#endif #endif
return (0); return (0);
@ -1729,7 +1729,8 @@ dataconn(const char *lmode)
int tos = IPTOS_THROUGHPUT; int tos = IPTOS_THROUGHPUT;
if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos,
sizeof(int)) < 0) { sizeof(int)) < 0) {
warn("setsockopt TOS (ignored)"); if (debug)
warn("setsockopt TOS (ignored)");
} }
} }
#endif #endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: progressbar.c,v 1.4 2003/07/17 12:06:18 lukem Exp $ */ /* $NetBSD: progressbar.c,v 1.5 2004/03/09 17:04:24 hubertf Exp $ */
/*- /*-
* Copyright (c) 1997-2003 The NetBSD Foundation, Inc. * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
@ -38,7 +38,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: progressbar.c,v 1.4 2003/07/17 12:06:18 lukem Exp $"); __RCSID("$NetBSD: progressbar.c,v 1.5 2004/03/09 17:04:24 hubertf Exp $");
#endif /* not lint */ #endif /* not lint */
/* /*
@ -53,6 +53,7 @@ __RCSID("$NetBSD: progressbar.c,v 1.4 2003/07/17 12:06:18 lukem Exp $");
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
@ -203,6 +204,8 @@ progressmeter(int flag)
return; return;
len += snprintf(buf + len, BUFLEFT, "\r"); len += snprintf(buf + len, BUFLEFT, "\r");
if (prefix)
len += snprintf(buf + len, BUFLEFT, "%s", prefix);
if (filesize > 0) { if (filesize > 0) {
ratio = (int)((double)cursize * 100.0 / (double)filesize); ratio = (int)((double)cursize * 100.0 / (double)filesize);
ratio = MAX(ratio, 0); ratio = MAX(ratio, 0);
@ -214,6 +217,8 @@ progressmeter(int flag)
* the number of stars won't exceed the buffer size * the number of stars won't exceed the buffer size
*/ */
barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD; barlength = MIN(sizeof(buf) - 1, ttywidth) - BAROVERHEAD;
if (prefix)
barlength -= strlen(prefix);
if (barlength > 0) { if (barlength > 0) {
i = barlength * ratio / 100; i = barlength * ratio / 100;
len += snprintf(buf + len, BUFLEFT, len += snprintf(buf + len, BUFLEFT,

View File

@ -1,4 +1,4 @@
/* $NetBSD: progressbar.h,v 1.3 2003/02/28 09:53:49 lukem Exp $ */ /* $NetBSD: progressbar.h,v 1.4 2004/03/09 17:04:24 hubertf Exp $ */
/*- /*-
* Copyright (c) 1996-2003 The NetBSD Foundation, Inc. * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
@ -58,6 +58,7 @@ GLOBAL int ttywidth; /* width of tty */
GLOBAL off_t bytes; /* current # of bytes read */ GLOBAL off_t bytes; /* current # of bytes read */
GLOBAL off_t filesize; /* size of file being transferred */ GLOBAL off_t filesize; /* size of file being transferred */
GLOBAL off_t restart_point; /* offset to restart transfer */ GLOBAL off_t restart_point; /* offset to restart transfer */
GLOBAL char *prefix; /* Text written left of progress bar */
#ifndef STANDALONE_PROGRESS #ifndef STANDALONE_PROGRESS

View File

@ -1,4 +1,4 @@
/* $NetBSD: util.c,v 1.114 2003/08/07 11:13:57 agc Exp $ */ /* $NetBSD: util.c,v 1.115 2004/04/10 12:21:39 lukem Exp $ */
/*- /*-
* Copyright (c) 1997-2003 The NetBSD Foundation, Inc. * Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
@ -71,7 +71,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: util.c,v 1.114 2003/08/07 11:13:57 agc Exp $"); __RCSID("$NetBSD: util.c,v 1.115 2004/04/10 12:21:39 lukem Exp $");
#endif /* not lint */ #endif /* not lint */
/* /*
@ -1204,14 +1204,29 @@ isipv6addr(const char *addr)
/* /*
* Internal version of connect(2); sets socket buffer sizes first. * Internal version of connect(2); sets socket buffer sizes first and
* handles the syscall being interrupted.
* Returns -1 upon failure (with errno set to the problem), or 0 on success.
*/ */
int int
xconnect(int sock, const struct sockaddr *name, int namelen) xconnect(int sock, const struct sockaddr *name, int namelen)
{ {
int rv;
setupsockbufsize(sock); setupsockbufsize(sock);
return (connect(sock, name, namelen)); rv = connect(sock, name, namelen);
if (rv == -1 && errno == EINTR) {
fd_set connfd;
FD_ZERO(&connfd);
FD_SET(sock, &connfd);
do {
rv = select(sock + 1, NULL, &connfd, NULL, NULL);
} while (rv == -1 && errno == EINTR);
if (rv > 0)
rv = 0;
}
return (rv);
} }
/* /*

View File

@ -1,4 +1,4 @@
/* $NetBSD: version.h,v 1.33 2003/07/31 07:13:01 lukem Exp $ */ /* $NetBSD: version.h,v 1.35 2004/04/10 12:21:39 lukem Exp $ */
/*- /*-
* Copyright (c) 1999-2003 The NetBSD Foundation, Inc. * Copyright (c) 1999-2003 The NetBSD Foundation, Inc.
* All rights reserved. * All rights reserved.
@ -40,5 +40,5 @@
#endif #endif
#ifndef FTP_VERSION #ifndef FTP_VERSION
#define FTP_VERSION "20030731b" #define FTP_VERSION "20040410"
#endif #endif