summaryrefslogtreecommitdiff
path: root/net/fping/files/patch-02
blob: 7abea3fea2f20c1b6be1ad49ee3784858a7045e5 (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
--- fping.c.orig	Mon Jan 21 01:06:30 2002
+++ fping.c	Sun Jul  7 22:12:31 2002
@@ -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 ) \
@@ -112,6 +111,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 +249,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 +485,7 @@
 
 	}/* IF */
 
-	prog = argv[0];
+	prog = (prog = strrchr(argv[0], '/')) ? prog + 1 : argv[0];
 	ident = getpid() & 0xFFFF;
 
 	verbose_flag = 1;
@@ -823,6 +826,7 @@
 
 		while( fgets( line, 132, ping_file ) )
 		{
+			line[132-1] = '\0';
 			if( sscanf( line, "%s", host ) != 1 )
 				continue;
 			
@@ -1503,7 +1507,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 +1515,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 +1528,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 +1618,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 +1635,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 +1643,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 +1700,6 @@
 	h = table[n];
 
 	/* received ping is cool, so process it */
-	gettimeofday( &current_time, &tz );
 	h->waiting = 0;
 	h->timeout = timeout;
 	h->num_recv++;