From: Roger Wolff Date: Thu, 13 Jan 2005 00:00:00 +0000 (+0000) Subject: mtr v0.69 X-Git-Tag: v0.69^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7dc45b525f62abafaaae4c4e4f2e67bbd32ceed;p=thirdparty%2Fmtr.git mtr v0.69 - make distclean should now also remove "rej" files. - Antonio Querubin: update getopt.h . More cleanups using new infrastructure. - rcw: Fixed IPV6 support: When compiled in an IPV6-supporting environment, but when the kernel doesn't support IPV6, mtr would fail to start. source: ftp://ftp.bitwizard.nl/mtr/mtr-0.69.tar.gz --- diff --git a/NEWS b/NEWS index 529ffd7..4ba70ed 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,10 @@ WHAT'S NEW? + v0.69 make distclean should now also remove "rej" files. + Antonio Querubin: update getopt.h . More cleanups using + new infrastructure. + rcw: Fixed IPV6 support: When compiled in an IPV6-supporting + environment, but when the kernel doesn't support IPV6, mtr would + fail to start. v0.68 included some old patches. included patch from Antonio Querubin for better IPV6 support restructured some more whitespace. diff --git a/configure.in b/configure.in index 9e52a31..629f643 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ AC_INIT(mtr.c) -AM_INIT_AUTOMAKE(mtr, 0.68) +AM_INIT_AUTOMAKE(mtr, 0.69) AC_SUBST(GTK_OBJ) diff --git a/getopt.h b/getopt.h index 2f26893..8dd3498 100644 --- a/getopt.h +++ b/getopt.h @@ -1,22 +1,50 @@ /* Declarations for getopt. - Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + Copyright (C) 1989-1994,1996-1999,2001,2003,2004 + Free Software Foundation, Inc. + This file is part of the GNU C Library. - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ #ifndef _GETOPT_H + +#ifndef __need_getopt #define _GETOPT_H 1 +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include , but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include , which will pull in for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif #ifdef __cplusplus extern "C" { @@ -36,7 +64,7 @@ extern char *optarg; On entry to `getopt', zero means this is the first call; initialize. - When `getopt' returns EOF, this is the index of the first of the + When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next @@ -53,6 +81,7 @@ extern int opterr; extern int optopt; +#ifndef __need_getopt /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is @@ -76,11 +105,7 @@ extern int optopt; struct option { -#if defined (__STDC__) && __STDC__ const char *name; -#else - char *name; -#endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; @@ -93,37 +118,60 @@ struct option #define no_argument 0 #define required_argument 1 #define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `--', then non-option arguments are treated as + arguments to the option '\0'. This behavior is specific to the GNU + `getopt'. */ -#if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW; #else /* not __GNU_LIBRARY__ */ -extern int getopt (void); +extern int getopt (); #endif /* __GNU_LIBRARY__ */ -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (void); -extern int getopt_long (void); -extern int getopt_long_only (void); - -extern int _getopt_internal (void); -#endif /* __STDC__ */ + +#ifndef __need_getopt +extern int getopt_long (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; +extern int getopt_long_only (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; + +#endif #ifdef __cplusplus } #endif -#endif /* _GETOPT_H */ +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ diff --git a/net.c b/net.c index 22861a7..1905ae3 100644 --- a/net.c +++ b/net.c @@ -729,8 +729,6 @@ int net_preopen(void) return -1; #ifdef ENABLE_IPV6 sendsock6 = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); - if (sendsock6 < 0) - return -1; #endif #ifdef IP_HDRINCL @@ -747,8 +745,6 @@ int net_preopen(void) return -1; #ifdef ENABLE_IPV6 recvsock6 = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); - if (recvsock6 < 0) - return -1; #endif return 0; @@ -779,6 +775,10 @@ int net_open(struct hostent * host) break; #ifdef ENABLE_IPV6 case AF_INET6: + if (sendsock6 < 0 || recvsock6 < 0) { + fprintf( stderr, "Could not open IPv6 socket\n" ); + exit( EXIT_FAILURE ); + } sendsock = sendsock6; recvsock = recvsock6; addrcpy( (void *) &(rsa6->sin6_addr), host->h_addr, AF_INET6 ); diff --git a/net.h b/net.h index db43973..2fc4897 100644 --- a/net.h +++ b/net.h @@ -39,11 +39,7 @@ void net_process_return(void); int net_max(void); int net_min(void); int net_last(int at); -#ifdef ENABLE_IPV6 -struct in6_addr * net_addr(int at); -#else -struct in_addr * net_addr(int at); -#endif +ip_t * net_addr(int at); int net_loss(int at); int net_drop(int at); int net_last(int at); @@ -56,11 +52,7 @@ int net_jitter(int at); int net_jworst(int at); int net_javg(int at); int net_jinta(int at); -#ifdef ENABLE_IPV6 -struct in6_addr * net_addrs(int at, int i); -#else -struct in_addr * net_addrs(int at, int i); -#endif +ip_t * net_addrs(int at, int i); char *net_localaddr(void); int net_send_batch(void); @@ -124,8 +116,4 @@ extern int fld_index[]; extern unsigned char fld_active[]; extern char available_options[]; -#ifdef ENABLE_IPV6 -struct in6_addr unspec_addr; -#else -struct in_addr unspec_addr; -#endif +ip_t unspec_addr; diff --git a/raw.h b/raw.h index 4020e5a..06f6b88 100644 --- a/raw.h +++ b/raw.h @@ -21,8 +21,4 @@ /* Prototypes for raw.c */ void raw_rawping(int host, int msec); -#ifdef ENABLE_IPV6 -void raw_rawhost(int host, struct in6_addr * addr); -#else -void raw_rawhost(int host, struct in_addr * addr); -#endif +void raw_rawhost(int host, ip_t * addr);