On Wed, Sep 09, 2015 at 08:55:12AM -0600, Todd C. Miller wrote: > On Wed, 09 Sep 2015 13:14:16 +0200, Alexander Bluhm wrote: > > > Instead of having global variables containing the libevent structures, > > allocate them with malloc. This makes the address space layout > > more random. > > That huge if() makes things a bit harder to read. Doing the NULL > check separately from the calls to malloc() might help. E.g.
Hmm, then you have another list where you can forget one of them. ev_listen, ev_unix, ev_hup are missing in your example. bluhm > ev_ctlaccept = malloc(sizeof(struct event)); > ev_ctlread = malloc(sizeof(struct event)); > ev_ctlwrite = malloc(sizeof(struct event)); > ev_klog = malloc(sizeof(struct event)); > ev_sendsys = malloc(sizeof(struct event)); > ev_udp = malloc(sizeof(struct event)); > ev_udp6 = malloc(sizeof(struct event)); > ev_bind = malloc(sizeof(struct event)); > ev_listen = malloc(sizeof(struct event)); > ev_unix = reallocarray(NULL, nunix, sizeof(struct event)); > ev_hup = malloc(sizeof(struct event)); > ev_int = malloc(sizeof(struct event)); > ev_quit = malloc(sizeof(struct event)); > ev_term = malloc(sizeof(struct event)); > ev_mark = malloc(sizeof(struct event)); > > if (ev_ctlaccept == NULL || ev_ctlread == NULL || ev_ctlwrite == NULL || > ev_klog == NULL || ev_sendsys == NULL || ev_udp == NULL || > ev_udp6 == NULL || ev_bind == NULL || ev_int == NULL || > ev_quit == NULL || ev_term == NULL || ev_mark == NULL) > err(1, "malloc"); > > - todd