Even more portability work...

This commit is contained in:
hpa 2001-11-12 06:46:56 +00:00
parent 5b21a932a6
commit 3df5c1f25c
9 changed files with 100 additions and 32 deletions

18
aclocal.m4 vendored
View file

@ -31,6 +31,24 @@ AC_DEFUN(PA_SIGSETJMP,
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
$2)]) $2)])
dnl --------------------------------------------------------------------------
dnl PA_HAVE_LONG_LONG
dnl
dnl Does the C compiler support long long?
dnl --------------------------------------------------------------------------
AC_DEFUN(PA_HAVE_LONG_LONG,
[AC_MSG_CHECKING([if C compiler supports long long])
AC_TRY_LINK(
[],
[long long foo = 1LL;
unsigned long long bar = 1ULL;
return (int)(foo-bar);
],
AC_MSG_RESULT([yes])
$1,
AC_MSG_RESULT([no])
$2)])
dnl -------------------------------------------------------------------------- dnl --------------------------------------------------------------------------
dnl PA_MSGHDR_MSG_CONTROL dnl PA_MSGHDR_MSG_CONTROL
dnl dnl

View file

@ -28,4 +28,30 @@
#undef HAVE_STRINGS_H #undef HAVE_STRINGS_H
#undef HAVE_LIBGEN_H #undef HAVE_LIBGEN_H
#undef HAVE_SYS_FILIO_H #undef HAVE_SYS_FILIO_H
#undef HAVE_INTTYPES_H
#undef HAVE_LONG_LONG
#undef WITH_REGEX #undef WITH_REGEX
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#else
#ifdef HAVE_LONG_LONG
typedef long long intmax_t;
typedef unsigned long long uintmax_t;
#define PRIdMAX "%Ld"
#define PRIuMAX "%Lu"
#define PRIxMAX "%Lx"
#define INTMAX_C(x) (x##LL)
#define UINTMAX_C(x) (x##ULL)
#define strtoumax(p,e,b) strtoull(p,e,b)
#else
typedef long intmax_t;
typedef unsigned long uintmax_t;
#define PRIdMAX "%ld"
#define PRIuMAX "%lu"
#define PRIxMAX "%lx"
#define INTMAX_C(x) (x##L)
#define UINTMAX_C(x) (x##UL)
#define strtoumax(p,e,b) strtoul(p,e,b)
#endif
#endif

View file

@ -11,8 +11,8 @@ AC_PROG_CC
AC_C_CONST AC_C_CONST
AC_C_INLINE AC_C_INLINE
PA_ADD_CFLAGS(-Wall)
PA_ADD_CFLAGS(-W) PA_ADD_CFLAGS(-W)
PA_ADD_CFLAGS(-Wall)
PA_ADD_CFLAGS(-Wpointer-arith) PA_ADD_CFLAGS(-Wpointer-arith)
PA_ADD_CFLAGS(-Wbad-function-cast) PA_ADD_CFLAGS(-Wbad-function-cast)
PA_ADD_CFLAGS(-Wcast-equal) PA_ADD_CFLAGS(-Wcast-equal)
@ -22,11 +22,15 @@ PA_ADD_CFLAGS(-Wmissing-declarations)
PA_ADD_CFLAGS(-Wnested-externs) PA_ADD_CFLAGS(-Wnested-externs)
PA_ADD_CFLAGS(-Winline) PA_ADD_CFLAGS(-Winline)
PA_ADD_CFLAGS(-Wwrite-strings) PA_ADD_CFLAGS(-Wwrite-strings)
PA_ADD_CFLAGS(-Wundef)
PA_ADD_CFLAGS(-Wshadow)
PA_ADD_CFLAGS(-Wsign-compare)
PA_ADD_CFLAGS(-pipe) PA_ADD_CFLAGS(-pipe)
AC_CHECK_HEADERS(sysexits.h) AC_CHECK_HEADERS(sysexits.h)
AC_CHECK_HEADERS(strings.h) AC_CHECK_HEADERS(strings.h)
AC_CHECK_HEADERS(libgen.h) AC_CHECK_HEADERS(libgen.h)
AC_CHECK_HEADERS(inttypes.h)
AC_CHECK_HEADERS(sys/filio.h) AC_CHECK_HEADERS(sys/filio.h)
AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR(socket library not found)]) AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR(socket library not found)])
@ -64,6 +68,7 @@ PA_WITH_BOOL(remap, 1,
],:) ],:)
PA_SIGSETJMP([AC_DEFINE(HAVE_SIGSETJMP)]) PA_SIGSETJMP([AC_DEFINE(HAVE_SIGSETJMP)])
PA_HAVE_LONG_LONG([AC_DEFINE(HAVE_LONG_LONG)])
LIBXTRA=false LIBXTRA=false
AC_SEARCH_LIBS(xmalloc, iberty, , LIBXTRA=true LIBOBJS="$LIBOBJS xmalloc.o") AC_SEARCH_LIBS(xmalloc, iberty, , LIBXTRA=true LIBOBJS="$LIBOBJS xmalloc.o")

