summaryrefslogtreecommitdiff
path: root/net/fping/files/patch-02
blob: 70bccfff7f28513c03088dd110d069c1dcca879c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
--- fping.c.orig	Mon Jan 21 02:06:30 2002
+++ fping.c	Sat Oct 25 21:33:01 2003
@@ -42,7 +42,6 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
-#define IPV6 1						/* This should be a compiler option, or even better be done from the Makefile... ;) */
 
 #ifndef _NO_PROTO
 #if !__STDC__ && !defined( __cplusplus ) && !defined( FUNCPROTO ) \
@@ -67,7 +66,7 @@
 
 /*** autoconf includes ***/
 
-
+#include <sys/types.h>
 #include <stdio.h>
 #include <errno.h>
 #include <time.h>
@@ -88,7 +87,6 @@
 #include <string.h>
 #include <stddef.h>
 
-#include <sys/types.h>
 #include <sys/time.h>
 #include <sys/socket.h>
 
@@ -112,6 +110,10 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 
+#if (defined(__unix__) || defined(unix)) && !defined(USG)
+#include <sys/param.h>
+#endif
+
 /* RS6000 has sys/select.h */
 #ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
@@ -246,13 +248,13 @@
      struct timeval       last_send_time;     /* time of last packet sent */
      int                  num_sent;           /* number of ping packets sent */
      int                  num_recv;           /* number of pings received */
-     int                  max_reply;          /* longest response time */
-     int                  min_reply;          /* shortest response time */
+     long                 max_reply;          /* longest response time */
+     long                 min_reply;          /* shortest response time */
      int                  total_time;         /* sum of response times */
      int                  num_sent_i;         /* number of ping packets sent */
      int                  num_recv_i;         /* number of pings received */
-     int                  max_reply_i;        /* longest response time */
-     int                  min_reply_i;        /* shortest response time */
+     long                 max_reply_i;        /* longest response time */
+     long                 min_reply_i;        /* shortest response time */
      int                  total_time_i;       /* sum of response times */
      int                  *resp_times;        /* individual response times */
 #if defined( DEBUG ) || defined( _DEBUG )
@@ -482,7 +484,7 @@
 
 	}/* IF */
 
-	prog = argv[0];
+	prog = (prog = strrchr(argv[0], '/')) ? prog + 1 : argv[0];
 	ident = getpid() & 0xFFFF;
 
 	verbose_flag = 1;
@@ -823,6 +825,7 @@
 
 		while( fgets( line, 132, ping_file ) )
 		{
+			line[132-1] = '\0';
 			if( sscanf( line, "%s", host ) != 1 )
 				continue;
 			
@@ -1503,7 +1506,6 @@
 	memset( buffer, 0, ping_pkt_size * sizeof( char ) );
 	icp = ( FPING_ICMPHDR* )buffer;
 
-	gettimeofday( &h->last_send_time, &tz );
 #ifndef IPV6
 	icp->icmp_type = ICMP_ECHO;
 	icp->icmp_code = 0;
@@ -1512,6 +1514,8 @@
 	icp->icmp_id = ident;
 
 	pdp = ( PING_DATA* )( buffer + SIZE_ICMP_HDR );
+	/* set the time at the very last possible point */
+	gettimeofday(&h->last_send_time,&tz);
 	pdp->ping_ts = h->last_send_time;
 	pdp->ping_count = h->num_sent;
 
@@ -1523,6 +1527,8 @@
 	icp->icmp6_id = ident;
 
 	pdp = ( PING_DATA* )( buffer + SIZE_ICMP_HDR );
+	/* set the time at the very last possible point */
+	gettimeofday(&h->last_send_time,&tz);
 	pdp->ping_ts = h->last_send_time;
 	pdp->ping_count = h->num_sent;
 
@@ -1611,6 +1617,9 @@
 
 	result = recvfrom_wto( s, buffer, sizeof(buffer), &response_addr, select_time );
 
+	/* get time of receipt as close to the real time as possible */
+	gettimeofday(&current_time,&tz);
+
 	if( result < 0 )
 		return 0;	/* timeout */
   
@@ -1625,7 +1634,7 @@
 
 	ip = ( struct ip* )buffer;
 #ifndef IPV6
-#if defined( __alpha__ ) && __STDC__ && !defined( __GLIBC__ )
+#if defined( __alpha__ ) && defined(__osf1__) && __STDC__ && !defined( __GLIBC__ )
 	/* The alpha headers are decidedly broken.
 	 * Using an ANSI compiler, it provides ip_vhl instead of ip_hl and
 	 * ip_v.  So, to get ip_hl, we mask off the bottom four bits.
@@ -1633,7 +1642,7 @@
 	hlen = ( ip->ip_vhl & 0x0F ) << 2;
 #else
 	hlen = ip->ip_hl << 2;
-#endif /* defined(__alpha__) && __STDC__ */
+#endif /* defined(__alpha__) && defined(__osf1__) && __STDC__ */
 	if( result < hlen + ICMP_MINLEN )
 #else
 	if( result < sizeof(FPING_ICMPHDR) )
@@ -1690,7 +1699,6 @@
 	h = table[n];
 
 	/* received ping is cool, so process it */
-	gettimeofday( &current_time, &tz );
 	h->waiting = 0;
 	h->timeout = timeout;
 	h->num_recv++;