$NetBSD: patch-aa,v 1.4 2006/12/18 22:46:53 rillig Exp $ --- batchftp.c.orig 1990-10-23 21:12:42.000000000 +0100 +++ batchftp.c 2006-12-18 23:44:29.000000000 +0100 @@ -5,10 +5,16 @@ requests, and execute all other ftp commands. A user has the option to run the program in either the background or the foreground. */ +#include + #define _DIR_PATH 200 /* directory path name length -- can be set to MAXPATHNAMELEN */ #define _NULL 0 #define _HOSTLEN MAXHOSTNAMELEN + 80 /* local hostname + domain + network */ +#if defined(NAME_MAX) +#define _PATHLEN _DIR_PATH + NAME_MAX /* file path length -- directory + filename */ +#else #define _PATHLEN _DIR_PATH + MAXNAMLEN /* file path length -- directory + filename */ +#endif #define _TRUE 1 #define _FALSE 0 @@ -47,7 +53,8 @@ #include #include #include -#include +#include +#include #include #include @@ -60,16 +67,18 @@ #include #include +#include +#include + +static void init_sh_script(char *, char *, char *); +static void init_fscript (char *, char *, char *, FILE **); +static void start_session (FILE **, char *, char *, char *, char *); typedef char boolean; /* All string functions used in Batchftp are user-defined */ -char *strcpy (); -int strlen (); -int strncmp (); char *substr (); -char *strcat (); int strpos (); int process_entry (); @@ -95,12 +104,17 @@ int h_errno; an error such as "multiply defined variable during compilation or linking, delete the above declaration. */ +int main (argc, argv) int argc; char *argv[]; { char msgfile[_PATHLEN]; /* file containing output for all ftp transfer sessions */ +#if defined(NAME_MAX) + char ftp_script[NAME_MAX + 1]; /* file containing ftp commands */ +#else char ftp_script[MAXNAMLEN + 1]; /* file containing ftp commands */ +#endif char user_name[_LOGIN_LENGTH + 1]; /* user's login name */ char pass_word[_PASS_LENGTH + 1]; /* password used for ftp login */ char local_dir[_DIR_PATH]; /* local directory for ftp session */ @@ -108,8 +122,13 @@ char *argv[]; char remote_dir[_DIR_PATH]; /* remote directory for ftp session */ char input_file[_PATHLEN]; /* user supplied file containing ftp commands and/or shorthand notation */ char remote_host[_HOSTLEN]; /* remote hostname */ +#if defined(NAME_MAX) + char f_stdout[NAME_MAX + 1]; /* file containing output for a single transfer session */ + char sh_name[NAME_MAX + 1]; /* name of exec'd sh script -- 1 line ftp command */ +#else char f_stdout[MAXNAMLEN + 1]; /* file containing output for a single transfer session */ char sh_name[MAXNAMLEN + 1]; /* name of exec'd sh script -- 1 line ftp command */ +#endif char linebuf[_LBUF]; /* one line of user's input file */ boolean start_flag = _FALSE; /* indicates whether ftp attempt should begin */ @@ -129,7 +148,7 @@ char *argv[]; parent_pid = (int) getpid(); /* sprintf does not always support type "long" */ - getwd(home_dir); + getcwd(home_dir,sizeof(home_dir)); sprintf(msgfile, "%s/msg%d",home_dir, parent_pid); /*construct full pathname for ftp output file */ /* Parse command line switches and assign other arguments */ @@ -242,7 +261,7 @@ char *remote_host; /* extern int h_errno is global flag defined in */ strcpy(temp_host, remote_host); - if (inet_addr(remote_host) != -1) /* check for valid Internet address */ + if (inet_addr(remote_host) != INADDR_NONE) /* check for valid Internet address */ return(remote_host); do { @@ -307,6 +326,7 @@ char *local_host; the responsibility of the user to enter the proper login information in the input file (free-form mode). */ +static void init_fscript (remote_host, user_name, pass_word, fptr) char *remote_host; char *user_name; @@ -353,6 +373,7 @@ char *s; /* Init_sh_script creates the one line (not including interpreter) Bourne shell script to be exec'd during the ftp session. */ +static void init_sh_script(f_stdout, ftp_script, sh_name) char *f_stdout; char *ftp_script; @@ -716,6 +737,7 @@ int *address_flag; ftp command are killed simultaneously. Otherwise, the child is not signalled, and it will terminate naturally. */ +static void start_ftp (mptr, f_stdout, sh_name, alarm_flag, ftp_script) FILE **mptr; char *f_stdout; @@ -729,7 +751,7 @@ char *ftp_script; FILE *fs_ptr; /* pointer to f_stdout */ FILE *msg_ptr; /* pointer to ftp output file */ int monitor_flag; /* return value of monitor_ftp () */ - union wait status; /* wait for child to terminate */ + int status; /* wait for child to terminate */ char *sh_args[3]; /* arguments for execv */ *alarm_flag = _FALSE; /* alarm has not been called */ @@ -755,7 +777,7 @@ char *ftp_script; sh_args[1] = sh_name; sh_args[2] = 0; - if ((int) signal(SIGALRM, alarm_handler) == -1) { + if (signal(SIGALRM, alarm_handler) == (void *)-1) { fprintf(*mptr, "\nSYSTEM ERROR -- Unable to establish timer"); return; } @@ -944,6 +966,7 @@ unsigned sleep_time; reset. Start_session will not terminate until check_ftp() returns a value other than -1 */ +static void start_session (mptr, f_stdout, sh_name, ftp_script, msgfile) FILE **mptr; char *f_stdout; @@ -958,6 +981,7 @@ char *msgfile; int monitor_flag; /* return value of monitor_ftp () */ int check_flag; /* return value of check_ftp () */ + check_flag = 0; /* XXX: gcc */ do { msg_ptr = *mptr; sleep_time = connect_delay(sleep_time); @@ -986,69 +1010,6 @@ char *msgfile; } /*------------------------------------------------------- */ -int strlen (s) - -register char *s; -{ - register int n = 0; - - while (*s++) - ++n; - - return (n); -} -/* -------------------------------------------------- */ - -int strncmp (s1, s2, n) - -register char *s1, *s2; -register int n; -{ - if (n < 1) - return (_INVARG); - - { - register int char_count = -1; - - while ((++char_count < n) && (*s1) && (*s2)) { - if (*s1 > *s2) - return (_GREATER); - - if (*s1++ < *s2++) - return (_LESS); - } - - if (char_count == n) - return (_EQUAL); - - - if (*s1 > *s2) - return (_GREATER); - - if (*s1 < *s2) - return (_LESS); - - } - - return (_EQUAL); -} - -/*--------------------------------------------------- */ - -char *strcpy (s1, s2) - -register char *s1, *s2; -{ - - register char *ptr; - - ptr = s1; - while (*ptr++ = *s2++) - ; - - return (s1); -} -/*---------------------------------------------------------- */ char *substr (s1, s2) register char *s1, *s2; @@ -1068,20 +1029,6 @@ register char *s1, *s2; } /* -------------------------------------------------- */ -char *strcat (s1, s2) - -register char *s1, *s2; -{ - register char *p; - - p = s1; - while (*p++) - ; - - --p; - strcpy (p, s2); - return (s1); -} /*--------------------------------------------------------- */ int strpos (s, c)