openbsd-ports/net/netatalk/patches/patch-binaecho-aechoc

195 lines
5.1 KiB
Plaintext

--- bin/aecho/aecho.c.orig Sun Oct 20 07:13:18 1996
+++ bin/aecho/aecho.c Wed Nov 10 13:57:25 1999
@@ -29,10 +29,13 @@
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/time.h>
-#include <sys/errno.h>
+#include <errno.h>
#include <signal.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#include <netdb.h>
#include <netatalk/endian.h>
@@ -44,7 +47,28 @@
struct sockaddr_at target;
int s, nsent = 0, nrecv = 0;
-long totalms = 0, minms = -1, maxms = -1;
+time_t totalms = 0, minms = -1, maxms = -1;
+static unsigned int count = 0;
+void usage();
+int atalk_aton();
+
+#if !defined( ibm032 ) && !defined( _IBMR2 )
+ void
+#endif ibm032 _IBMR2
+finish()
+{
+ if ( nsent > 0 ) {
+ printf( "\n----%d.%d AEP Statistics----\n",
+ ntohs( target.sat_addr.s_net ), target.sat_addr.s_node );
+ printf( "%d packets sent, %d packets received, %d%% packet loss\n",
+ nsent, nrecv, (( nsent - nrecv ) * 100 ) / nsent );
+ if ( nrecv > 0 ) {
+ printf( "round-trip (ms) min/avg/max = %d/%d/%d\n",
+ minms, totalms / nrecv, maxms );
+ }
+ }
+ exit( 0 );
+}
#if !defined( ibm032 ) && !defined( _IBMR2 )
void
@@ -58,7 +82,7 @@
p = buf;
*p++ = DDPTYPE_AEP;
*p++ = AEPOP_REQUEST;
- bcopy( &seq, p, sizeof( unsigned int ));
+ memcpy( p, &seq, sizeof( unsigned int ));
p += sizeof( unsigned int );
seq++;
@@ -66,7 +90,7 @@
perror( "gettimeofday" );
exit( 1 );
}
- bcopy( &tv, p, sizeof( struct timeval ));
+ memcpy( p, &tv, sizeof( struct timeval ));
p += sizeof( struct timeval );
if ( sendto( s, buf, p - buf, 0, (struct sockaddr *) &target,
@@ -75,26 +99,10 @@
exit( 1 );
}
nsent++;
+ if (count && nsent > count) finish();
}
-#if !defined( ibm032 ) && !defined( _IBMR2 )
- void
-#endif ibm032 _IBMR2
-done()
-{
- if ( nsent > 0 ) {
- printf( "\n----%d.%d AEP Statistics----\n",
- ntohs( target.sat_addr.s_net ), target.sat_addr.s_node );
- printf( "%d packets sent, %d packets received, %d%% packet loss\n",
- nsent, nrecv, (( nsent - nrecv ) * 100 ) / nsent );
- if ( nrecv > 0 ) {
- printf( "round-trip (ms) min/avg/max = %d/%d/%d\n",
- minms, totalms / nrecv, maxms );
- }
- }
- exit( 0 );
-}
-
+int
main( ac, av )
int ac;
char **av;
@@ -106,14 +114,29 @@
struct timeval tv, atv;
struct nbpnve nn;
char *obj = NULL, *type = "Workstation", *zone = "*";
- int satlen, cc;
- unsigned int seq;
- long ms;
+ int cc;
+ unsigned int satlen, seq;
+ time_t ms;
char buf[ 1024 ], *p;
unsigned char port;
- extern int errno;
+ extern char *optarg;
+ extern int optind;
- if ( ac != 2 ) usage( av[ 0 ] );
+ while (( cc = getopt( ac, av, "c:" )) != EOF ) {
+ switch ( cc ) {
+ case 'c' :
+ count = atoi( optarg );
+ break;
+
+ default :
+ usage( av[ 0 ] );
+ exit( 1 );
+ }
+ }
+ if ( ac - optind != 1 ) {
+ usage( av[ 0 ] );
+ exit( 1 );
+ }
/*
* Save the port, since nbp_lookup calls getservbyname() to get the
@@ -125,21 +148,21 @@
}
port = ntohs( se->s_port );
- bzero( &target, sizeof( struct sockaddr_at ));
+ memset( &target, 0, sizeof( struct sockaddr_at ));
#ifdef BSD4_4
target.sat_len = sizeof( struct sockaddr_at );
#endif BSD4_4
target.sat_family = AF_APPLETALK;
- if ( !atalk_aton( av[ 1 ], &target.sat_addr )) {
- if ( nbp_name( av[ 1 ], &obj, &type, &zone ) || !obj ) {
- fprintf( stderr, "Bad name: %s\n", av[ 1 ] );
+ if ( !atalk_aton( av[ optind ], &target.sat_addr )) {
+ if ( nbp_name( av[ optind ], &obj, &type, &zone ) || !obj ) {
+ fprintf( stderr, "Bad name: %s\n", av[ optind ] );
exit( 1 );
}
if ( nbp_lookup( obj, type, zone, &nn, 1 ) <= 0 ) {
- fprintf( stderr, "Can't find: %s\n", av[ 1 ] );
+ fprintf( stderr, "Can't find: %s\n", av[ optind ] );
exit( 1 );
}
- bcopy( &nn.nn_sat, &target, sizeof( struct sockaddr_at ));
+ memcpy( &target, &nn.nn_sat, sizeof( struct sockaddr_at ));
}
target.sat_port = port;
@@ -157,7 +180,7 @@
exit( 1 );
}
- sv.sa_handler = done;
+ sv.sa_handler = finish;
sigemptyset( &sv.sa_mask );
sigaddset( &sv.sa_mask, SIGALRM );
sv.sa_flags = SA_RESTART;
@@ -197,9 +220,9 @@
perror( "gettimeofday" );
exit( 1 );
}
- bcopy( p, &seq, sizeof( unsigned int ));
+ memcpy( &seq, p, sizeof( unsigned int ));
p += sizeof( unsigned int );
- bcopy( p, &atv, sizeof( struct timeval ));
+ memcpy( &atv, p, sizeof( struct timeval ));
nrecv++;
ms = ( tv.tv_sec - atv.tv_sec ) * 1000 +
( tv.tv_usec - atv.tv_usec ) / 1000;
@@ -213,11 +236,14 @@
printf( "%d bytes from %u.%u: aep_seq=%d. time=%d. ms\n",
cc, ntohs( sat.sat_addr.s_net ), sat.sat_addr.s_node,
seq, ms );
+ if (count && seq + 1 >= count) finish();
}
}
+void
usage( av0 )
+ char *av0;
{
- fprintf( stderr, "Usage:\t%s ( addr | nbpname )\n", av0 );
+ fprintf( stderr, "Usage:\t%s [-c count ] ( addr | nbpname )\n", av0 );
exit( 1 );
}