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

ruby-changes:7829

From: akr <ko1@a...>
Date: Mon, 15 Sep 2008 03:06:48 +0900 (JST)
Subject: [ruby-changes:7829] Ruby:r19350 (trunk): * transcode_data.h: output function takes output buffer size.

akr	2008-09-15 03:06:20 +0900 (Mon, 15 Sep 2008)

  New Revision: 19350

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

  Log:
    * transcode_data.h: output function takes output buffer size.
    
    * transcode.c: give output buffer size for output functions.
    
    * enc/trans/newline.trans: follow the type change.
    
    * enc/trans/escape.trans: ditto.
    
    * enc/trans/utf_16_32.trans: ditto.
    
    * enc/trans/iso2022.trans: ditto.
    
    * enc/trans/japanese.trans: ditto.

  Modified files:
    trunk/ChangeLog
    trunk/enc/trans/escape.trans
    trunk/enc/trans/iso2022.trans
    trunk/enc/trans/japanese.trans
    trunk/enc/trans/newline.trans
    trunk/enc/trans/utf_16_32.trans
    trunk/transcode.c
    trunk/transcode_data.h

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19349)
+++ ChangeLog	(revision 19350)
@@ -1,3 +1,19 @@
+Mon Sep 15 03:04:29 2008  Tanaka Akira  <akr@f...>
+
+	* transcode_data.h: output function takes output buffer size.
+
+	* transcode.c: give output buffer size for output functions.
+
+	* enc/trans/newline.trans: follow the type change.
+
+	* enc/trans/escape.trans: ditto.
+
+	* enc/trans/utf_16_32.trans: ditto.
+
+	* enc/trans/iso2022.trans: ditto.
+
+	* enc/trans/japanese.trans: ditto.
+
 Mon Sep 15 02:37:19 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* transcode.c (str_encode): returns duplicated string if nothing
Index: enc/trans/escape.trans
===================================================================
--- enc/trans/escape.trans	(revision 19349)
+++ enc/trans/escape.trans	(revision 19350)
@@ -44,7 +44,7 @@
 }
 
 static int
-fun_so_escape_xml_attr_quote(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_escape_xml_attr_quote(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
     int n = 0;
@@ -57,7 +57,7 @@
 }
 
 static int
-escape_xml_attr_quote_finish(void *statep, unsigned char *o)
+escape_xml_attr_quote_finish(void *statep, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
     int n = 0;
Index: enc/trans/iso2022.trans
===================================================================
--- enc/trans/iso2022.trans	(revision 19349)
+++ enc/trans/iso2022.trans	(revision 19350)
@@ -71,7 +71,7 @@
 }
 
 static int
-fun_so_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l, unsigned char* o)
+fun_so_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l, unsigned char* o, size_t osize)
 {
     unsigned char *sp = statep;
     if (s[0] == 0x1b) {
@@ -120,7 +120,7 @@
 };
 
 static int
-fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
     unsigned char *output0 = o;
@@ -173,7 +173,7 @@
 }
 
 static int
-finish_iso2022jp_encoder(void *statep, unsigned char *o)
+finish_iso2022jp_encoder(void *statep, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
     unsigned char *output0 = o;
@@ -204,7 +204,7 @@
 };
 
 static int
-fun_so_stateless_iso2022jp_to_eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_stateless_iso2022jp_to_eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     o[0] = s[1];
     o[1] = s[2];
@@ -224,7 +224,7 @@
 };
 
 static int
-fun_so_eucjp_to_stateless_iso2022jp(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_eucjp_to_stateless_iso2022jp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1983;
     o[1] = s[0];
Index: enc/trans/newline.trans
===================================================================
--- enc/trans/newline.trans	(revision 19349)
+++ enc/trans/newline.trans	(revision 19350)
@@ -41,7 +41,7 @@
 }
 
 static int
