Avoid triggering warnings about strict-aliasing violations.
authorMichael Poole <mdpoole@troilus.org>
Sun, 1 Apr 2007 02:11:41 +0000 (02:11 +0000)
committerMichael Poole <mdpoole@troilus.org>
Sun, 1 Apr 2007 02:11:41 +0000 (02:11 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1794 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
include/ircd_events.h
ircd/ircd_events.c

index 6bd9edfd0830d6bbd75d6ba0d00c434faf3a215d..d56740cfa783c53b9e3a18192b8465d2f9af1c7a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2007-03-31  Michael Poole <mdpoole@troilus.org>
+
+       * 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 <mdpoole@troilus.org>
 
        * ircd/m_asll.c (ms_asll): Count hits and report at the end, so
index 7524090a52f75fcdcf0c5127433b3a1a513c541d..f8148a887a8f47457b91e204ea85ba18b4fd4eb2 100644 (file)
@@ -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);
index 2de7f20aaba42ae16ef646fe7acd1a04df267efd..f21ecdbe29ca8c775f9e93da66e46b5dcccc28b3 100644 (file)
@@ -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;