[前][次][番号順一覧][スレッド一覧]

ruby-changes:7805

From: akr <ko1@a...>
Date: Sat, 13 Sep 2008 18:52:20 +0900 (JST)
Subject: [ruby-changes:7805] Ruby:r19326 (trunk): * transcode.c (rb_transcoding): align state field.

akr	2008-09-13 18:52:02 +0900 (Sat, 13 Sep 2008)

  New Revision: 19326

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19326

  Log:
    * transcode.c (rb_transcoding): align state field.

  Modified files:
    trunk/ChangeLog
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19325)
+++ ChangeLog	(revision 19326)
@@ -1,3 +1,7 @@
+Sat Sep 13 18:46:41 2008  Tanaka Akira  <akr@f...>
+
+	* transcode.c (rb_transcoding): align state field.
+
 Sat Sep 13 18:21:09 2008  Tanaka Akira  <akr@f...>
 
 	* transcode.c (DECORATOR_P): renamed from SUPPLEMENTAL_CONVERSION.
Index: transcode.c
===================================================================
--- transcode.c	(revision 19325)
+++ transcode.c	(revision 19326)
@@ -67,7 +67,10 @@
         unsigned char *ptr; /* length: max_output */
     } writebuf;
 
-    void *state; /* opaque data for stateful encoding */
+    union rb_transcoding_state_t { /* opaque data for stateful encoding */
+        void *ptr;
+        double dummy_for_alignment;
+    } state;
 } rb_transcoding;
 #define TRANSCODING_READBUF(tc) \
     ((tc)->transcoder->max_input <= sizeof((tc)->readbuf.ary) ? \
@@ -77,11 +80,11 @@
     ((tc)->transcoder->max_output <= sizeof((tc)->writebuf.ary) ? \
      (tc)->writebuf.ary : \
      (tc)->writebuf.ptr)
-#define TRANSCODING_STATE_EMBED_MAX sizeof(void *)
+#define TRANSCODING_STATE_EMBED_MAX sizeof(union rb_transcoding_state_t)
 #define TRANSCODING_STATE(tc) \
     ((tc)->transcoder->state_size <= sizeof((tc)->state) ? \
      (void *)&(tc)->state : \
-     (tc)->state)
+     (tc)->state.ptr)
 
 typedef struct {
     struct rb_transcoding *tc;
@@ -728,7 +731,7 @@
     tc->transcoder = tr;
     tc->flags = flags;
     if (TRANSCODING_STATE_EMBED_MAX < tr->state_size)
-        tc->state = xmalloc(tr->state_size);
+        tc->state.ptr = xmalloc(tr->state_size);
     if (tr->state_init_func) {
         (tr->state_init_func)(TRANSCODING_STATE(tc)); /* xxx: check return value */
     }
@@ -766,7 +769,7 @@
         (tr->state_fini_func)(TRANSCODING_STATE(tc)); /* check return value? */
     }
     if (TRANSCODING_STATE_EMBED_MAX < tr->state_size)
-        xfree(tc->state);
+        xfree(tc->state.ptr);
     if (sizeof(tc->readbuf.ary) < tr->max_input)
         xfree(tc->readbuf.ptr);
     if (sizeof(tc->writebuf.ary) < tr->max_output)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]