diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-18 16:30:27 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-31 13:18:49 +0100 |
commit | 60618d533258db42d17323d66550ea333cde1369 (patch) | |
tree | 7900d2dea7e291bc047b3d27c5738d0d0aa88472 /freebsd/sbin/ifconfig | |
parent | IFCONFIG(8): Fix isdigit() and isprint() usage (diff) | |
download | rtems-libbsd-60618d533258db42d17323d66550ea333cde1369.tar.bz2 |
IFCONFIG(8): Initialize global variables in ctors
Diffstat (limited to 'freebsd/sbin/ifconfig')
-rw-r--r-- | freebsd/sbin/ifconfig/af_atalk.c | 8 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/af_inet.c | 8 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/af_inet6.c | 13 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/af_link.c | 7 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/af_nd6.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifbridge.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifcarp.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifclone.c | 7 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifconfig.c | 60 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifconfig.h | 22 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifgif.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifgre.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifgroup.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/iflagg.c | 7 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifmac.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifmedia.c | 18 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifpfsync.c | 4 | ||||
-rw-r--r-- | freebsd/sbin/ifconfig/ifvlan.c | 8 |
18 files changed, 180 insertions, 10 deletions
diff --git a/freebsd/sbin/ifconfig/af_atalk.c b/freebsd/sbin/ifconfig/af_atalk.c index 4890ded9..16c358ab 100644 --- a/freebsd/sbin/ifconfig/af_atalk.c +++ b/freebsd/sbin/ifconfig/af_atalk.c @@ -169,9 +169,17 @@ static struct afswtch af_atalk = { .af_addreq = &at_addreq, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ atalk_ctor(void) { +#ifdef __rtems__ + memset(&at_nr, 0, sizeof(at_nr)); + memset(&at_addreq, 0, sizeof(at_addreq)); +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) size_t i; diff --git a/freebsd/sbin/ifconfig/af_inet.c b/freebsd/sbin/ifconfig/af_inet.c index 7a4acfc9..0e77597e 100644 --- a/freebsd/sbin/ifconfig/af_inet.c +++ b/freebsd/sbin/ifconfig/af_inet.c @@ -197,8 +197,16 @@ static struct afswtch af_inet = { .af_addreq = &in_addreq, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ inet_ctor(void) { +#ifdef __rtems__ + memset(&in_addreq, 0, sizeof(in_addreq)); + memset(&in_ridreq, 0, sizeof(in_ridreq)); +#endif /* __rtems__ */ af_register(&af_inet); } diff --git a/freebsd/sbin/ifconfig/af_inet6.c b/freebsd/sbin/ifconfig/af_inet6.c index a08478e8..0f99a0e9 100644 --- a/freebsd/sbin/ifconfig/af_inet6.c +++ b/freebsd/sbin/ifconfig/af_inet6.c @@ -533,9 +533,22 @@ in6_Lopt_cb(const char *optarg __unused) } static struct option in6_Lopt = { .opt = "L", .opt_usage = "[-L]", .cb = in6_Lopt_cb }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ inet6_ctor(void) { +#ifdef __rtems__ + memset(&in6_ridreq, 0, sizeof(in6_ridreq)); + memset(&in6_addreq, 0, sizeof(in6_addreq)); + in6_addreq.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME; + in6_addreq.ifra_lifetime.ia6t_pltime = ND6_INFINITE_LIFETIME; + ip6lifetime = 0; + explicit_prefix = 0; + memset(&addr_buf, 0, sizeof(addr_buf)); +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) size_t i; diff --git a/freebsd/sbin/ifconfig/af_link.c b/freebsd/sbin/ifconfig/af_link.c index b7a7fecf..ac04b71f 100644 --- a/freebsd/sbin/ifconfig/af_link.c +++ b/freebsd/sbin/ifconfig/af_link.c @@ -120,9 +120,16 @@ static struct afswtch af_lladdr = { .af_addreq = &link_ridreq, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ link_ctor(void) { +#ifdef __rtems__ + memset(&link_ridreq, 0, sizeof(link_ridreq)); +#endif /* __rtems__ */ af_register(&af_link); af_register(&af_ether); af_register(&af_lladdr); diff --git a/freebsd/sbin/ifconfig/af_nd6.c b/freebsd/sbin/ifconfig/af_nd6.c index 55adba49..8395772f 100644 --- a/freebsd/sbin/ifconfig/af_nd6.c +++ b/freebsd/sbin/ifconfig/af_nd6.c @@ -222,7 +222,11 @@ static struct afswtch af_nd6 = { .af_other_status= nd6_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ nd6_ctor(void) { af_register(&af_nd6); diff --git a/freebsd/sbin/ifconfig/ifbridge.c b/freebsd/sbin/ifconfig/ifbridge.c index 05ebfe31..738d25a9 100644 --- a/freebsd/sbin/ifconfig/ifbridge.c +++ b/freebsd/sbin/ifconfig/ifbridge.c @@ -746,7 +746,11 @@ static struct afswtch af_bridge = { .af_other_status = bridge_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ bridge_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/ifcarp.c b/freebsd/sbin/ifconfig/ifcarp.c index 41d9896f..96a6dcb9 100644 --- a/freebsd/sbin/ifconfig/ifcarp.c +++ b/freebsd/sbin/ifconfig/ifcarp.c @@ -187,7 +187,11 @@ static struct afswtch af_carp = { .af_other_status = carp_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ carp_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/ifclone.c b/freebsd/sbin/ifconfig/ifclone.c index 3cfeee25..84ec61bd 100644 --- a/freebsd/sbin/ifconfig/ifclone.c +++ b/freebsd/sbin/ifconfig/ifclone.c @@ -181,9 +181,16 @@ clone_Copt_cb(const char *optarg __unused) } static struct option clone_Copt = { .opt = "C", .opt_usage = "[-C]", .cb = clone_Copt_cb }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ clone_ctor(void) { +#ifdef __rtems__ + SLIST_INIT(&clone_defcbh); +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) size_t i; diff --git a/freebsd/sbin/ifconfig/ifconfig.c b/freebsd/sbin/ifconfig/ifconfig.c index a09670fc..3bf8df77 100644 --- a/freebsd/sbin/ifconfig/ifconfig.c +++ b/freebsd/sbin/ifconfig/ifconfig.c @@ -46,6 +46,8 @@ static const char rcsid[] = #define option getopt_option #include <getopt.h> #undef option +#include <machine/rtems-bsd-program.h> +#include <machine/rtems-bsd-commands.h> #endif /* __rtems__ */ #include <rtems/bsd/sys/param.h> #include <sys/ioctl.h> @@ -147,20 +149,39 @@ usage(void) } #ifdef __rtems__ -#include <machine/rtems-bsd-program.h> -#include <machine/rtems-bsd-commands.h> - +static void ifconfig_ctor(void); static int main(int argc, char *argv[]); int rtems_bsd_command_ifconfig(int argc, char *argv[]) { - descr = NULL; - descrlen = 64; - newaddr = 1; - supmedia = 0; - printkeys = 0; - - return rtems_bsd_program_call_main("ifconfig", main, argc, argv); + int exit_code; + + rtems_bsd_program_lock(); + + ifconfig_ctor(); + + atalk_ctor(); + bridge_ctor(); + carp_ctor(); + clone_ctor(); + gif_ctor(); + gre_ctor(); + group_ctor(); + ifmedia_ctor(); + inet_ctor(); + inet6_ctor(); + lagg_ctor(); + link_ctor(); + mac_ctor(); + nd6_ctor(); + pfsync_ctor(); + vlan_ctor(); + + exit_code = rtems_bsd_program_call_main("ifconfig", main, argc, argv); + + rtems_bsd_program_unlock(); + + return exit_code; } #endif /* __rtems__ */ int @@ -1194,6 +1215,25 @@ static struct cmd basic_cmds[] = { static __constructor void ifconfig_ctor(void) { +#ifdef __rtems__ + memset(&ifr, 0, sizeof(ifr)); + memset(&name, 0, sizeof(name)); + descr = NULL; + descrlen = 64; + setaddr = 0; + setmask = 0; + doalias = 0; + clearaddr = 0; + newaddr = 1; + verbose = 0; + noload = 0; + supmedia = 0; + printkeys = 0; + opts = NULL; + afs = NULL; + callbacks = NULL; + cmds = NULL; +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) size_t i; diff --git a/freebsd/sbin/ifconfig/ifconfig.h b/freebsd/sbin/ifconfig/ifconfig.h index d6f53499..291aed63 100644 --- a/freebsd/sbin/ifconfig/ifconfig.h +++ b/freebsd/sbin/ifconfig/ifconfig.h @@ -34,7 +34,11 @@ * $FreeBSD$ */ +#ifndef __rtems__ #define __constructor __attribute__((constructor)) +#else /* __rtems__ */ +#define __constructor +#endif /* __rtems__ */ struct afswtch; struct cmd; @@ -148,3 +152,21 @@ void clone_setdefcallback(const char *, clone_callback_func *); * operations on ifmedia can avoid cmd line ordering confusion. */ struct ifmediareq *ifmedia_getstate(int s); +#ifdef __rtems__ +void atalk_ctor(void); +void bridge_ctor(void); +void carp_ctor(void); +void clone_ctor(void); +void gif_ctor(void); +void gre_ctor(void); +void group_ctor(void); +void ifmedia_ctor(void); +void inet6_ctor(void); +void inet_ctor(void); +void lagg_ctor(void); +void link_ctor(void); +void mac_ctor(void); +void nd6_ctor(void); +void pfsync_ctor(void); +void vlan_ctor(void); +#endif /* __rtems__ */ diff --git a/freebsd/sbin/ifconfig/ifgif.c b/freebsd/sbin/ifconfig/ifgif.c index f3b709c5..1d8468c7 100644 --- a/freebsd/sbin/ifconfig/ifgif.c +++ b/freebsd/sbin/ifconfig/ifgif.c @@ -121,7 +121,11 @@ static struct afswtch af_gif = { .af_other_status = gif_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ gif_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/ifgre.c b/freebsd/sbin/ifconfig/ifgre.c index db871e3d..a016eca9 100644 --- a/freebsd/sbin/ifconfig/ifgre.c +++ b/freebsd/sbin/ifconfig/ifgre.c @@ -85,7 +85,11 @@ static struct afswtch af_gre = { .af_other_status = gre_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ gre_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/ifgroup.c b/freebsd/sbin/ifconfig/ifgroup.c index 596a5220..f5202fdd 100644 --- a/freebsd/sbin/ifconfig/ifgroup.c +++ b/freebsd/sbin/ifconfig/ifgroup.c @@ -172,7 +172,11 @@ static struct afswtch af_group = { }; static struct option group_gopt = { "g:", "[-g groupname]", printgroup }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ group_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/iflagg.c b/freebsd/sbin/ifconfig/iflagg.c index d2b62122..16862e85 100644 --- a/freebsd/sbin/ifconfig/iflagg.c +++ b/freebsd/sbin/ifconfig/iflagg.c @@ -181,9 +181,16 @@ static struct afswtch af_lagg = { .af_other_status = lagg_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ lagg_ctor(void) { +#ifdef __rtems__ + memset(&lacpbuf, 0, sizeof(lacpbuf)); +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) int i; diff --git a/freebsd/sbin/ifconfig/ifmac.c b/freebsd/sbin/ifconfig/ifmac.c index be7787c0..17b917f7 100644 --- a/freebsd/sbin/ifconfig/ifmac.c +++ b/freebsd/sbin/ifconfig/ifmac.c @@ -108,7 +108,11 @@ static struct afswtch af_mac = { .af_other_status = maclabel_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ mac_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/ifmedia.c b/freebsd/sbin/ifconfig/ifmedia.c index 9d0da68a..9a78ea7b 100644 --- a/freebsd/sbin/ifconfig/ifmedia.c +++ b/freebsd/sbin/ifconfig/ifmedia.c @@ -193,10 +193,15 @@ media_status(int s) free(media_list); } +#ifdef __rtems__ +static struct ifmediareq *ifmr = NULL; +#endif /* __rtems__ */ struct ifmediareq * ifmedia_getstate(int s) { +#ifndef __rtems__ static struct ifmediareq *ifmr = NULL; +#endif /* __rtems__ */ int *mwords; if (ifmr == NULL) { @@ -236,11 +241,16 @@ ifmedia_getstate(int s) return ifmr; } +#ifdef __rtems__ +static int did_it = 0; +#endif /* __rtems__ */ static void setifmediacallback(int s, void *arg) { struct ifmediareq *ifmr = (struct ifmediareq *)arg; +#ifndef __rtems__ static int did_it = 0; +#endif /* __rtems__ */ if (!did_it) { ifr.ifr_media = ifmr->ifm_current; @@ -822,9 +832,17 @@ static struct afswtch af_media = { .af_other_status = media_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ ifmedia_ctor(void) { +#ifdef __rtems__ + did_it = 0; + ifmr = NULL; +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) size_t i; diff --git a/freebsd/sbin/ifconfig/ifpfsync.c b/freebsd/sbin/ifconfig/ifpfsync.c index c0b86a9b..5b9a3c5e 100644 --- a/freebsd/sbin/ifconfig/ifpfsync.c +++ b/freebsd/sbin/ifconfig/ifpfsync.c @@ -202,7 +202,11 @@ static struct afswtch af_pfsync = { .af_other_status = pfsync_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ pfsync_ctor(void) { #define N(a) (sizeof(a) / sizeof(a[0])) diff --git a/freebsd/sbin/ifconfig/ifvlan.c b/freebsd/sbin/ifconfig/ifvlan.c index b8f761d4..e745df82 100644 --- a/freebsd/sbin/ifconfig/ifvlan.c +++ b/freebsd/sbin/ifconfig/ifvlan.c @@ -190,9 +190,17 @@ static struct afswtch af_vlan = { .af_other_status = vlan_status, }; +#ifndef __rtems__ static __constructor void +#else /* __rtems__ */ +void +#endif /* __rtems__ */ vlan_ctor(void) { +#ifdef __rtems__ + memset(¶ms, 0, sizeof(params)); + params.vlr_tag = NOTAG; +#endif /* __rtems__ */ #define N(a) (sizeof(a) / sizeof(a[0])) size_t i; |