From b9256054419582dc35917b1cb39c7e09f489dfad Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Fri, 28 Sep 2007 10:29:17 +0000 Subject: assorted static vars removal function old new delta tcpudpsvd_main 1829 1839 +10 update_status 567 569 +2 sigterm 1 - -1 ......... dhcprelay_signal_handler 8 - -8 nfs_strerror 60 49 -11 singlemount 4579 4564 -15 static.p 16 - -16 svstatus 20 - -20 dhcprelay_xid_list 32 - -32 runsv_main 1785 1746 -39 static.buf 74 28 -46 svd 56 - -56 dhcprelay_main 1141 1080 -61 ------------------------------------------------------------------------------ (add/remove: 0/20 grow/shrink: 2/10 up/down: 12/-386) Total: -374 bytes --- networking/udhcp/dhcprelay.c | 63 ++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 43 deletions(-) (limited to 'networking/udhcp/dhcprelay.c') diff --git a/networking/udhcp/dhcprelay.c b/networking/udhcp/dhcprelay.c index 3e1758d5c..08dc23f23 100644 --- a/networking/udhcp/dhcprelay.c +++ b/networking/udhcp/dhcprelay.c @@ -19,16 +19,16 @@ #define MAX_LIFETIME 2*60 /* lifetime of an xid entry in sec. */ #define MAX_INTERFACES 9 - /* This list holds information about clients. The xid_* functions manipulate this list. */ -static struct xid_item { +struct xid_item { + time_t timestamp; + int client; uint32_t xid; struct sockaddr_in ip; - int client; - time_t timestamp; struct xid_item *next; -} dhcprelay_xid_list = {0, {0}, 0, 0, NULL}; +}; +#define dhcprelay_xid_list (*(struct xid_item*)&bb_common_bufsiz1) static struct xid_item *xid_add(uint32_t xid, struct sockaddr_in *ip, int client) { @@ -113,17 +113,6 @@ static int get_dhcp_packet_type(struct dhcpMessage *p) return -1; } -/** - * signal_handler - handles signals ;-) - * sig - sent signal - */ -static smallint dhcprelay_stopflag; - -static void dhcprelay_signal_handler(int sig) -{ - dhcprelay_stopflag = 1; -} - /** * get_client_devices - parses the devices list * dev_list - comma separated list of devices @@ -160,27 +149,23 @@ static char **get_client_devices(char *dev_list, int *client_number) } -/* Creates listen sockets (in fds) and returns the number allocated. */ +/* Creates listen sockets (in fds) and returns numerically max fd. */ static int init_sockets(char **client, int num_clients, - char *server, int *fds, int *max_socket) + char *server, int *fds) { - int i; + int i, n; /* talk to real server on bootps */ fds[0] = listen_socket(/*INADDR_ANY,*/ 67, server); - *max_socket = fds[0]; - - /* array starts at 1 since server is 0 */ - num_clients++; + n = fds[0]; for (i = 1; i < num_clients; i++) { /* listen for clients on bootps */ fds[i] = listen_socket(/*NADDR_ANY,*/ 67, client[i-1]); - if (fds[i] > *max_socket) - *max_socket = fds[i]; + if (fds[i] > n) + n = fds[i]; } - - return i; + return n; } @@ -252,6 +237,8 @@ static void pass_back(struct dhcpMessage *p, int packet_len, int *fds) xid_del(p->xid); } +static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **clients, + struct sockaddr_in *server_addr, uint32_t gw_ip) ATTRIBUTE_NORETURN; static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **clients, struct sockaddr_in *server_addr, uint32_t gw_ip) { @@ -263,7 +250,7 @@ static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **cli struct timeval tv; int i; - while (!dhcprelay_stopflag) { + while (1) { FD_ZERO(&rfds); for (i = 0; i < num_sockets; i++) FD_SET(fds[i], &rfds); @@ -298,7 +285,7 @@ static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **cli int dhcprelay_main(int argc, char **argv); int dhcprelay_main(int argc, char **argv) { - int i, num_sockets, max_socket, fds[MAX_INTERFACES]; + int num_sockets, max_socket, fds[MAX_INTERFACES]; uint32_t gw_ip; char **clients; struct sockaddr_in server_addr; @@ -316,23 +303,13 @@ int dhcprelay_main(int argc, char **argv) clients = get_client_devices(argv[1], &num_sockets); if (!clients) return 0; - signal(SIGTERM, dhcprelay_signal_handler); - signal(SIGQUIT, dhcprelay_signal_handler); - signal(SIGINT, dhcprelay_signal_handler); - - num_sockets = init_sockets(clients, num_sockets, argv[2], fds, &max_socket); + num_sockets++; /* for server socket at fds[0] */ + max_socket = init_sockets(clients, num_sockets, argv[2], fds); if (read_interface(argv[2], NULL, &gw_ip, NULL)) return 1; + /* doesn't return */ dhcprelay_loop(fds, num_sockets, max_socket, clients, &server_addr, gw_ip); - - if (ENABLE_FEATURE_CLEAN_UP) { - for (i = 0; i < num_sockets; i++) { - close(fds[i]); - free(clients[i]); - } - } - - return 0; + /* return 0; - not reached */ } -- cgit v1.2.3