xref: /dflybsd-src/contrib/tnftp/tnftp.h (revision 1612048d3f35192eeb39f3a28148604bef0d5b6e)
1*3a184c67SAntonio Huete Jimenez /*	$NetBSD: tnftp.h,v 1.39 2020/07/04 14:47:35 lukem Exp $	*/
2*3a184c67SAntonio Huete Jimenez 
3*3a184c67SAntonio Huete Jimenez #ifndef TNFTP_H
4*3a184c67SAntonio Huete Jimenez #define TNFTP_H 1
56cdfca03SJohn Marino 
66cdfca03SJohn Marino #define	FTP_PRODUCT	PACKAGE_NAME
76cdfca03SJohn Marino #define	FTP_VERSION	PACKAGE_VERSION
86cdfca03SJohn Marino 
96cdfca03SJohn Marino #include "tnftp_config.h"
106cdfca03SJohn Marino 
116cdfca03SJohn Marino #include <assert.h>
126cdfca03SJohn Marino #include <stdio.h>
136cdfca03SJohn Marino #include <ctype.h>
146cdfca03SJohn Marino #include <errno.h>
156cdfca03SJohn Marino 
166cdfca03SJohn Marino #if defined(HAVE_SYS_TYPES_H)
176cdfca03SJohn Marino # include <sys/types.h>
186cdfca03SJohn Marino #endif
196cdfca03SJohn Marino #if defined(STDC_HEADERS)
206cdfca03SJohn Marino # include <stdarg.h>
216cdfca03SJohn Marino # include <stdlib.h>
226cdfca03SJohn Marino # include <string.h>
236cdfca03SJohn Marino #endif
246cdfca03SJohn Marino #if defined(HAVE_LIBGEN_H)
256cdfca03SJohn Marino # include <libgen.h>
266cdfca03SJohn Marino #endif
276cdfca03SJohn Marino #if defined(HAVE_UNISTD_H)
286cdfca03SJohn Marino # include <unistd.h>
296cdfca03SJohn Marino #endif
306cdfca03SJohn Marino #if defined(HAVE_POLL_H)
316cdfca03SJohn Marino # include <poll.h>
326cdfca03SJohn Marino #elif defined(HAVE_SYS_POLL_H)
336cdfca03SJohn Marino # include <sys/poll.h>
346cdfca03SJohn Marino #endif
356cdfca03SJohn Marino #if defined(HAVE_SYS_SOCKET_H)
366cdfca03SJohn Marino # include <sys/socket.h>
376cdfca03SJohn Marino #endif
386cdfca03SJohn Marino #if defined(HAVE_NETINET_IN_H)
396cdfca03SJohn Marino # include <netinet/in.h>
406cdfca03SJohn Marino #endif
416cdfca03SJohn Marino #if defined(HAVE_NETINET_IN_SYSTM_H)
426cdfca03SJohn Marino # include <netinet/in_systm.h>
436cdfca03SJohn Marino #endif
446cdfca03SJohn Marino #if defined(HAVE_NETINET_IP_H)
456cdfca03SJohn Marino # include <netinet/ip.h>
466cdfca03SJohn Marino #endif
476cdfca03SJohn Marino #if defined(HAVE_NETINET_TCP_H)
486cdfca03SJohn Marino # include <netinet/tcp.h>
496cdfca03SJohn Marino #endif
506cdfca03SJohn Marino #if defined(HAVE_NETDB_H)
516cdfca03SJohn Marino # if HAVE_DECL_AI_NUMERICHOST
526cdfca03SJohn Marino #  include <netdb.h>
536cdfca03SJohn Marino # else	/* !HAVE_DECL_AI_NUMERICHOST */
546cdfca03SJohn Marino #  define getaddrinfo non_rfc2553_getaddrinfo
556cdfca03SJohn Marino #  include <netdb.h>
566cdfca03SJohn Marino #  undef getaddrinfo
576cdfca03SJohn Marino # endif	/* !HAVE_DECL_AI_NUMERICHOST */
586cdfca03SJohn Marino #endif
596cdfca03SJohn Marino #if defined(HAVE_ARPA_INET_H)
606cdfca03SJohn Marino # include <arpa/inet.h>
616cdfca03SJohn Marino #endif
626cdfca03SJohn Marino #if defined(HAVE_DIRENT_H)
636cdfca03SJohn Marino # include <dirent.h>
646cdfca03SJohn Marino #else
656cdfca03SJohn Marino # define dirent direct
666cdfca03SJohn Marino # if defined(HAVE_SYS_NDIR_H)
676cdfca03SJohn Marino #  include <sys/ndir.h>
686cdfca03SJohn Marino # endif
696cdfca03SJohn Marino # if defined(HAVE_SYS_DIR_H)
706cdfca03SJohn Marino #  include <sys/dir.h>
716cdfca03SJohn Marino # endif
726cdfca03SJohn Marino # if defined(HAVE_NDIR_H)
736cdfca03SJohn Marino #  include <ndir.h>
746cdfca03SJohn Marino # endif
756cdfca03SJohn Marino #endif
766cdfca03SJohn Marino #if defined(HAVE_SYS_UIO_H)
776cdfca03SJohn Marino # include <sys/uio.h>
786cdfca03SJohn Marino #endif
796cdfca03SJohn Marino 
806cdfca03SJohn Marino #if defined(HAVE_SYS_IOCTL_H)
816cdfca03SJohn Marino # include <sys/ioctl.h>
826cdfca03SJohn Marino #endif
836cdfca03SJohn Marino #if defined(HAVE_SYS_PARAM_H)
846cdfca03SJohn Marino # include <sys/param.h>
856cdfca03SJohn Marino #endif
866cdfca03SJohn Marino #if defined(HAVE_SYS_STAT_H)
876cdfca03SJohn Marino # include <sys/stat.h>
886cdfca03SJohn Marino #endif
896cdfca03SJohn Marino #if defined(HAVE_SYS_SYSLIMITS_H)
906cdfca03SJohn Marino # include <sys/syslimits.h>
916cdfca03SJohn Marino #endif
926cdfca03SJohn Marino #if defined(HAVE_SYS_WAIT_H)
936cdfca03SJohn Marino # include <sys/wait.h>
946cdfca03SJohn Marino #endif
956cdfca03SJohn Marino 
966cdfca03SJohn Marino #if defined(HAVE_ARPA_FTP_H)
976cdfca03SJohn Marino # include <arpa/ftp.h>
986cdfca03SJohn Marino #endif
996cdfca03SJohn Marino 
1006cdfca03SJohn Marino #if defined(HAVE_FCNTL_H)
1016cdfca03SJohn Marino # include <fcntl.h>
1026cdfca03SJohn Marino #endif
1036cdfca03SJohn Marino #if defined(HAVE_LIMITS_H)
1046cdfca03SJohn Marino # include <limits.h>
1056cdfca03SJohn Marino #endif
1066cdfca03SJohn Marino #if defined(HAVE_LOCALE_H)
1076cdfca03SJohn Marino # include <locale.h>
1086cdfca03SJohn Marino #endif
1096cdfca03SJohn Marino #if defined(HAVE_PWD_H)
1106cdfca03SJohn Marino # include <pwd.h>
1116cdfca03SJohn Marino #endif
1126cdfca03SJohn Marino #if defined(HAVE_SETJMP_H)
1136cdfca03SJohn Marino # include <setjmp.h>
1146cdfca03SJohn Marino #endif
1156cdfca03SJohn Marino #if defined(HAVE_SIGNAL_H)
1166cdfca03SJohn Marino # include <signal.h>
1176cdfca03SJohn Marino #endif
1186cdfca03SJohn Marino #if defined(HAVE_STDDEF_H)
1196cdfca03SJohn Marino # include <stddef.h>
1206cdfca03SJohn Marino #endif
1216cdfca03SJohn Marino #if defined(HAVE_TERMIOS_H)
1226cdfca03SJohn Marino # include <termios.h>
1236cdfca03SJohn Marino #endif
1246cdfca03SJohn Marino 
1256cdfca03SJohn Marino #if defined(HAVE_POLL)
1266cdfca03SJohn Marino /* we use poll */
1276cdfca03SJohn Marino #elif defined(HAVE_SELECT)
1286cdfca03SJohn Marino /* we use select */
1296cdfca03SJohn Marino #else /* !defined(HAVE_POLL) && !defined(HAVE_SELECT) */
1306cdfca03SJohn Marino # error "no poll() or select() found"
1316cdfca03SJohn Marino #endif
1326cdfca03SJohn Marino #if !defined(POLLIN)
1336cdfca03SJohn Marino # define POLLIN		0x0001
1346cdfca03SJohn Marino #endif
1356cdfca03SJohn Marino #if !defined(POLLOUT)
1366cdfca03SJohn Marino # define POLLOUT	0x0004
1376cdfca03SJohn Marino #endif
1386cdfca03SJohn Marino #if !defined(POLLRDNORM)
1396cdfca03SJohn Marino # define POLLRDNORM	0x0040
1406cdfca03SJohn Marino #endif
1416cdfca03SJohn Marino #if !defined(POLLWRNORM)
1426cdfca03SJohn Marino # define POLLWRNORM	POLLOUT
1436cdfca03SJohn Marino #endif
1446cdfca03SJohn Marino #if !defined(POLLRDBAND)
1456cdfca03SJohn Marino # define POLLRDBAND	0x0080
1466cdfca03SJohn Marino #endif
1476cdfca03SJohn Marino #if !defined(INFTIM)
1486cdfca03SJohn Marino # define INFTIM -1
1496cdfca03SJohn Marino #endif
1506cdfca03SJohn Marino #if !defined(HAVE_STRUCT_POLLFD)
1516cdfca03SJohn Marino struct pollfd {
1526cdfca03SJohn Marino 	int	fd;
1536cdfca03SJohn Marino 	short	events;
1546cdfca03SJohn Marino 	short	revents;
1556cdfca03SJohn Marino };
1566cdfca03SJohn Marino #endif
1576cdfca03SJohn Marino 
1586cdfca03SJohn Marino #if defined(TIME_WITH_SYS_TIME)
1596cdfca03SJohn Marino # include <sys/time.h>
1606cdfca03SJohn Marino # include <time.h>
1616cdfca03SJohn Marino #else
1626cdfca03SJohn Marino # if defined(HAVE_SYS_TIME_H)
1636cdfca03SJohn Marino #  include <sys/time.h>
1646cdfca03SJohn Marino # else
1656cdfca03SJohn Marino #  include <time.h>
1666cdfca03SJohn Marino # endif
1676cdfca03SJohn Marino #endif
1686cdfca03SJohn Marino 
1696cdfca03SJohn Marino #if defined(HAVE_ERR_H)
1706cdfca03SJohn Marino # include <err.h>
1716cdfca03SJohn Marino #endif
1726cdfca03SJohn Marino 
1736cdfca03SJohn Marino #if defined(USE_GLOB_H)	/* not set by configure; used by other build systems */
1746cdfca03SJohn Marino # include <glob.h>
1756cdfca03SJohn Marino #else
1766cdfca03SJohn Marino # include "ftpglob.h"
1776cdfca03SJohn Marino #endif
1786cdfca03SJohn Marino 
1796cdfca03SJohn Marino #if defined(HAVE_PATHS_H)
1806cdfca03SJohn Marino # include <paths.h>
1816cdfca03SJohn Marino #endif
1826cdfca03SJohn Marino #if !defined(_PATH_BSHELL)
1836cdfca03SJohn Marino # define _PATH_BSHELL	"/bin/sh"
1846cdfca03SJohn Marino #endif
1856cdfca03SJohn Marino #if !defined(_PATH_TMP)
1866cdfca03SJohn Marino # define _PATH_TMP	"/tmp/"
1876cdfca03SJohn Marino #endif
1886cdfca03SJohn Marino 
1896cdfca03SJohn Marino typedef struct _stringlist {
1906cdfca03SJohn Marino 	char	**sl_str;
1916cdfca03SJohn Marino 	size_t	  sl_max;
1926cdfca03SJohn Marino 	size_t	  sl_cur;
1936cdfca03SJohn Marino } StringList;
1946cdfca03SJohn Marino 
1956cdfca03SJohn Marino StringList *sl_init(void);
1966cdfca03SJohn Marino int	 sl_add(StringList *, char *);
1976cdfca03SJohn Marino void	 sl_free(StringList *, int);
1986cdfca03SJohn Marino char	*sl_find(StringList *, char *);
1996cdfca03SJohn Marino 
2006cdfca03SJohn Marino #if defined(HAVE_TERMCAP_H)
2016cdfca03SJohn Marino # include <termcap.h>
2026cdfca03SJohn Marino #else
2036cdfca03SJohn Marino int	 tgetent(char *, const char *);
2046cdfca03SJohn Marino char	*tgetstr(const char *, char **);
2056cdfca03SJohn Marino int	 tgetflag(const char *);
2066cdfca03SJohn Marino int	 tgetnum(const char *);
2076cdfca03SJohn Marino char	*tgoto(const char *, int, int);
2086cdfca03SJohn Marino void	 tputs(const char *, int, int (*)(int));
2096cdfca03SJohn Marino #endif /* !HAVE_TERMCAP_H */
2106cdfca03SJohn Marino 
2116cdfca03SJohn Marino #if defined(HAVE_VIS_H) && defined(HAVE_STRVIS) && defined(HAVE_STRUNVIS)
2126cdfca03SJohn Marino # include <vis.h>
2136cdfca03SJohn Marino #else
2146cdfca03SJohn Marino # include "ftpvis.h"
2156cdfca03SJohn Marino #endif
2166cdfca03SJohn Marino 
2176cdfca03SJohn Marino #if !defined(HAVE_IN_PORT_T)
2186cdfca03SJohn Marino typedef unsigned short in_port_t;
2196cdfca03SJohn Marino #endif
2206cdfca03SJohn Marino 
2216cdfca03SJohn Marino #if !defined(HAVE_SA_FAMILY_T)
2226cdfca03SJohn Marino typedef unsigned short sa_family_t;
2236cdfca03SJohn Marino #endif
2246cdfca03SJohn Marino 
2256cdfca03SJohn Marino #if !defined(HAVE_SOCKLEN_T)
2266cdfca03SJohn Marino typedef unsigned int socklen_t;
2276cdfca03SJohn Marino #endif
2286cdfca03SJohn Marino 
2296cdfca03SJohn Marino #if defined(USE_INET6)
2306cdfca03SJohn Marino # define INET6
2316cdfca03SJohn Marino #endif
2326cdfca03SJohn Marino 
2336cdfca03SJohn Marino #if !HAVE_DECL_AI_NUMERICHOST
2346cdfca03SJohn Marino 
2356cdfca03SJohn Marino 				/* RFC 2553 */
2366cdfca03SJohn Marino #undef	EAI_ADDRFAMILY
2376cdfca03SJohn Marino #define	EAI_ADDRFAMILY	 1	/* address family for hostname not supported */
2386cdfca03SJohn Marino #undef	EAI_AGAIN
2396cdfca03SJohn Marino #define	EAI_AGAIN	 2	/* temporary failure in name resolution */
2406cdfca03SJohn Marino #undef	EAI_BADFLAGS
2416cdfca03SJohn Marino #define	EAI_BADFLAGS	 3	/* invalid value for ai_flags */
2426cdfca03SJohn Marino #undef	EAI_FAIL
2436cdfca03SJohn Marino #define	EAI_FAIL	 4	/* non-recoverable failure in name resolution */
2446cdfca03SJohn Marino #undef	EAI_FAMILY
2456cdfca03SJohn Marino #define	EAI_FAMILY	 5	/* ai_family not supported */
2466cdfca03SJohn Marino #undef	EAI_MEMORY
2476cdfca03SJohn Marino #define	EAI_MEMORY	 6	/* memory allocation failure */
2486cdfca03SJohn Marino #undef	EAI_NODATA
2496cdfca03SJohn Marino #define	EAI_NODATA	 7	/* no address associated with hostname */
2506cdfca03SJohn Marino #undef	EAI_NONAME
2516cdfca03SJohn Marino #define	EAI_NONAME	 8	/* hostname nor servname provided, or not known */
2526cdfca03SJohn Marino #undef	EAI_SERVICE
2536cdfca03SJohn Marino #define	EAI_SERVICE	 9	/* servname not supported for ai_socktype */
2546cdfca03SJohn Marino #undef	EAI_SOCKTYPE
2556cdfca03SJohn Marino #define	EAI_SOCKTYPE	10	/* ai_socktype not supported */
2566cdfca03SJohn Marino #undef	EAI_SYSTEM
2576cdfca03SJohn Marino #define	EAI_SYSTEM	11	/* system error returned in errno */
2586cdfca03SJohn Marino 
2596cdfca03SJohn Marino 				/* KAME extensions? */
2606cdfca03SJohn Marino #undef	EAI_BADHINTS
2616cdfca03SJohn Marino #define	EAI_BADHINTS	12
2626cdfca03SJohn Marino #undef	EAI_PROTOCOL
2636cdfca03SJohn Marino #define	EAI_PROTOCOL	13
2646cdfca03SJohn Marino #undef	EAI_MAX
2656cdfca03SJohn Marino #define	EAI_MAX		14
2666cdfca03SJohn Marino 
2676cdfca03SJohn Marino 				/* RFC 2553 */
2686cdfca03SJohn Marino #undef	NI_MAXHOST
2696cdfca03SJohn Marino #define	NI_MAXHOST	1025
2706cdfca03SJohn Marino #undef	NI_MAXSERV
2716cdfca03SJohn Marino #define	NI_MAXSERV	32
2726cdfca03SJohn Marino 
2736cdfca03SJohn Marino #undef	NI_NOFQDN
2746cdfca03SJohn Marino #define	NI_NOFQDN	0x00000001
2756cdfca03SJohn Marino #undef	NI_NUMERICHOST
2766cdfca03SJohn Marino #define	NI_NUMERICHOST	0x00000002
2776cdfca03SJohn Marino #undef	NI_NAMEREQD
2786cdfca03SJohn Marino #define	NI_NAMEREQD	0x00000004
2796cdfca03SJohn Marino #undef	NI_NUMERICSERV
2806cdfca03SJohn Marino #define	NI_NUMERICSERV	0x00000008
2816cdfca03SJohn Marino #undef	NI_DGRAM
2826cdfca03SJohn Marino #define	NI_DGRAM	0x00000010
2836cdfca03SJohn Marino 
2846cdfca03SJohn Marino 				/* RFC 2553 */
2856cdfca03SJohn Marino #undef	AI_PASSIVE
2866cdfca03SJohn Marino #define	AI_PASSIVE	0x00000001 /* get address to use bind() */
2876cdfca03SJohn Marino #undef	AI_CANONNAME
2886cdfca03SJohn Marino #define	AI_CANONNAME	0x00000002 /* fill ai_canonname */
2896cdfca03SJohn Marino 
2906cdfca03SJohn Marino 				/* KAME extensions ? */
2916cdfca03SJohn Marino #undef	AI_NUMERICHOST
2926cdfca03SJohn Marino #define	AI_NUMERICHOST	0x00000004 /* prevent name resolution */
2936cdfca03SJohn Marino #undef	AI_MASK
2946cdfca03SJohn Marino #define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
2956cdfca03SJohn Marino 
2966cdfca03SJohn Marino 				/* RFC 2553 */
2976cdfca03SJohn Marino #undef	AI_ALL
2986cdfca03SJohn Marino #define	AI_ALL		0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
2996cdfca03SJohn Marino #undef	AI_V4MAPPED_CFG
3006cdfca03SJohn Marino #define	AI_V4MAPPED_CFG	0x00000200 /* accept IPv4-mapped if kernel supports */
3016cdfca03SJohn Marino #undef	AI_ADDRCONFIG
3026cdfca03SJohn Marino #define	AI_ADDRCONFIG	0x00000400 /* only if any address is assigned */
3036cdfca03SJohn Marino #undef	AI_V4MAPPED
3046cdfca03SJohn Marino #define	AI_V4MAPPED	0x00000800 /* accept IPv4-mapped IPv6 address */
3056cdfca03SJohn Marino 
3066cdfca03SJohn Marino #endif /* !HAVE_DECL_AI_NUMERICHOST */
3076cdfca03SJohn Marino 
3086cdfca03SJohn Marino 
3096cdfca03SJohn Marino #if !HAVE_DECL_AI_NUMERICHOST && !defined(HAVE_STRUCT_ADDRINFO) \
3106cdfca03SJohn Marino     && !defined(USE_SOCKS)
3116cdfca03SJohn Marino 
3126cdfca03SJohn Marino struct addrinfo {
3136cdfca03SJohn Marino 	int		ai_flags;	/* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
3146cdfca03SJohn Marino 	int		ai_family;	/* PF_xxx */
3156cdfca03SJohn Marino 	int		ai_socktype;	/* SOCK_xxx */
3166cdfca03SJohn Marino 	int		ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
3176cdfca03SJohn Marino 	socklen_t	ai_addrlen;	/* length of ai_addr */
3186cdfca03SJohn Marino 	char		*ai_canonname;	/* canonical name for hostname */
3196cdfca03SJohn Marino 	struct sockaddr *ai_addr;	/* binary address */
3206cdfca03SJohn Marino 	struct addrinfo *ai_next;	/* next structure in linked list */
3216cdfca03SJohn Marino };
3226cdfca03SJohn Marino 
3236cdfca03SJohn Marino int	getaddrinfo(const char *, const char *,
3246cdfca03SJohn Marino 	    const struct addrinfo *, struct addrinfo **);
3256cdfca03SJohn Marino int	getnameinfo(const struct sockaddr *, socklen_t,
3266cdfca03SJohn Marino 	    char *, size_t, char *, size_t, int);
3276cdfca03SJohn Marino void	freeaddrinfo(struct addrinfo *);
3286cdfca03SJohn Marino const char *gai_strerror(int);
3296cdfca03SJohn Marino 
3306cdfca03SJohn Marino #endif /* !HAVE_DECL_AI_NUMERICHOST && !defined(HAVE_STRUCT_ADDRINFO) \
3316cdfca03SJohn Marino 	&& !defined(USE_SOCKS) */
3326cdfca03SJohn Marino 
3336cdfca03SJohn Marino #if !defined(HAVE_STRUCT_DIRENT_D_NAMLEN)
3346cdfca03SJohn Marino # define DIRENT_MISSING_D_NAMLEN
3356cdfca03SJohn Marino #endif
3366cdfca03SJohn Marino 
3376cdfca03SJohn Marino #if !HAVE_DECL_H_ERRNO
3386cdfca03SJohn Marino extern int	h_errno;
3396cdfca03SJohn Marino #endif
3406cdfca03SJohn Marino #define HAVE_H_ERRNO	1		/* XXX: an assumption for now... */
3416cdfca03SJohn Marino 
3426cdfca03SJohn Marino #if !HAVE_DECL_FCLOSE
3436cdfca03SJohn Marino int	fclose(FILE *);
3446cdfca03SJohn Marino #endif
3456cdfca03SJohn Marino 
3466cdfca03SJohn Marino #if !HAVE_DECL_GETPASS
3476cdfca03SJohn Marino char	*getpass(const char *);
3486cdfca03SJohn Marino #endif
3496cdfca03SJohn Marino 
3506cdfca03SJohn Marino #if !HAVE_DECL_OPTARG
3516cdfca03SJohn Marino extern char    *optarg;
3526cdfca03SJohn Marino #endif
3536cdfca03SJohn Marino 
3546cdfca03SJohn Marino #if !HAVE_DECL_OPTIND
3556cdfca03SJohn Marino extern int	optind;
3566cdfca03SJohn Marino #endif
3576cdfca03SJohn Marino 
3586cdfca03SJohn Marino #if !HAVE_DECL_PCLOSE
3596cdfca03SJohn Marino int	pclose(FILE *);
3606cdfca03SJohn Marino #endif
3616cdfca03SJohn Marino 
3626cdfca03SJohn Marino #if !HAVE_DECL_DIRNAME
3636cdfca03SJohn Marino char	*dirname(char *);
3646cdfca03SJohn Marino #endif
3656cdfca03SJohn Marino 
3666cdfca03SJohn Marino #if !defined(HAVE_ERR)
3676cdfca03SJohn Marino void	err(int, const char *, ...);
3686cdfca03SJohn Marino void	errx(int, const char *, ...);
3696cdfca03SJohn Marino void	warn(const char *, ...);
3706cdfca03SJohn Marino void	warnx(const char *, ...);
3716cdfca03SJohn Marino #endif
3726cdfca03SJohn Marino 
3736cdfca03SJohn Marino #if !defined(HAVE_FGETLN)
3746cdfca03SJohn Marino char   *fgetln(FILE *, size_t *);
3756cdfca03SJohn Marino #endif
3766cdfca03SJohn Marino 
3776cdfca03SJohn Marino #if !defined(HAVE_FSEEKO)
3786cdfca03SJohn Marino int	fseeko(FILE *, off_t, int);
3796cdfca03SJohn Marino #endif
3806cdfca03SJohn Marino 
3816cdfca03SJohn Marino #if !defined(HAVE_INET_NTOP)
3826cdfca03SJohn Marino const char *inet_ntop(int, const void *, char *, socklen_t);
3836cdfca03SJohn Marino #endif
3846cdfca03SJohn Marino 
3856cdfca03SJohn Marino #if !defined(HAVE_INET_PTON)
3866cdfca03SJohn Marino int inet_pton(int, const char *, void *);
3876cdfca03SJohn Marino #endif
3886cdfca03SJohn Marino 
3896cdfca03SJohn Marino #if !defined(HAVE_MKSTEMP)
3906cdfca03SJohn Marino int	mkstemp(char *);
3916cdfca03SJohn Marino #endif
3926cdfca03SJohn Marino 
3936cdfca03SJohn Marino #if !defined(HAVE_SETPROGNAME)
3946cdfca03SJohn Marino const char *getprogname(void);
3956cdfca03SJohn Marino void	setprogname(const char *);
3966cdfca03SJohn Marino #endif
3976cdfca03SJohn Marino 
3986cdfca03SJohn Marino #if !defined(HAVE_SNPRINTF)
3996cdfca03SJohn Marino int	snprintf(char *, size_t, const char *, ...);
4006cdfca03SJohn Marino #endif
4016cdfca03SJohn Marino 
4026cdfca03SJohn Marino #if !defined(HAVE_STRDUP)
4036cdfca03SJohn Marino char   *strdup(const char *);
4046cdfca03SJohn Marino #endif
4056cdfca03SJohn Marino 
4066cdfca03SJohn Marino #if !defined(HAVE_STRERROR)
4076cdfca03SJohn Marino char   *strerror(int);
4086cdfca03SJohn Marino #endif
4096cdfca03SJohn Marino 
4106cdfca03SJohn Marino #if !defined(HAVE_STRPTIME) || !HAVE_DECL_STRPTIME
4116cdfca03SJohn Marino char   *strptime(const char *, const char *, struct tm *);
4126cdfca03SJohn Marino #endif
4136cdfca03SJohn Marino 
4146cdfca03SJohn Marino #if defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)
4156cdfca03SJohn Marino # if !defined(HAVE_STRTOLL)
4166cdfca03SJohn Marino long long strtoll(const char *, char **, int);
4176cdfca03SJohn Marino # endif
4186cdfca03SJohn Marino # if !defined(LLONG_MIN)
4196cdfca03SJohn Marino #  define LLONG_MIN	(-0x7fffffffffffffffLL-1)
4206cdfca03SJohn Marino # endif
4216cdfca03SJohn Marino # if !defined(LLONG_MAX)
4226cdfca03SJohn Marino #  define LLONG_MAX	(0x7fffffffffffffffLL)
4236cdfca03SJohn Marino # endif
4246cdfca03SJohn Marino #else  /* !(defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)) */
4256cdfca03SJohn Marino # define NO_LONG_LONG	1
4266cdfca03SJohn Marino #endif /* !(defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)) */
4276cdfca03SJohn Marino 
4286cdfca03SJohn Marino #if !defined(HAVE_TIMEGM)
4296cdfca03SJohn Marino time_t	timegm(struct tm *);
4306cdfca03SJohn Marino #endif
4316cdfca03SJohn Marino 
4326cdfca03SJohn Marino #if !defined(HAVE_STRLCAT)
4336cdfca03SJohn Marino size_t	strlcat(char *, const char *, size_t);
4346cdfca03SJohn Marino #endif
4356cdfca03SJohn Marino 
4366cdfca03SJohn Marino #if !defined(HAVE_STRLCPY)
4376cdfca03SJohn Marino size_t	strlcpy(char *, const char *, size_t);
4386cdfca03SJohn Marino #endif
4396cdfca03SJohn Marino 
4406cdfca03SJohn Marino #if !defined(HAVE_STRSEP)
4416cdfca03SJohn Marino char   *strsep(char **stringp, const char *delim);
4426cdfca03SJohn Marino #endif
4436cdfca03SJohn Marino 
4446cdfca03SJohn Marino #if !defined(HAVE_UTIMES)
4456cdfca03SJohn Marino int utimes(const char *, const struct timeval *);
4466cdfca03SJohn Marino #endif
4476cdfca03SJohn Marino 
448*3a184c67SAntonio Huete Jimenez #if !defined(HAVE_VASPRINTF)
449*3a184c67SAntonio Huete Jimenez int vasprintf(char **, const char *, va_list);
450*3a184c67SAntonio Huete Jimenez #endif
451*3a184c67SAntonio Huete Jimenez 
4526cdfca03SJohn Marino #if !defined(HAVE_MEMMOVE)
4536cdfca03SJohn Marino # define memmove(a,b,c)	bcopy((b),(a),(c))
4546cdfca03SJohn Marino 	/* XXX: add others #defines for borken systems? */
4556cdfca03SJohn Marino #endif
4566cdfca03SJohn Marino 
4576cdfca03SJohn Marino #if defined(HAVE_GETPASSPHRASE)
4586cdfca03SJohn Marino # define getpass getpassphrase
4596cdfca03SJohn Marino #endif
4606cdfca03SJohn Marino 
4616cdfca03SJohn Marino #if !defined(MIN)
4626cdfca03SJohn Marino # define MIN(a, b)	((a) < (b) ? (a) : (b))
4636cdfca03SJohn Marino #endif
4646cdfca03SJohn Marino #if !defined(MAX)
4656cdfca03SJohn Marino # define MAX(a, b)	((a) < (b) ? (b) : (a))
4666cdfca03SJohn Marino #endif
4676cdfca03SJohn Marino 
4686cdfca03SJohn Marino #if !defined(timersub)
4696cdfca03SJohn Marino # define timersub(tvp, uvp, vvp)					\
4706cdfca03SJohn Marino 	do {								\
4716cdfca03SJohn Marino 		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
4726cdfca03SJohn Marino 		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
4736cdfca03SJohn Marino 		if ((vvp)->tv_usec < 0) {				\
4746cdfca03SJohn Marino 			(vvp)->tv_sec--;				\
4756cdfca03SJohn Marino 			(vvp)->tv_usec += 1000000;			\
4766cdfca03SJohn Marino 		}							\
4776cdfca03SJohn Marino 	} while (0)
4786cdfca03SJohn Marino #endif
4796cdfca03SJohn Marino 
4806cdfca03SJohn Marino #if !defined(S_ISLNK)
4816cdfca03SJohn Marino # define S_ISLNK(m)	((m & S_IFMT) == S_IFLNK)
4826cdfca03SJohn Marino #endif
4836cdfca03SJohn Marino 
4846cdfca03SJohn Marino #define	EPOCH_YEAR	1970
4856cdfca03SJohn Marino #define	SECSPERHOUR	3600
4866cdfca03SJohn Marino #define	SECSPERDAY	86400
4876cdfca03SJohn Marino #define	TM_YEAR_BASE	1900
4886cdfca03SJohn Marino 
4896cdfca03SJohn Marino #if defined(USE_SOCKS)		/* (Dante) SOCKS5 */
4906cdfca03SJohn Marino #define connect		Rconnect
4916cdfca03SJohn Marino #define bind		Rbind
4926cdfca03SJohn Marino #define getsockname	Rgetsockname
4936cdfca03SJohn Marino #define getpeername	Rgetpeername
4946cdfca03SJohn Marino #define accept		Raccept
4956cdfca03SJohn Marino #define rresvport	Rrresvport
4966cdfca03SJohn Marino #define bindresvport	Rbindresvport
4976cdfca03SJohn Marino #define gethostbyname	Rgethostbyname
4986cdfca03SJohn Marino #define gethostbyname2	Rgethostbyname2
4996cdfca03SJohn Marino #define sendto		Rsendto
5006cdfca03SJohn Marino #define recvfrom	Rrecvfrom
5016cdfca03SJohn Marino #define recvfrom	Rrecvfrom
5026cdfca03SJohn Marino #define write		Rwrite
5036cdfca03SJohn Marino #define writev		Rwritev
5046cdfca03SJohn Marino #define send		Rsend
5056cdfca03SJohn Marino #define sendmsg		Rsendmsg
5066cdfca03SJohn Marino #define read		Rread
5076cdfca03SJohn Marino #define readv		Rreadv
5086cdfca03SJohn Marino #define recv		Rrecv
5096cdfca03SJohn Marino #define recvmsg		Rrecvmsg
5106cdfca03SJohn Marino #define getaddrinfo	Rgetaddrinfo
5116cdfca03SJohn Marino #define getipnodebyname	Rgetipnodebyname
5126cdfca03SJohn Marino #endif /* defined(USE_SOCKS) */
5136cdfca03SJohn Marino 
5146cdfca03SJohn Marino 
5156cdfca03SJohn Marino /*
5166cdfca03SJohn Marino  * Compatibility for stuff in NetBSD <sys/cdefs.h>
5176cdfca03SJohn Marino  */
5186cdfca03SJohn Marino #undef __dead
5196cdfca03SJohn Marino #define __dead
5206cdfca03SJohn Marino 
5216cdfca03SJohn Marino #ifdef __UNCONST
5226cdfca03SJohn Marino #undef __UNCONST
5236cdfca03SJohn Marino #endif
5246cdfca03SJohn Marino #define __UNCONST(a)	((void *)(unsigned long)(const void *)(a))
525*3a184c67SAntonio Huete Jimenez 
526*3a184c67SAntonio Huete Jimenez #ifdef __UNVOLATILE
527*3a184c67SAntonio Huete Jimenez #undef __UNVOLATILE
528*3a184c67SAntonio Huete Jimenez #endif
529*3a184c67SAntonio Huete Jimenez #define __UNVOLATILE(a)	((void *)(unsigned long)(volatile void *)(a))
530*3a184c67SAntonio Huete Jimenez 
531*3a184c67SAntonio Huete Jimenez #endif /* TNFTP_H */
532