-fun_so_universal_newline(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_universal_newline(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
     int len;
@@ -76,7 +76,7 @@
 }
 
 static int
-universal_newline_finish(void *statep, unsigned char *o)
+universal_newline_finish(void *statep, unsigned char *o, size_t osize)
 {
     unsigned char *sp = statep;
     if (STATE == JUST_AFTER_CR)
Index: enc/trans/utf_16_32.trans
===================================================================
--- enc/trans/utf_16_32.trans	(revision 19349)
+++ enc/trans/utf_16_32.trans	(revision 19350)
@@ -38,7 +38,7 @@
 <%= transcode_generated_code %>
 
 static int
-fun_so_from_utf_16be(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_from_utf_16be(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (!s[0] && s[1]<0x80) {
         o[0] = s[1];
@@ -66,7 +66,7 @@
 }
 
 static int
-fun_so_to_utf_16be(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_to_utf_16be(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (!(s[0]&0x80)) {
         o[0] = 0x00;
@@ -94,7 +94,7 @@
 }
 
 static int
-fun_so_from_utf_16le(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_from_utf_16le(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (!s[1] && s[0]<0x80) {
         o[0] = s[0];
@@ -122,7 +122,7 @@
 }
 
 static int
-fun_so_to_utf_16le(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_to_utf_16le(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (!(s[0]&0x80)) {
         o[1] = 0x00;
@@ -150,7 +150,7 @@
 }
 
 static int
-fun_so_from_utf_32be(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_from_utf_32be(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (!s[1]) {
         if (s[2]==0 && s[3]<0x80) {
@@ -179,7 +179,7 @@
 }
 
 static int
-fun_so_to_utf_32be(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_to_utf_32be(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     o[0] = 0;
     if (!(s[0]&0x80)) {
@@ -205,7 +205,7 @@
 }
 
 static int
-fun_so_from_utf_32le(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_from_utf_32le(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (!s[2]) {
         if (s[1]==0 && s[0]<0x80) {
@@ -234,7 +234,7 @@
 }
 
 static int
-fun_so_to_utf_32le(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_to_utf_32le(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     o[3] = 0;
     if (!(s[0]&0x80)) {
Index: enc/trans/japanese.trans
===================================================================
--- enc/trans/japanese.trans	(revision 19349)
+++ enc/trans/japanese.trans	(revision 19350)
@@ -20,7 +20,7 @@
 <%= transcode_generated_code %>
 
 static int
-fun_so_eucjp2sjis(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_eucjp2sjis(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (s[0] == 0x8e) {
         o[0] = s[1];
@@ -41,7 +41,7 @@
 }
 
 static int
-fun_so_sjis2eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o)
+fun_so_sjis2eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
 {
     if (l == 1) {
         o[0] = '\x8e';
Index: transcode_data.h
===================================================================
--- transcode_data.h	(revision 19349)
+++ transcode_data.h	(revision 19350)
@@ -84,11 +84,11 @@
     int (*state_fini_func)(void*); /* ret==0:success ret!=0:failure(errno) */
     VALUE (*func_ii)(void*, VALUE); /* info  -> info   */
     VALUE (*func_si)(void*, const unsigned char*, size_t); /* start -> info   */
-    int (*func_io)(void*, VALUE, const unsigned char*); /* info  -> output */
-    int (*func_so)(void*, const unsigned char*, size_t, unsigned char*); /* start -> output */
-    int (*finish_func)(void*, unsigned char*); /* -> output */
+    int (*func_io)(void*, VALUE, const unsigned char*, size_t); /* info  -> output */
+    int (*func_so)(void*, const unsigned char*, size_t, unsigned char*, size_t); /* start -> output */
+    int (*finish_func)(void*, unsigned char*, size_t); /* -> output */
     int (*resetsize_func)(void*); /* -> len */
-    int (*resetstate_func)(void*, unsigned char*); /* -> output */
+    int (*resetstate_func)(void*, unsigned char*, size_t); /* -> output */
 };
 
 void rb_declare_transcoder(const char *enc1, const char *enc2, const char *lib);
Index: transcode.c
===================================================================
--- transcode.c	(revision 19349)
+++ transcode.c	(revision 19350)
@@ -80,6 +80,10 @@
     ((tc)->transcoder->max_output <= sizeof((tc)->writebuf.ary) ? \
      (tc)->writebuf.ary : \
      (tc)->writebuf.ptr)
+#define TRANSCODING_WRITEBUF_SIZE(tc) \
+    ((tc)->transcoder->max_output <= sizeof((tc)->writebuf.ary) ? \
+     sizeof((tc)->writebuf.ary) : \
+     (tc)->transcoder->max_output)
 #define TRANSCODING_STATE_EMBED_MAX sizeof(union rb_transcoding_state_t)
 #define TRANSCODING_STATE(tc) \
     ((tc)->transcoder->state_size <= sizeof((tc)->state) ? \
@@ -600,9 +604,13 @@
 	  case FUNio:
             SUSPEND_OBUF(13);
             if (tr->max_output <= out_stop - out_p)
-                out_p += (VALUE)(*tr->func_io)(TRANSCODING_STATE(tc), next_info, out_p);
+                out_p += (VALUE)(*tr->func_io)(TRANSCODING_STATE(tc),
+                    next_info,
+                    out_p, out_stop - out_p);
             else {
-                writebuf_len = (VALUE)(*tr->func_io)(TRANSCODING_STATE(tc), next_info, TRANSCODING_WRITEBUF(tc));
+                writebuf_len = (VALUE)(*tr->func_io)(TRANSCODING_STATE(tc),
+                    next_info,
+                    TRANSCODING_WRITEBUF(tc), TRANSCODING_WRITEBUF_SIZE(tc));
                 writebuf_off = 0;
                 while (writebuf_off < writebuf_len) {
                     SUSPEND_OBUF(20);
@@ -617,11 +625,15 @@
                 SUSPEND_OBUF(14);
                 if (tr->max_output <= out_stop - out_p) {
                     char_start = transcode_char_start(tc, *in_pos, inchar_start, in_p, &char_len);
-                    out_p += (VALUE)(*tr->func_so)(TRANSCODING_STATE(tc), char_start, (size_t)char_len, out_p);
+                    out_p += (VALUE)(*tr->func_so)(TRANSCODING_STATE(tc),
+                        char_start, (size_t)char_len,
+                        out_p, out_stop - out_p);
                 }
                 else {
                     char_start = transcode_char_start(tc, *in_pos, inchar_start, in_p, &char_len);
-                    writebuf_len = (VALUE)(*tr->func_so)(TRANSCODING_STATE(tc), char_start, (size_t)char_len, TRANSCODING_WRITEBUF(tc));
+                    writebuf_len = (VALUE)(*tr->func_so)(TRANSCODING_STATE(tc),
+                        char_start, (size_t)char_len,
+                        TRANSCODING_WRITEBUF(tc), TRANSCODING_WRITEBUF_SIZE(tc));
                     writebuf_off = 0;
                     while (writebuf_off < writebuf_len) {
                         SUSPEND_OBUF(22);
@@ -675,10 +687,12 @@
     if (tr->finish_func) {
         SUSPEND_OBUF(4);
         if (tr->max_output <= out_stop - out_p) {
-            out_p += tr->finish_func(TRANSCODING_STATE(tc), out_p);
+            out_p += tr->finish_func(TRANSCODING_STATE(tc),
+                out_p, out_stop - out_p);
         }
         else {
-            writebuf_len = tr->finish_func(TRANSCODING_STATE(tc), TRANSCODING_WRITEBUF(tc));
+            writebuf_len = tr->finish_func(TRANSCODING_STATE(tc),
+                TRANSCODING_WRITEBUF(tc), TRANSCODING_WRITEBUF_SIZE(tc));
             writebuf_off = 0;
             while (writebuf_off < writebuf_len) {
                 SUSPEND_OBUF(23);

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

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