From 80830871e274ebdbadc3edc52e73b6a3a6621447 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Sun, 1 Apr 2007 02:11:41 +0000 Subject: [PATCH] Avoid triggering warnings about strict-aliasing violations. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1794 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 13 +++++++++++++ include/ircd_events.h | 8 ++++---- ircd/ircd_events.c | 36 ++++++++++++++++++------------------ 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6bd9edf..d56740c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2007-03-31 Michael Poole + + * include/ircd_events.h (struct Generators): Convert elements to + be struct GenHeader*. + (timer_next): Update to match. + + * ircd/ircd_events.c (timer_enqueue): Update to match. + (signal_callback): Likewise. + (timer_init): Remove a typecast with something slightly safer. + (timer_run): Update to deal with new type of Generator.g_timer. + (signal_add): Likewise. + (socket_add): Likewise. + 2007-03-28 Michael Poole * ircd/m_asll.c (ms_asll): Count hits and report at the end, so diff --git a/include/ircd_events.h b/include/ircd_events.h index 7524090..f8148a8 100644 --- a/include/ircd_events.h +++ b/include/ircd_events.h @@ -202,9 +202,9 @@ struct Event { /** List of all event generators. */ struct Generators { - struct Socket* g_socket; /**< list of socket generators */ - struct Signal* g_signal; /**< list of signal generators */ - struct Timer* g_timer; /**< list of timer generators */ + struct GenHeader* g_socket; /**< list of socket generators */ + struct GenHeader* g_signal; /**< list of signal generators */ + struct GenHeader* g_timer; /**< list of timer generators */ }; /** Returns 1 if successfully initialized, 0 if not. @@ -284,7 +284,7 @@ void timer_del(struct Timer* timer); void timer_chg(struct Timer* timer, enum TimerType type, time_t value); void timer_run(void); /** Retrieve the next timer's expiration time from Generators \a gen. */ -#define timer_next(gen) ((gen)->g_timer ? (gen)->g_timer->t_expire : 0) +#define timer_next(gen) ((gen)->g_timer ? ((struct Timer*)(gen)->g_timer)->t_expire : 0) void signal_add(struct Signal* signal, EventCallBack call, void* data, int sig); diff --git a/ircd/ircd_events.c b/ircd/ircd_events.c index 2de7f20..f21ecdb 100644 --- a/ircd/ircd_events.c +++ b/ircd/ircd_events.c @@ -246,7 +246,7 @@ event_add(struct Event* event) static void timer_enqueue(struct Timer* timer) { - struct Timer** ptr_p; + struct GenHeader** ptr_p; assert(0 != timer); assert(0 == timer->t_header.gh_prev_p); /* not already on queue */ @@ -265,16 +265,16 @@ timer_enqueue(struct Timer* timer) /* Find a slot to insert timer */ for (ptr_p = &evInfo.gens.g_timer; ; - ptr_p = (struct Timer**) &(*ptr_p)->t_header.gh_next) - if (!*ptr_p || timer->t_expire < (*ptr_p)->t_expire) + ptr_p = &(*ptr_p)->gh_next) + if (!*ptr_p || timer->t_expire < ((struct Timer*)*ptr_p)->t_expire) break; /* link it in the right place */ - timer->t_header.gh_next = (struct GenHeader*) *ptr_p; - timer->t_header.gh_prev_p = (struct GenHeader**) ptr_p; + timer->t_header.gh_next = *ptr_p; + timer->t_header.gh_prev_p = ptr_p; if (*ptr_p) - (*ptr_p)->t_header.gh_prev_p = &timer->t_header.gh_next; - *ptr_p = timer; + (*ptr_p)->gh_prev_p = &timer->t_header.gh_next; + *ptr_p = &timer->t_header; } /** &Signal handler for writing signal notification to pipe. @@ -300,7 +300,7 @@ signal_callback(struct Event* event) { unsigned char sigstr[SIGS_PER_SOCK]; int sig, n_sigs, i; - struct Signal* ptr; + struct GenHeader* ptr; assert(event->ev_type == ET_READ); /* readable events only */ @@ -310,8 +310,8 @@ signal_callback(struct Event* event) sig = (int) sigstr[i]; /* get signal */ for (ptr = evInfo.gens.g_signal; ptr; - ptr = (struct Signal*) ptr->sig_header.gh_next) - if (ptr->sig_signal == sig) /* find its descriptor... */ + ptr = ptr->gh_next) + if (((struct Signal*)ptr)->sig_signal == sig) /* find its descriptor... */ break; if (ptr) @@ -447,7 +447,7 @@ timer_verify(void) struct Timer* timer_init(struct Timer* timer) { - gen_init((struct GenHeader*) timer, 0, 0, 0, 0); + gen_init(&timer->t_header, 0, 0, 0, 0); timer->t_header.gh_flags = 0; /* turn off active flag */ @@ -548,7 +548,7 @@ timer_run(void) struct Timer* ptr; /* go through queue... */ - while ((ptr = evInfo.gens.g_timer)) { + while ((ptr = (struct Timer*)evInfo.gens.g_timer)) { if (CurrentTime < ptr->t_expire) break; /* processed all pending timers */ @@ -587,9 +587,9 @@ signal_add(struct Signal* signal, EventCallBack call, void* data, int sig) assert(0 != evInfo.engine); /* set up struct */ - gen_init((struct GenHeader*) signal, call, data, - (struct GenHeader*) evInfo.gens.g_signal, - (struct GenHeader**) &evInfo.gens.g_signal); + gen_init(&signal->sig_header, call, data, + evInfo.gens.g_signal, + &evInfo.gens.g_signal); signal->sig_signal = sig; @@ -623,9 +623,9 @@ socket_add(struct Socket* sock, EventCallBack call, void* data, assert(0 != evInfo.engine->eng_add); /* set up struct */ - gen_init((struct GenHeader*) sock, call, data, - (struct GenHeader*) evInfo.gens.g_socket, - (struct GenHeader**) &evInfo.gens.g_socket); + gen_init(&sock->s_header, call, data, + evInfo.gens.g_socket, + &evInfo.gens.g_socket); sock->s_state = state; sock->s_events = events & SOCK_EVENT_MASK; -- 2.20.1