NETSTAT(1): Initialize global variables

Use BSD program lock.
This commit is contained in:
Sebastian Huber 2013-10-30 15:42:53 +01:00
parent 5898fa13a3
commit 6da9b2397b
4 changed files with 64 additions and 22 deletions

View File

@ -306,7 +306,6 @@ void
protopr(u_long off, const char *name, int af1, int proto)
{
int istcp;
static int first = 1;
char *buf;
const char *vchar;
struct tcpcb *tp = NULL;
@ -394,7 +393,7 @@ protopr(u_long off, const char *name, int af1, int proto)
))
continue;
if (first) {
if (!protopr_initialized) {
if (!Lflag) {
printf("Active Internet connections");
if (aflag)
@ -424,7 +423,7 @@ protopr(u_long off, const char *name, int af1, int proto)
else
printf("(state)\n");
}
first = 0;
protopr_initialized = 1;
}
if (Lflag && so->so_qlimit == 0)
continue;
@ -913,7 +912,7 @@ arp_stats(u_long off, const char *name, int af1 __unused, int proto __unused)
static const char *icmpnames[ICMP_MAXTYPE + 1] = {
static const char *const icmpnames[ICMP_MAXTYPE + 1] = {
"echo reply", /* RFC 792 */
"#1",
"#2",

View File

@ -364,13 +364,54 @@ int af; /* address family */
int live; /* true if we are examining a live system */
#ifdef __rtems__
int protopr_initialized;
int do_rtent;
struct radix_node_head **rt_tables;
static int main(int argc, char *argv[]);
int rtems_bsd_command_netstat(int argc, char *argv[])
{
noutputs = 0;
int exit_code;
return rtems_bsd_program_call_main("netstat", main, argc, argv);
rtems_bsd_program_lock();
Aflag = 0;
aflag = 0;
bflag = 0;
dflag = 0;
gflag = 0;
hflag = 0;
iflag = 0;
Lflag = 0;
mflag = 0;
noutputs = 0;
numeric_addr = 0;
numeric_port = 0;
pflag = 0;
rflag = 0;
sflag = 0;
tflag = 0;
Wflag = 0;
xflag = 0;
zflag = 0;
interval = 0;
interface = 0;
unit = 0;
af = 0;
live = 0;
protopr_initialized = 0;
do_rtent = 0;
exit_code = rtems_bsd_program_call_main("netstat", main, argc, argv);
free(rt_tables);
rt_tables = NULL;
rtems_bsd_program_unlock();
return exit_code;
}
#endif /* __rtems__ */
int

View File

@ -36,6 +36,12 @@
#include <sys/cdefs.h>
#ifdef __rtems__
#define rt_tables netstat_rt_tables
#define routename rtems_shell_netstats_routername
#define netname rtems_shell_netstats_netname
#define sotoxsocket rtems_shell_netstats_sotoxsocket
#endif /* __rtems__ */
extern int Aflag; /* show addresses of protocol control block */
extern int aflag; /* show all sockets (including servers) */
extern int bflag; /* show i/f total bytes in/out */
@ -62,6 +68,11 @@ extern int unit; /* unit number for above */
extern int af; /* address family */
extern int live; /* true if we are examining a live system */
#ifdef __rtems__
extern int protopr_initialized;
extern int do_rtent;
extern struct radix_node_head **rt_tables;
#endif /* __rtems__ */
int kread(u_long addr, void *buf, size_t size);
const char *plural(uintmax_t);
@ -126,13 +137,6 @@ char *ipx_phost(struct sockaddr *);
char *ns_phost(struct sockaddr *);
void upHex(char *);
#ifdef __rtems__
#define rt_tables netstat_rt_tables
#define routename rtems_shell_netstats_routername
#define netname rtems_shell_netstats_netname
#define sotoxsocket rtems_shell_netstats_sotoxsocket
#endif
char *routename(in_addr_t);
char *netname(in_addr_t, u_long);
char *atalk_print(struct sockaddr *, int);

View File

@ -126,16 +126,14 @@ typedef union {
static sa_u pt_u;
int fibnum;
int do_rtent = 0;
struct rtentry rtentry;
struct radix_node rnode;
struct radix_mask rmask;
struct radix_node_head **rt_tables;
static int fibnum;
static struct rtentry rtentry;
static struct radix_node rnode;
static struct radix_mask rmask;
int NewTree = 0;
static const int NewTree = 0;
struct timespec uptime;
static struct timespec uptime;
static struct sockaddr *kgetsa(struct sockaddr *);
static void size_cols(int ef, struct radix_node *rn);
@ -493,7 +491,7 @@ again:
}
}
char nbuf[20];
static char nbuf[20];
static void
p_rtnode(void)