1*cc361f65SGavin Atkinson /* $NetBSD: tnftp.h,v 1.33 2009/11/14 08:32:42 lukem Exp $ */ 2*cc361f65SGavin Atkinson 3*cc361f65SGavin Atkinson #define FTP_PRODUCT PACKAGE_NAME 4*cc361f65SGavin Atkinson #define FTP_VERSION PACKAGE_VERSION 5*cc361f65SGavin Atkinson 6*cc361f65SGavin Atkinson #include "tnftp_config.h" 7*cc361f65SGavin Atkinson 8*cc361f65SGavin Atkinson #include <stdio.h> 9*cc361f65SGavin Atkinson #include <ctype.h> 10*cc361f65SGavin Atkinson #include <errno.h> 11*cc361f65SGavin Atkinson 12*cc361f65SGavin Atkinson #if defined(HAVE_SYS_TYPES_H) 13*cc361f65SGavin Atkinson # include <sys/types.h> 14*cc361f65SGavin Atkinson #endif 15*cc361f65SGavin Atkinson #if defined(STDC_HEADERS) 16*cc361f65SGavin Atkinson # include <stdarg.h> 17*cc361f65SGavin Atkinson # include <stdlib.h> 18*cc361f65SGavin Atkinson # include <string.h> 19*cc361f65SGavin Atkinson #endif 20*cc361f65SGavin Atkinson #if defined(HAVE_LIBGEN_H) 21*cc361f65SGavin Atkinson # include <libgen.h> 22*cc361f65SGavin Atkinson #endif 23*cc361f65SGavin Atkinson #if defined(HAVE_UNISTD_H) 24*cc361f65SGavin Atkinson # include <unistd.h> 25*cc361f65SGavin Atkinson #endif 26*cc361f65SGavin Atkinson #if defined(HAVE_POLL_H) 27*cc361f65SGavin Atkinson # include <poll.h> 28*cc361f65SGavin Atkinson #elif defined(HAVE_SYS_POLL_H) 29*cc361f65SGavin Atkinson # include <sys/poll.h> 30*cc361f65SGavin Atkinson #endif 31*cc361f65SGavin Atkinson #if defined(HAVE_SYS_SOCKET_H) 32*cc361f65SGavin Atkinson # include <sys/socket.h> 33*cc361f65SGavin Atkinson #endif 34*cc361f65SGavin Atkinson #if defined(HAVE_NETINET_IN_H) 35*cc361f65SGavin Atkinson # include <netinet/in.h> 36*cc361f65SGavin Atkinson #endif 37*cc361f65SGavin Atkinson #if defined(HAVE_NETINET_IN_SYSTM_H) 38*cc361f65SGavin Atkinson # include <netinet/in_systm.h> 39*cc361f65SGavin Atkinson #endif 40*cc361f65SGavin Atkinson #if defined(HAVE_NETINET_IP_H) 41*cc361f65SGavin Atkinson # include <netinet/ip.h> 42*cc361f65SGavin Atkinson #endif 43*cc361f65SGavin Atkinson #if defined(HAVE_NETDB_H) 44*cc361f65SGavin Atkinson # if HAVE_DECL_AI_NUMERICHOST 45*cc361f65SGavin Atkinson # include <netdb.h> 46*cc361f65SGavin Atkinson # else /* !HAVE_DECL_AI_NUMERICHOST */ 47*cc361f65SGavin Atkinson # define getaddrinfo non_rfc2553_getaddrinfo 48*cc361f65SGavin Atkinson # include <netdb.h> 49*cc361f65SGavin Atkinson # undef getaddrinfo 50*cc361f65SGavin Atkinson # endif /* !HAVE_DECL_AI_NUMERICHOST */ 51*cc361f65SGavin Atkinson #endif 52*cc361f65SGavin Atkinson #if defined(HAVE_ARPA_INET_H) 53*cc361f65SGavin Atkinson # include <arpa/inet.h> 54*cc361f65SGavin Atkinson #endif 55*cc361f65SGavin Atkinson #if defined(HAVE_DIRENT_H) 56*cc361f65SGavin Atkinson # include <dirent.h> 57*cc361f65SGavin Atkinson #else 58*cc361f65SGavin Atkinson # define dirent direct 59*cc361f65SGavin Atkinson # if defined(HAVE_SYS_NDIR_H) 60*cc361f65SGavin Atkinson # include <sys/ndir.h> 61*cc361f65SGavin Atkinson # endif 62*cc361f65SGavin Atkinson # if defined(HAVE_SYS_DIR_H) 63*cc361f65SGavin Atkinson # include <sys/dir.h> 64*cc361f65SGavin Atkinson # endif 65*cc361f65SGavin Atkinson # if defined(HAVE_NDIR_H) 66*cc361f65SGavin Atkinson # include <ndir.h> 67*cc361f65SGavin Atkinson # endif 68*cc361f65SGavin Atkinson #endif 69*cc361f65SGavin Atkinson 70*cc361f65SGavin Atkinson #if defined(HAVE_SYS_IOCTL_H) 71*cc361f65SGavin Atkinson # include <sys/ioctl.h> 72*cc361f65SGavin Atkinson #endif 73*cc361f65SGavin Atkinson #if defined(HAVE_SYS_PARAM_H) 74*cc361f65SGavin Atkinson # include <sys/param.h> 75*cc361f65SGavin Atkinson #endif 76*cc361f65SGavin Atkinson #if defined(HAVE_SYS_STAT_H) 77*cc361f65SGavin Atkinson # include <sys/stat.h> 78*cc361f65SGavin Atkinson #endif 79*cc361f65SGavin Atkinson #if defined(HAVE_SYS_SYSLIMITS_H) 80*cc361f65SGavin Atkinson # include <sys/syslimits.h> 81*cc361f65SGavin Atkinson #endif 82*cc361f65SGavin Atkinson #if defined(HAVE_SYS_WAIT_H) 83*cc361f65SGavin Atkinson # include <sys/wait.h> 84*cc361f65SGavin Atkinson #endif 85*cc361f65SGavin Atkinson 86*cc361f65SGavin Atkinson #if defined(HAVE_ARPA_FTP_H) 87*cc361f65SGavin Atkinson # include <arpa/ftp.h> 88*cc361f65SGavin Atkinson #endif 89*cc361f65SGavin Atkinson 90*cc361f65SGavin Atkinson #if defined(HAVE_FCNTL_H) 91*cc361f65SGavin Atkinson # include <fcntl.h> 92*cc361f65SGavin Atkinson #endif 93*cc361f65SGavin Atkinson #if defined(HAVE_LIMITS_H) 94*cc361f65SGavin Atkinson # include <limits.h> 95*cc361f65SGavin Atkinson #endif 96*cc361f65SGavin Atkinson #if defined(HAVE_PWD_H) 97*cc361f65SGavin Atkinson # include <pwd.h> 98*cc361f65SGavin Atkinson #endif 99*cc361f65SGavin Atkinson #if defined(HAVE_SETJMP_H) 100*cc361f65SGavin Atkinson # include <setjmp.h> 101*cc361f65SGavin Atkinson #endif 102*cc361f65SGavin Atkinson #if defined(HAVE_SIGNAL_H) 103*cc361f65SGavin Atkinson # include <signal.h> 104*cc361f65SGavin Atkinson #endif 105*cc361f65SGavin Atkinson #if defined(HAVE_STDDEF_H) 106*cc361f65SGavin Atkinson # include <stddef.h> 107*cc361f65SGavin Atkinson #endif 108*cc361f65SGavin Atkinson #if defined(HAVE_TERMIOS_H) 109*cc361f65SGavin Atkinson # include <termios.h> 110*cc361f65SGavin Atkinson #endif 111*cc361f65SGavin Atkinson 112*cc361f65SGavin Atkinson #if defined(HAVE_POLL) 113*cc361f65SGavin Atkinson /* we use poll */ 114*cc361f65SGavin Atkinson #elif defined(HAVE_SELECT) 115*cc361f65SGavin Atkinson /* we use select */ 116*cc361f65SGavin Atkinson #else /* !defined(HAVE_POLL) && !defined(HAVE_SELECT) */ 117*cc361f65SGavin Atkinson # error "no poll() or select() found" 118*cc361f65SGavin Atkinson #endif 119*cc361f65SGavin Atkinson #if !defined(POLLIN) 120*cc361f65SGavin Atkinson # define POLLIN 0x0001 121*cc361f65SGavin Atkinson #endif 122*cc361f65SGavin Atkinson #if !defined(POLLOUT) 123*cc361f65SGavin Atkinson # define POLLOUT 0x0004 124*cc361f65SGavin Atkinson #endif 125*cc361f65SGavin Atkinson #if !defined(POLLRDNORM) 126*cc361f65SGavin Atkinson # define POLLRDNORM 0x0040 127*cc361f65SGavin Atkinson #endif 128*cc361f65SGavin Atkinson #if !defined(POLLWRNORM) 129*cc361f65SGavin Atkinson # define POLLWRNORM POLLOUT 130*cc361f65SGavin Atkinson #endif 131*cc361f65SGavin Atkinson #if !defined(POLLRDBAND) 132*cc361f65SGavin Atkinson # define POLLRDBAND 0x0080 133*cc361f65SGavin Atkinson #endif 134*cc361f65SGavin Atkinson #if !defined(INFTIM) 135*cc361f65SGavin Atkinson # define INFTIM -1 136*cc361f65SGavin Atkinson #endif 137*cc361f65SGavin Atkinson #if !defined(HAVE_STRUCT_POLLFD) 138*cc361f65SGavin Atkinson struct pollfd { 139*cc361f65SGavin Atkinson int fd; 140*cc361f65SGavin Atkinson short events; 141*cc361f65SGavin Atkinson short revents; 142*cc361f65SGavin Atkinson }; 143*cc361f65SGavin Atkinson #endif 144*cc361f65SGavin Atkinson 145*cc361f65SGavin Atkinson #if defined(TIME_WITH_SYS_TIME) 146*cc361f65SGavin Atkinson # include <sys/time.h> 147*cc361f65SGavin Atkinson # include <time.h> 148*cc361f65SGavin Atkinson #else 149*cc361f65SGavin Atkinson # if defined(HAVE_SYS_TIME_H) 150*cc361f65SGavin Atkinson # include <sys/time.h> 151*cc361f65SGavin Atkinson # else 152*cc361f65SGavin Atkinson # include <time.h> 153*cc361f65SGavin Atkinson # endif 154*cc361f65SGavin Atkinson #endif 155*cc361f65SGavin Atkinson 156*cc361f65SGavin Atkinson #if defined(HAVE_ERR_H) 157*cc361f65SGavin Atkinson # include <err.h> 158*cc361f65SGavin Atkinson #endif 159*cc361f65SGavin Atkinson 160*cc361f65SGavin Atkinson #if defined(USE_GLOB_H) /* not set by configure; used by other build systems */ 161*cc361f65SGavin Atkinson # include <glob.h> 162*cc361f65SGavin Atkinson #else 163*cc361f65SGavin Atkinson # include "ftpglob.h" 164*cc361f65SGavin Atkinson #endif 165*cc361f65SGavin Atkinson 166*cc361f65SGavin Atkinson #if defined(HAVE_PATHS_H) 167*cc361f65SGavin Atkinson # include <paths.h> 168*cc361f65SGavin Atkinson #endif 169*cc361f65SGavin Atkinson #if !defined(_PATH_BSHELL) 170*cc361f65SGavin Atkinson # define _PATH_BSHELL "/bin/sh" 171*cc361f65SGavin Atkinson #endif 172*cc361f65SGavin Atkinson #if !defined(_PATH_TMP) 173*cc361f65SGavin Atkinson # define _PATH_TMP "/tmp/" 174*cc361f65SGavin Atkinson #endif 175*cc361f65SGavin Atkinson 176*cc361f65SGavin Atkinson typedef struct _stringlist { 177*cc361f65SGavin Atkinson char **sl_str; 178*cc361f65SGavin Atkinson size_t sl_max; 179*cc361f65SGavin Atkinson size_t sl_cur; 180*cc361f65SGavin Atkinson } StringList; 181*cc361f65SGavin Atkinson 182*cc361f65SGavin Atkinson StringList *sl_init(void); 183*cc361f65SGavin Atkinson int sl_add(StringList *, char *); 184*cc361f65SGavin Atkinson void sl_free(StringList *, int); 185*cc361f65SGavin Atkinson char *sl_find(StringList *, char *); 186*cc361f65SGavin Atkinson 187*cc361f65SGavin Atkinson #if defined(HAVE_TERMCAP_H) 188*cc361f65SGavin Atkinson # include <termcap.h> 189*cc361f65SGavin Atkinson #else 190*cc361f65SGavin Atkinson int tgetent(char *, const char *); 191*cc361f65SGavin Atkinson char *tgetstr(const char *, char **); 192*cc361f65SGavin Atkinson int tgetflag(const char *); 193*cc361f65SGavin Atkinson int tgetnum(const char *); 194*cc361f65SGavin Atkinson char *tgoto(const char *, int, int); 195*cc361f65SGavin Atkinson void tputs(const char *, int, int (*)(int)); 196*cc361f65SGavin Atkinson #endif /* !HAVE_TERMCAP_H */ 197*cc361f65SGavin Atkinson 198*cc361f65SGavin Atkinson #if defined(HAVE_VIS_H) && defined(HAVE_STRVIS) && defined(HAVE_STRUNVIS) 199*cc361f65SGavin Atkinson # include <vis.h> 200*cc361f65SGavin Atkinson #else 201*cc361f65SGavin Atkinson # include "ftpvis.h" 202*cc361f65SGavin Atkinson #endif 203*cc361f65SGavin Atkinson 204*cc361f65SGavin Atkinson #if !defined(HAVE_IN_PORT_T) 205*cc361f65SGavin Atkinson typedef unsigned short in_port_t; 206*cc361f65SGavin Atkinson #endif 207*cc361f65SGavin Atkinson 208*cc361f65SGavin Atkinson #if !defined(HAVE_SA_FAMILY_T) 209*cc361f65SGavin Atkinson typedef unsigned short sa_family_t; 210*cc361f65SGavin Atkinson #endif 211*cc361f65SGavin Atkinson 212*cc361f65SGavin Atkinson #if !defined(HAVE_SOCKLEN_T) 213*cc361f65SGavin Atkinson typedef unsigned int socklen_t; 214*cc361f65SGavin Atkinson #endif 215*cc361f65SGavin Atkinson 216*cc361f65SGavin Atkinson #if defined(USE_INET6) 217*cc361f65SGavin Atkinson # define INET6 218*cc361f65SGavin Atkinson #endif 219*cc361f65SGavin Atkinson 220*cc361f65SGavin Atkinson #if !HAVE_DECL_AI_NUMERICHOST 221*cc361f65SGavin Atkinson 222*cc361f65SGavin Atkinson /* RFC 2553 */ 223*cc361f65SGavin Atkinson #undef EAI_ADDRFAMILY 224*cc361f65SGavin Atkinson #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 225*cc361f65SGavin Atkinson #undef EAI_AGAIN 226*cc361f65SGavin Atkinson #define EAI_AGAIN 2 /* temporary failure in name resolution */ 227*cc361f65SGavin Atkinson #undef EAI_BADFLAGS 228*cc361f65SGavin Atkinson #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 229*cc361f65SGavin Atkinson #undef EAI_FAIL 230*cc361f65SGavin Atkinson #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 231*cc361f65SGavin Atkinson #undef EAI_FAMILY 232*cc361f65SGavin Atkinson #define EAI_FAMILY 5 /* ai_family not supported */ 233*cc361f65SGavin Atkinson #undef EAI_MEMORY 234*cc361f65SGavin Atkinson #define EAI_MEMORY 6 /* memory allocation failure */ 235*cc361f65SGavin Atkinson #undef EAI_NODATA 236*cc361f65SGavin Atkinson #define EAI_NODATA 7 /* no address associated with hostname */ 237*cc361f65SGavin Atkinson #undef EAI_NONAME 238*cc361f65SGavin Atkinson #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 239*cc361f65SGavin Atkinson #undef EAI_SERVICE 240*cc361f65SGavin Atkinson #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 241*cc361f65SGavin Atkinson #undef EAI_SOCKTYPE 242*cc361f65SGavin Atkinson #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 243*cc361f65SGavin Atkinson #undef EAI_SYSTEM 244*cc361f65SGavin Atkinson #define EAI_SYSTEM 11 /* system error returned in errno */ 245*cc361f65SGavin Atkinson 246*cc361f65SGavin Atkinson /* KAME extensions? */ 247*cc361f65SGavin Atkinson #undef EAI_BADHINTS 248*cc361f65SGavin Atkinson #define EAI_BADHINTS 12 249*cc361f65SGavin Atkinson #undef EAI_PROTOCOL 250*cc361f65SGavin Atkinson #define EAI_PROTOCOL 13 251*cc361f65SGavin Atkinson #undef EAI_MAX 252*cc361f65SGavin Atkinson #define EAI_MAX 14 253*cc361f65SGavin Atkinson 254*cc361f65SGavin Atkinson /* RFC 2553 */ 255*cc361f65SGavin Atkinson #undef NI_MAXHOST 256*cc361f65SGavin Atkinson #define NI_MAXHOST 1025 257*cc361f65SGavin Atkinson #undef NI_MAXSERV 258*cc361f65SGavin Atkinson #define NI_MAXSERV 32 259*cc361f65SGavin Atkinson 260*cc361f65SGavin Atkinson #undef NI_NOFQDN 261*cc361f65SGavin Atkinson #define NI_NOFQDN 0x00000001 262*cc361f65SGavin Atkinson #undef NI_NUMERICHOST 263*cc361f65SGavin Atkinson #define NI_NUMERICHOST 0x00000002 264*cc361f65SGavin Atkinson #undef NI_NAMEREQD 265*cc361f65SGavin Atkinson #define NI_NAMEREQD 0x00000004 266*cc361f65SGavin Atkinson #undef NI_NUMERICSERV 267*cc361f65SGavin Atkinson #define NI_NUMERICSERV 0x00000008 268*cc361f65SGavin Atkinson #undef NI_DGRAM 269*cc361f65SGavin Atkinson #define NI_DGRAM 0x00000010 270*cc361f65SGavin Atkinson 271*cc361f65SGavin Atkinson /* RFC 2553 */ 272*cc361f65SGavin Atkinson #undef AI_PASSIVE 273*cc361f65SGavin Atkinson #define AI_PASSIVE 0x00000001 /* get address to use bind() */ 274*cc361f65SGavin Atkinson #undef AI_CANONNAME 275*cc361f65SGavin Atkinson #define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 276*cc361f65SGavin Atkinson 277*cc361f65SGavin Atkinson /* KAME extensions ? */ 278*cc361f65SGavin Atkinson #undef AI_NUMERICHOST 279*cc361f65SGavin Atkinson #define AI_NUMERICHOST 0x00000004 /* prevent name resolution */ 280*cc361f65SGavin Atkinson #undef AI_MASK 281*cc361f65SGavin Atkinson #define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST) 282*cc361f65SGavin Atkinson 283*cc361f65SGavin Atkinson /* RFC 2553 */ 284*cc361f65SGavin Atkinson #undef AI_ALL 285*cc361f65SGavin Atkinson #define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */ 286*cc361f65SGavin Atkinson #undef AI_V4MAPPED_CFG 287*cc361f65SGavin Atkinson #define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */ 288*cc361f65SGavin Atkinson #undef AI_ADDRCONFIG 289*cc361f65SGavin Atkinson #define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */ 290*cc361f65SGavin Atkinson #undef AI_V4MAPPED 291*cc361f65SGavin Atkinson #define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */ 292*cc361f65SGavin Atkinson 293*cc361f65SGavin Atkinson #endif /* !HAVE_DECL_AI_NUMERICHOST */ 294*cc361f65SGavin Atkinson 295*cc361f65SGavin Atkinson 296*cc361f65SGavin Atkinson #if !HAVE_DECL_AI_NUMERICHOST && !defined(HAVE_STRUCT_ADDRINFO) \ 297*cc361f65SGavin Atkinson && !defined(USE_SOCKS) 298*cc361f65SGavin Atkinson 299*cc361f65SGavin Atkinson struct addrinfo { 300*cc361f65SGavin Atkinson int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */ 301*cc361f65SGavin Atkinson int ai_family; /* PF_xxx */ 302*cc361f65SGavin Atkinson int ai_socktype; /* SOCK_xxx */ 303*cc361f65SGavin Atkinson int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 304*cc361f65SGavin Atkinson socklen_t ai_addrlen; /* length of ai_addr */ 305*cc361f65SGavin Atkinson char *ai_canonname; /* canonical name for hostname */ 306*cc361f65SGavin Atkinson struct sockaddr *ai_addr; /* binary address */ 307*cc361f65SGavin Atkinson struct addrinfo *ai_next; /* next structure in linked list */ 308*cc361f65SGavin Atkinson }; 309*cc361f65SGavin Atkinson 310*cc361f65SGavin Atkinson int getaddrinfo(const char *, const char *, 311*cc361f65SGavin Atkinson const struct addrinfo *, struct addrinfo **); 312*cc361f65SGavin Atkinson int getnameinfo(const struct sockaddr *, socklen_t, 313*cc361f65SGavin Atkinson char *, size_t, char *, size_t, int); 314*cc361f65SGavin Atkinson void freeaddrinfo(struct addrinfo *); 315*cc361f65SGavin Atkinson const char *gai_strerror(int); 316*cc361f65SGavin Atkinson 317*cc361f65SGavin Atkinson #endif /* !HAVE_DECL_AI_NUMERICHOST && !defined(HAVE_STRUCT_ADDRINFO) \ 318*cc361f65SGavin Atkinson && !defined(USE_SOCKS) */ 319*cc361f65SGavin Atkinson 320*cc361f65SGavin Atkinson #if !defined(HAVE_STRUCT_DIRENT_D_NAMLEN) 321*cc361f65SGavin Atkinson # define DIRENT_MISSING_D_NAMLEN 322*cc361f65SGavin Atkinson #endif 323*cc361f65SGavin Atkinson 324*cc361f65SGavin Atkinson #if !HAVE_DECL_H_ERRNO 325*cc361f65SGavin Atkinson extern int h_errno; 326*cc361f65SGavin Atkinson #endif 327*cc361f65SGavin Atkinson #define HAVE_H_ERRNO 1 /* XXX: an assumption for now... */ 328*cc361f65SGavin Atkinson 329*cc361f65SGavin Atkinson #if !HAVE_DECL_FCLOSE 330*cc361f65SGavin Atkinson int fclose(FILE *); 331*cc361f65SGavin Atkinson #endif 332*cc361f65SGavin Atkinson 333*cc361f65SGavin Atkinson #if !HAVE_DECL_GETPASS 334*cc361f65SGavin Atkinson char *getpass(const char *); 335*cc361f65SGavin Atkinson #endif 336*cc361f65SGavin Atkinson 337*cc361f65SGavin Atkinson #if !HAVE_DECL_OPTARG 338*cc361f65SGavin Atkinson extern char *optarg; 339*cc361f65SGavin Atkinson #endif 340*cc361f65SGavin Atkinson 341*cc361f65SGavin Atkinson #if !HAVE_DECL_OPTIND 342*cc361f65SGavin Atkinson extern int optind; 343*cc361f65SGavin Atkinson #endif 344*cc361f65SGavin Atkinson 345*cc361f65SGavin Atkinson #if !HAVE_DECL_PCLOSE 346*cc361f65SGavin Atkinson int pclose(FILE *); 347*cc361f65SGavin Atkinson #endif 348*cc361f65SGavin Atkinson 349*cc361f65SGavin Atkinson #if !HAVE_DECL_DIRNAME 350*cc361f65SGavin Atkinson char *dirname(char *); 351*cc361f65SGavin Atkinson #endif 352*cc361f65SGavin Atkinson 353*cc361f65SGavin Atkinson #if !defined(HAVE_ERR) 354*cc361f65SGavin Atkinson void err(int, const char *, ...); 355*cc361f65SGavin Atkinson void errx(int, const char *, ...); 356*cc361f65SGavin Atkinson void warn(const char *, ...); 357*cc361f65SGavin Atkinson void warnx(const char *, ...); 358*cc361f65SGavin Atkinson #endif 359*cc361f65SGavin Atkinson 360*cc361f65SGavin Atkinson #if !defined(HAVE_FGETLN) 361*cc361f65SGavin Atkinson char *fgetln(FILE *, size_t *); 362*cc361f65SGavin Atkinson #endif 363*cc361f65SGavin Atkinson 364*cc361f65SGavin Atkinson #if !defined(HAVE_FSEEKO) 365*cc361f65SGavin Atkinson int fseeko(FILE *, off_t, int); 366*cc361f65SGavin Atkinson #endif 367*cc361f65SGavin Atkinson 368*cc361f65SGavin Atkinson #if !defined(HAVE_INET_NTOP) 369*cc361f65SGavin Atkinson const char *inet_ntop(int, const void *, char *, socklen_t); 370*cc361f65SGavin Atkinson #endif 371*cc361f65SGavin Atkinson 372*cc361f65SGavin Atkinson #if !defined(HAVE_INET_PTON) 373*cc361f65SGavin Atkinson int inet_pton(int, const char *, void *); 374*cc361f65SGavin Atkinson #endif 375*cc361f65SGavin Atkinson 376*cc361f65SGavin Atkinson #if !defined(HAVE_MKSTEMP) 377*cc361f65SGavin Atkinson int mkstemp(char *); 378*cc361f65SGavin Atkinson #endif 379*cc361f65SGavin Atkinson 380*cc361f65SGavin Atkinson #if !defined(HAVE_SETPROGNAME) 381*cc361f65SGavin Atkinson const char *getprogname(void); 382*cc361f65SGavin Atkinson void setprogname(const char *); 383*cc361f65SGavin Atkinson #endif 384*cc361f65SGavin Atkinson 385*cc361f65SGavin Atkinson #if !defined(HAVE_SNPRINTF) 386*cc361f65SGavin Atkinson int snprintf(char *, size_t, const char *, ...); 387*cc361f65SGavin Atkinson #endif 388*cc361f65SGavin Atkinson 389*cc361f65SGavin Atkinson #if !defined(HAVE_STRDUP) 390*cc361f65SGavin Atkinson char *strdup(const char *); 391*cc361f65SGavin Atkinson #endif 392*cc361f65SGavin Atkinson 393*cc361f65SGavin Atkinson #if !defined(HAVE_STRERROR) 394*cc361f65SGavin Atkinson char *strerror(int); 395*cc361f65SGavin Atkinson #endif 396*cc361f65SGavin Atkinson 397*cc361f65SGavin Atkinson #if !defined(HAVE_STRPTIME) || !HAVE_DECL_STRPTIME 398*cc361f65SGavin Atkinson char *strptime(const char *, const char *, struct tm *); 399*cc361f65SGavin Atkinson #endif 400*cc361f65SGavin Atkinson 401*cc361f65SGavin Atkinson #if defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT) 402*cc361f65SGavin Atkinson # if !defined(HAVE_STRTOLL) 403*cc361f65SGavin Atkinson long long strtoll(const char *, char **, int); 404*cc361f65SGavin Atkinson # endif 405*cc361f65SGavin Atkinson # if !defined(LLONG_MIN) 406*cc361f65SGavin Atkinson # define LLONG_MIN (-0x7fffffffffffffffLL-1) 407*cc361f65SGavin Atkinson # endif 408*cc361f65SGavin Atkinson # if !defined(LLONG_MAX) 409*cc361f65SGavin Atkinson # define LLONG_MAX (0x7fffffffffffffffLL) 410*cc361f65SGavin Atkinson # endif 411*cc361f65SGavin Atkinson #else /* !(defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)) */ 412*cc361f65SGavin Atkinson # define NO_LONG_LONG 1 413*cc361f65SGavin Atkinson #endif /* !(defined(HAVE_PRINTF_LONG_LONG) && defined(HAVE_LONG_LONG_INT)) */ 414*cc361f65SGavin Atkinson 415*cc361f65SGavin Atkinson #if !defined(HAVE_TIMEGM) 416*cc361f65SGavin Atkinson time_t timegm(struct tm *); 417*cc361f65SGavin Atkinson #endif 418*cc361f65SGavin Atkinson 419*cc361f65SGavin Atkinson #if !defined(HAVE_STRLCAT) 420*cc361f65SGavin Atkinson size_t strlcat(char *, const char *, size_t); 421*cc361f65SGavin Atkinson #endif 422*cc361f65SGavin Atkinson 423*cc361f65SGavin Atkinson #if !defined(HAVE_STRLCPY) 424*cc361f65SGavin Atkinson size_t strlcpy(char *, const char *, size_t); 425*cc361f65SGavin Atkinson #endif 426*cc361f65SGavin Atkinson 427*cc361f65SGavin Atkinson #if !defined(HAVE_STRSEP) 428*cc361f65SGavin Atkinson char *strsep(char **stringp, const char *delim); 429*cc361f65SGavin Atkinson #endif 430*cc361f65SGavin Atkinson 431*cc361f65SGavin Atkinson #if !defined(HAVE_UTIMES) 432*cc361f65SGavin Atkinson int utimes(const char *, const struct timeval *); 433*cc361f65SGavin Atkinson #endif 434*cc361f65SGavin Atkinson 435*cc361f65SGavin Atkinson #if !defined(HAVE_MEMMOVE) 436*cc361f65SGavin Atkinson # define memmove(a,b,c) bcopy((b),(a),(c)) 437*cc361f65SGavin Atkinson /* XXX: add others #defines for borken systems? */ 438*cc361f65SGavin Atkinson #endif 439*cc361f65SGavin Atkinson 440*cc361f65SGavin Atkinson #if defined(HAVE_GETPASSPHRASE) 441*cc361f65SGavin Atkinson # define getpass getpassphrase 442*cc361f65SGavin Atkinson #endif 443*cc361f65SGavin Atkinson 444*cc361f65SGavin Atkinson #if !defined(MIN) 445*cc361f65SGavin Atkinson # define MIN(a, b) ((a) < (b) ? (a) : (b)) 446*cc361f65SGavin Atkinson #endif 447*cc361f65SGavin Atkinson #if !defined(MAX) 448*cc361f65SGavin Atkinson # define MAX(a, b) ((a) < (b) ? (b) : (a)) 449*cc361f65SGavin Atkinson #endif 450*cc361f65SGavin Atkinson 451*cc361f65SGavin Atkinson #if !defined(timersub) 452*cc361f65SGavin Atkinson # define timersub(tvp, uvp, vvp) \ 453*cc361f65SGavin Atkinson do { \ 454*cc361f65SGavin Atkinson (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ 455*cc361f65SGavin Atkinson (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ 456*cc361f65SGavin Atkinson if ((vvp)->tv_usec < 0) { \ 457*cc361f65SGavin Atkinson (vvp)->tv_sec--; \ 458*cc361f65SGavin Atkinson (vvp)->tv_usec += 1000000; \ 459*cc361f65SGavin Atkinson } \ 460*cc361f65SGavin Atkinson } while (0) 461*cc361f65SGavin Atkinson #endif 462*cc361f65SGavin Atkinson 463*cc361f65SGavin Atkinson #if !defined(S_ISLNK) 464*cc361f65SGavin Atkinson # define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK) 465*cc361f65SGavin Atkinson #endif 466*cc361f65SGavin Atkinson 467*cc361f65SGavin Atkinson #define EPOCH_YEAR 1970 468*cc361f65SGavin Atkinson #define SECSPERHOUR 3600 469*cc361f65SGavin Atkinson #define SECSPERDAY 86400 470*cc361f65SGavin Atkinson #define TM_YEAR_BASE 1900 471*cc361f65SGavin Atkinson 472*cc361f65SGavin Atkinson #if defined(USE_SOCKS) /* (Dante) SOCKS5 */ 473*cc361f65SGavin Atkinson #define connect Rconnect 474*cc361f65SGavin Atkinson #define bind Rbind 475*cc361f65SGavin Atkinson #define getsockname Rgetsockname 476*cc361f65SGavin Atkinson #define getpeername Rgetpeername 477*cc361f65SGavin Atkinson #define accept Raccept 478*cc361f65SGavin Atkinson #define rresvport Rrresvport 479*cc361f65SGavin Atkinson #define bindresvport Rbindresvport 480*cc361f65SGavin Atkinson #define gethostbyname Rgethostbyname 481*cc361f65SGavin Atkinson #define gethostbyname2 Rgethostbyname2 482*cc361f65SGavin Atkinson #define sendto Rsendto 483*cc361f65SGavin Atkinson #define recvfrom Rrecvfrom 484*cc361f65SGavin Atkinson #define recvfrom Rrecvfrom 485*cc361f65SGavin Atkinson #define write Rwrite 486*cc361f65SGavin Atkinson #define writev Rwritev 487*cc361f65SGavin Atkinson #define send Rsend 488*cc361f65SGavin Atkinson #define sendmsg Rsendmsg 489*cc361f65SGavin Atkinson #define read Rread 490*cc361f65SGavin Atkinson #define readv Rreadv 491*cc361f65SGavin Atkinson #define recv Rrecv 492*cc361f65SGavin Atkinson #define recvmsg Rrecvmsg 493*cc361f65SGavin Atkinson #define getaddrinfo Rgetaddrinfo 494*cc361f65SGavin Atkinson #define getipnodebyname Rgetipnodebyname 495*cc361f65SGavin Atkinson #endif /* defined(USE_SOCKS) */ 496