View file

@ -11,6 +11,7 @@ tftp: $(OBJS)
$(OBJS): tftpsubs.h $(OBJS): tftpsubs.h
install: tftp install: tftp
mkdir -p $(INSTALLROOT)$(BINDIR) $(INSTALLROOT)$(MANDIR)/man1
$(INSTALL_PROGRAM) -s tftp $(INSTALLROOT)$(BINDIR) $(INSTALL_PROGRAM) -s tftp $(INSTALLROOT)$(BINDIR)
$(INSTALL_DATA) tftp.1 $(INSTALLROOT)$(MANDIR)/man1 $(INSTALL_DATA) tftp.1 $(INSTALLROOT)$(MANDIR)/man1

View file

@ -349,7 +349,6 @@ put(int argc, char *argv[])
} }
targ = argv[argc - 1]; targ = argv[argc - 1];
if (strchr(argv[argc - 1], ':')) { if (strchr(argv[argc - 1], ':')) {
char *cp;
struct hostent *hp; struct hostent *hp;
for (n = 1; n < argc - 1; n++) for (n = 1; n < argc - 1; n++)

View file

@ -16,6 +16,7 @@ tftpsubs.h:
$(OBJS): tftpsubs.h $(OBJS): tftpsubs.h
install: tftpd install: tftpd
mkdir -p $(INSTALLROOT)$(SBINDIR) $(INSTALLROOT)$(MANDIR)/man8
$(INSTALL_PROGRAM) tftpd $(INSTALLROOT)$(SBINDIR)/in.tftpd $(INSTALL_PROGRAM) tftpd $(INSTALLROOT)$(SBINDIR)/in.tftpd
$(INSTALL_DATA) tftpd.8 $(INSTALLROOT)$(MANDIR)/man8/in.tftpd.8 $(INSTALL_DATA) tftpd.8 $(INSTALLROOT)$(MANDIR)/man8/in.tftpd.8
ln -sf in.tftpd.8 $(INSTALLROOT)$(MANDIR)/man8/tftpd.8 ln -sf in.tftpd.8 $(INSTALLROOT)$(MANDIR)/man8/tftpd.8

View file

@ -26,13 +26,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include "../config.h"
#include "recvfrom.h"
#ifdef HAVE_STRINGS_H #ifdef HAVE_STRINGS_H
#include <strings.h> #include <strings.h>
#endif #endif
#include "../config.h"
#include "recvfrom.h"
#include "tftpsubs.h"
#if defined(HAVE_RECVMSG) && defined(HAVE_MSGHDR_MSG_CONTROL) #if defined(HAVE_RECVMSG) && defined(HAVE_MSGHDR_MSG_CONTROL)
#include <sys/uio.h> #include <sys/uio.h>

View file

@ -295,7 +295,7 @@ char *rewrite_string(const char *input, const struct rule *rules, int is_put)
if ( ruleptr->rule_flags & RULE_ABORT ) { if ( ruleptr->rule_flags & RULE_ABORT ) {
if ( verbosity >= 3 ) { if ( verbosity >= 3 ) {
syslog(LOG_INFO, "remap: rule %d: abort", syslog(LOG_INFO, "remap: rule %d: abort: %s",
ruleptr->nrule, current); ruleptr->nrule, current);
} }
free(current); free(current);

View file

@ -201,12 +201,12 @@ main(int argc, char **argv)
int n; int n;
int on = 1; int on = 1;
int fd = 0; int fd = 0;
int listen = 0; /* Standalone (listen) mode */ int standalone = 0; /* Standalone (listen) mode */
char *address = NULL; /* Address to listen to */ char *address = NULL; /* Address to listen to */
int pid; int pid;
int c; int c;
int setrv; int setrv;
int timeout = 900; /* Default timeout */ int waittime = 900; /* Default time to wait for a connect*/
const char *user = "nobody"; /* Default user */ const char *user = "nobody"; /* Default user */
char *p; char *p;
#ifdef WITH_REGEX #ifdef WITH_REGEX
@ -229,13 +229,13 @@ main(int argc, char **argv)
secure = 1; secure = 1;
break; break;
case 'l': case 'l':
listen = 1; standalone = 1;
break; break;
case 'a': case 'a':
address = optarg; address = optarg;
break; break;
case 't': case 't':
timeout = atoi(optarg); waittime = atoi(optarg);
break; break;
case 'u': case 'u':
user = optarg; user = optarg;
@ -307,7 +307,7 @@ main(int argc, char **argv)
#endif #endif
/* If we're running standalone, set up the input port */ /* If we're running standalone, set up the input port */
if ( listen ) { if ( standalone ) {
fd = socket(PF_INET, SOCK_DGRAM, 0); fd = socket(PF_INET, SOCK_DGRAM, 0);
memset(&bindaddr, 0, sizeof bindaddr); memset(&bindaddr, 0, sizeof bindaddr);
@ -376,7 +376,11 @@ main(int argc, char **argv)
} }
/* This means we don't want to wait() for children */ /* This means we don't want to wait() for children */
#ifdef SA_NOCLDWAIT
set_signal(SIGCHLD, SIG_IGN, SA_NOCLDSTOP|SA_NOCLDWAIT);
#else
set_signal(SIGCHLD, SIG_IGN, SA_NOCLDSTOP); set_signal(SIGCHLD, SIG_IGN, SA_NOCLDSTOP);
#endif
/* Take SIGHUP and use it to set a variable. This /* Take SIGHUP and use it to set a variable. This
is polled synchronously to make sure we don't is polled synchronously to make sure we don't
@ -385,12 +389,12 @@ main(int argc, char **argv)
while ( 1 ) { while ( 1 ) {
fd_set readset; fd_set readset;
struct timeval tv_timeout; struct timeval tv_waittime;
int rv; int rv;
if ( caught_sighup ) { if ( caught_sighup ) {
caught_sighup = 0; caught_sighup = 0;
if ( listen ) { if ( standalone ) {
#ifdef HAVE_REGEX #ifdef HAVE_REGEX
if ( rewrite_file ) { if ( rewrite_file ) {
freerules(rewrite_rules); freerules(rewrite_rules);
@ -405,11 +409,11 @@ main(int argc, char **argv)
FD_ZERO(&readset); FD_ZERO(&readset);
FD_SET(fd, &readset); FD_SET(fd, &readset);
tv_timeout.tv_sec = timeout; tv_waittime.tv_sec = waittime;
tv_timeout.tv_usec = 0; tv_waittime.tv_usec = 0;
/* Never time out if we're in listen mode */ /* Never time out if we're in standalone mode */
rv = select(fd+1, &readset, NULL, NULL, listen ? NULL : &tv_timeout); rv = select(fd+1, &readset, NULL, NULL, standalone ? NULL : &tv_waittime);
if ( rv == -1 && errno == EINTR ) if ( rv == -1 && errno == EINTR )
continue; /* Signal caught, reloop */ continue; /* Signal caught, reloop */
if ( rv == -1 ) { if ( rv == -1 ) {
@ -424,7 +428,7 @@ main(int argc, char **argv)
(struct sockaddr *)&from, &fromlen, (struct sockaddr *)&from, &fromlen,
&myaddr); &myaddr);
if ( listen && myaddr.sin_addr.s_addr == INADDR_ANY ) { if ( standalone && myaddr.sin_addr.s_addr == INADDR_ANY ) {
/* myrecvfrom() didn't capture the source address; but we might /* myrecvfrom() didn't capture the source address; but we might
have bound to a specific address, if so we should use it */ have bound to a specific address, if so we should use it */
memcpy(&myaddr.sin_addr, &bindaddr.sin_addr, sizeof bindaddr.sin_addr); memcpy(&myaddr.sin_addr, &bindaddr.sin_addr, sizeof bindaddr.sin_addr);
@ -651,9 +655,12 @@ int
set_blksize(char *val, char **ret) set_blksize(char *val, char **ret)
{ {
static char b_ret[6]; static char b_ret[6];
unsigned int sz = atoi(val); unsigned int sz;
char *vend;
if ( blksize_set ) sz = (unsigned int)strtoul(val, &vend, 10);
if ( blksize_set || *vend )
return 0; return 0;
if (sz < 8) if (sz < 8)
@ -676,9 +683,12 @@ int
set_blksize2(char *val, char **ret) set_blksize2(char *val, char **ret)
{ {
static char b_ret[6]; static char b_ret[6];
unsigned int sz = atoi(val); unsigned int sz;
char *vend;
if ( blksize_set ) sz = (unsigned int)strtoul(val, &vend, 10);
if ( blksize_set || *vend )
return 0; return 0;
if (sz < 8) if (sz < 8)
@ -711,15 +721,19 @@ set_blksize2(char *val, char **ret)
int int
set_tsize(char *val, char **ret) set_tsize(char *val, char **ret)
{ {
static char b_ret[sizeof(off_t)*CHAR_BIT/3+2]; static char b_ret[sizeof(uintmax_t)*CHAR_BIT/3+2];
off_t sz = atol(val); uintmax_t sz;
char *vend;
if ( !tsize_ok ) sz = strtoumax(val, &vend, 10);
if ( !tsize_ok || *vend )
return 0; return 0;
if (sz == 0) if (sz == 0)
sz = tsize; sz = (uintmax_t)tsize;
sprintf(*ret = b_ret, "%lu", sz);
sprintf(*ret = b_ret, "%"PRIuMAX, sz);
return(1); return(1);
} }
@ -730,9 +744,12 @@ int
set_timeout(char *val, char **ret) set_timeout(char *val, char **ret)
{ {
static char b_ret[4]; static char b_ret[4];
unsigned long to = atol(val); unsigned long to;
char *vend;
if ( to < 1 || to > 255 ) to = strtoul(val, &vend, 10);
if ( to < 1 || to > 255 || *vend )
return 0; return 0;
timeout = to; timeout = to;