aboutsummaryrefslogtreecommitdiff
path: root/japanese/ruby-eb/files/patch-eb.c
diff options
context:
space:
mode:
Diffstat (limited to 'japanese/ruby-eb/files/patch-eb.c')
-rw-r--r--japanese/ruby-eb/files/patch-eb.c587
1 files changed, 0 insertions, 587 deletions
diff --git a/japanese/ruby-eb/files/patch-eb.c b/japanese/ruby-eb/files/patch-eb.c
deleted file mode 100644
index 2f11e4791287..000000000000
--- a/japanese/ruby-eb/files/patch-eb.c
+++ /dev/null
@@ -1,587 +0,0 @@
---- eb.c.orig 2004-07-12 17:46:01.000000000 +0000
-+++ eb.c 2013-06-01 16:49:10.715644813 +0000
-@@ -19,6 +19,13 @@
-
- #if HAVE_EB_SYSDEFS_H
- #include <eb/sysdefs.h>
-+#if (defined RUBY_EB_ENABLE_PTHREAD && !defined(EB_ENABLE_PTHREAD)) \
-+ || (!defined RUBY_EB_ENABLE_PTHREAD && defined(EB_ENABLE_PTHREAD))
-+#error The EB library is incompatible with EB heders.
-+#endif
-+
-+#elif defined RUBY_EB_ENABLE_PTHREAD
-+#define EBCONF_ENABLE_PTHREAD 1
- #endif
-
- #include <eb/eb.h>
-@@ -55,6 +62,21 @@
-
- #define APPENDIX_EB_IVAR "__appendix"
-
-+#ifdef HAVE_TYPE_RB_ENCODING
-+#include <ruby/encoding.h>
-+#define REB_TO_RB_ENCODING(reb) rb_enc_from_index(NUM2INT(rb_ivar_get(reb, id_eb_encidx)))
-+#else
-+#define rb_encoding void
-+#define REB_TO_RB_ENCODING(reb) NULL
-+#define rb_ascii8bit_encindex() 0
-+#define rb_enc_find_index(name) 0
-+#define rb_usascii_str_new_cstr(ptr) rb_str_new2(ptr)
-+#define rb_filesystem_str_new_cstr(ptr) rb_str_new2(ptr)
-+/* "((void)enc, ...)" is a hack to suppress warnings: unused variable 'enc' */
-+#define rb_external_str_new_with_enc(ptr, len, enc) ((void)enc, rb_tainted_str_new((ptr), (len)))
-+#define rb_str_export_to_enc(str, enc) ((void)enc, (str))
-+#endif
-+
- struct ExtFont {
- int code;
- int wideflag; /* boolean */
-@@ -67,20 +89,30 @@
-
-
-
--VALUE mEB;
--VALUE cEBook;
--VALUE cEBCancel;
--VALUE cEBPosition;
--VALUE cEBExtFont;
--VALUE cEBHook;
--VALUE cEBAppendix;
-+static VALUE mEB;
-+static VALUE cEBook;
-+static VALUE cEBCancel;
-+static VALUE cEBPosition;
-+static VALUE cEBExtFont;
-+static VALUE cEBHook;
-+static VALUE cEBAppendix;
-
--ID id_call;
-+static ID id_call;
-+static ID id_eb_encidx;
-+
-+static void
-+reb_check_type(VALUE obj, VALUE klass)
-+{
-+ if (!rb_obj_is_kind_of(obj, klass)) {
-+ rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
-+ rb_obj_classname(obj), rb_class2name(klass));
-+ }
-+}
-
--int
-+static int
- text_hook(EB_Book * book, EB_Appendix * appendix, void *container, EB_Hook_Code code, int argc, const int *argv)
- {
-- VALUE func, ret_buff, rb_argv, rb_eb, rb_hookset;
-+ VALUE func, ret_buff, rargv, rb_eb, rb_hookset;
- int idx;
- char *tmpbuffer;
-
-@@ -92,17 +124,17 @@
-
- func = rb_ary_entry(rb_iv_get(rb_hookset, HOOKSET_PROCS_IVAR), code);
-
-- rb_argv = rb_ary_new2(argc);
-+ rargv = rb_ary_new2(argc);
- for (idx = 0; idx < argc; idx++) {
-- rb_ary_store(rb_argv, idx, INT2FIX(argv[idx]));
-+ rb_ary_store(rargv, idx, INT2FIX(argv[idx]));
- }
-
-- ret_buff = rb_funcall(func, id_call, 2, rb_eb, rb_argv);
-+ ret_buff = rb_funcall(func, id_call, 2, rb_eb, rargv);
- if (ret_buff != Qnil) {
- if (TYPE(ret_buff) == T_STRING) {
- ret_buff = rb_funcall(ret_buff, rb_intern("to_str"), 0);
- }
-- tmpbuffer = STR2CSTR(ret_buff);
-+ tmpbuffer = StringValueCStr(ret_buff);
- eb_write_text_string(book, tmpbuffer);
- }
- return 0;
-@@ -164,6 +196,7 @@
- reb_appendix = Data_Make_Struct(cEBAppendix, EB_Appendix, 0, finalize_appendix, appendix);
- eb_initialize_appendix(appendix);
- rb_iv_set(robj, APPENDIX_EB_IVAR, reb_appendix);
-+ rb_ivar_set(robj, id_eb_encidx, INT2FIX(rb_ascii8bit_encindex()));
-
- return robj;
- }
-@@ -185,13 +218,30 @@
- {
- EB_Book *eb;
- int r;
-+ EB_Character_Code charcode = EB_CHARCODE_INVALID;
-+ int encidx;
-
- Data_Get_Struct(obj, EB_Book, eb);
-- r = eb_bind(eb, STR2CSTR(path));
-+ r = eb_bind(eb, StringValueCStr(path));
- if (r != EB_SUCCESS) {
-- rb_raise(rb_eRuntimeError, eb_error_message(r));
-+ rb_raise(rb_eRuntimeError, "%s", eb_error_message(r));
- return Qfalse;
- }
-+
-+ eb_character_code(eb, &charcode);
-+ switch (charcode) {
-+ case EB_CHARCODE_ISO8859_1:
-+ encidx = rb_enc_find_index("ISO-8859-1");
-+ break;
-+ case EB_CHARCODE_JISX0208:
-+ encidx = rb_enc_find_index("EUC-JP");
-+ break;
-+ default:
-+ encidx = rb_ascii8bit_encindex();
-+ break;
-+ }
-+ rb_ivar_set(obj, id_eb_encidx, INT2FIX(encidx));
-+
- return obj;
- }
-
-@@ -206,13 +256,13 @@
- eb_error = eb_disc_type(eb, &r);
- switch (r) {
- case EB_DISC_EB:
-- return rb_str_new2("EB/EBG/EBXA/EBXA-C/S-EBXA");
-+ return rb_usascii_str_new_cstr("EB/EBG/EBXA/EBXA-C/S-EBXA");
- break;
- case EB_DISC_EPWING:
-- return rb_str_new2("EPWING");
-+ return rb_usascii_str_new_cstr("EPWING");
- break;
- }
-- return rb_str_new2("Unknown");
-+ return rb_usascii_str_new_cstr("Unknown");
- }
-
- static VALUE
-@@ -241,29 +291,29 @@
- reb_path(VALUE obj)
- {
- EB_Book *eb;
-- char r[1024]; /*絶対値はまずいと思う */
-+ char r[EB_MAX_PATH_LENGTH + 1];
-
- Data_Get_Struct(obj, EB_Book, eb);
- eb_error = eb_path(eb, r);
-
-- return rb_str_new2(r);
-+ return rb_filesystem_str_new_cstr(r);
- }
-
- static VALUE
- reb_charcode(VALUE obj)
- {
- EB_Book *eb;
-- EB_Character_Code r;
-+ EB_Character_Code r = EB_CHARCODE_INVALID;
-
- Data_Get_Struct(obj, EB_Book, eb);
- eb_error = eb_character_code(eb, &r);
-
- switch (r) {
- case EB_CHARCODE_ISO8859_1:
-- return rb_str_new2("ISO8859_1");
-+ return rb_usascii_str_new_cstr("ISO8859_1");
- break;
- case EB_CHARCODE_JISX0208:
-- return rb_str_new2("JISX0208");
-+ return rb_usascii_str_new_cstr("JISX0208");
- break;
- }
- return Qnil;
-@@ -303,19 +353,21 @@
- reb_subbooktitle(int argc, VALUE * argv, VALUE obj)
- {
- EB_Book *eb;
-- char r[1024]; /*絶対値はまずいと思う */
-+ char r[EB_MAX_TITLE_LENGTH + 1];
-+ rb_encoding *enc = REB_TO_RB_ENCODING(obj);
-
- Data_Get_Struct(obj, EB_Book, eb);
- eb_error = (argc == 0) ?
- eb_subbook_title(eb, r) : eb_subbook_title2(eb, NUM2INT(argv[0]), r);
-- return rb_str_new2(r);
-+
-+ return rb_external_str_new_with_enc(r, strlen(r), enc);
- }
-
- static VALUE
- reb_subbookdirectory(int argc, VALUE * argv, VALUE obj)
- {
- EB_Book *eb;
-- char r[1024]; /*絶対値はまずいと思う */
-+ char r[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
-
- Data_Get_Struct(obj, EB_Book, eb);
- eb_error = (argc == 0) ?
-@@ -371,7 +423,7 @@
- return obj;
- }
-
--VALUE
-+static VALUE
- have_search(VALUE obj, EB_Error_Code(*funct) (EB_Book *))
- {
- EB_Book *eb;
-@@ -379,7 +431,7 @@
- Data_Get_Struct(obj, EB_Book, eb);
- r = (*funct) (eb);
- if (!r && eb_error == EB_ERR_NO_CUR_SUB) {
-- rb_raise(rb_eRuntimeError, eb_error_message(eb_error));
-+ rb_raise(rb_eRuntimeError, "%s", eb_error_message(eb_error));
- return Qfalse;
- }
- return (r) ? Qtrue : Qfalse;
-@@ -432,8 +484,9 @@
- static VALUE
- content_read(VALUE reb, EB_Book * eb, EB_Appendix * appendix, EB_Hookset * text_hookset)
- {
-- int len;
-+ ssize_t len;
- char desc[MAX_STRLEN + 1];
-+ rb_encoding *enc = REB_TO_RB_ENCODING(reb);
-
- eb_error = eb_read_text(eb, appendix, text_hookset, (void *) reb,
- MAX_STRLEN, desc, &len);
-@@ -442,7 +495,7 @@
- rb_raise(rb_eRuntimeError, "fail fetching text");
- return Qfalse;
- }
-- return rb_str_new(desc, len);
-+ return rb_external_str_new_with_enc(desc, len, enc);
- }
-
- static VALUE
-@@ -455,14 +508,15 @@
- return content_read(reb, eb, appendix, text_hookset);
- }
-
--VALUE
-+static VALUE
- get_item(VALUE reb, EB_Book * eb, EB_Hit * hit)
- {
- EB_Hookset *text_hookset;
- EB_Appendix *appendix;
- VALUE item;
- char desc[MAX_STRLEN + 1];
-- int len;
-+ ssize_t len;
-+ rb_encoding *enc = REB_TO_RB_ENCODING(reb);
- item = rb_ary_new2(2);
-
- if (eb_seek_text(eb, &(hit->heading)) < 0) {
-@@ -480,14 +534,14 @@
- return Qfalse;
- }
-
-- rb_ary_push(item, rb_str_new(desc, len));
-+ rb_ary_push(item, rb_external_str_new_with_enc(desc, len, enc));
- rb_ary_push(item, content_fetch_from_pos(reb, eb, &(hit->text), appendix, text_hookset));
-
- return item;
- }
-
-
--VALUE
-+static VALUE
- hitmaker(VALUE reb, EB_Book * eb, unsigned int max, int flag)
- {
- int hitpushed, hitcount;
-@@ -536,20 +590,22 @@
- return (flag == 0) ? robj : INT2NUM(hitpushed);
- }
-
--void
--set_keywords(VALUE array, char **buffer)
-+static void
-+set_keywords(VALUE array, char **buffer, volatile VALUE *gc_guard, rb_encoding *enc)
- {
- int i, sz;
-+
- if (TYPE(array) != T_ARRAY) {
- rb_raise(rb_eTypeError, "wordlist must be array of String.");
- }
-
-- sz = RARRAY(array)->len;
-+ sz = RARRAY_LEN(array);
- if (sz > MAX_KEYWORDS) {
- rb_raise(rb_eRuntimeError, "too many keywords(%d).", sz);
- }
- for (i = 0; i < sz; i++) {
-- buffer[i] = STR2CSTR(rb_ary_entry(array, i));
-+ gc_guard[i] = rb_str_export_to_enc(rb_ary_entry(array, i), enc);
-+ buffer[i] = RSTRING_PTR(gc_guard[i]);
- }
- buffer[sz] = NULL;
- }
-@@ -563,6 +619,12 @@
- char *buffer[MAX_KEYWORDS + 1];
- int max;
- int r;
-+ rb_encoding *enc = REB_TO_RB_ENCODING(obj);
-+ /* The following two variables are used to prevent GC from freeing
-+ * temporary objects.
-+ */
-+ volatile VALUE gc_guard[MAX_KEYWORDS];
-+ volatile VALUE str;
-
- if (argc < 1) {
- rb_raise(rb_eArgError, "missing searchstring");
-@@ -570,10 +632,11 @@
- }
-
- if (wordtype == SEARCHTYPE_WORD) {
-- word = STR2CSTR(argv[0]);
-+ str = rb_str_export_to_enc(argv[0], enc);
-+ word = RSTRING_PTR(str);
- }
- else {
-- set_keywords(argv[0], buffer);
-+ set_keywords(argv[0], buffer, gc_guard, enc);
- word = buffer;
- }
- max = (argc > 1) ? NUM2INT(argv[1]) : -1;
-@@ -616,10 +679,11 @@
-
-
- /* Thanks for Kuroda-san */
--VALUE
-+static VALUE
- hitmaker2(VALUE reb, EB_Book * eb, unsigned int max, int flag)
- {
-- int hitcount, i, len, broken;
-+ int hitcount, i, broken;
-+ ssize_t len;
- int hitpushed;
- VALUE robj, item, can;
- EB_Hit hits[MAX_HITS];
-@@ -629,6 +693,7 @@
- char descbuf2[MAX_STRLEN + 1];
- char *prevdesc;
- int prevpage, prevoffset;
-+ rb_encoding *enc = REB_TO_RB_ENCODING(reb);
- desc = descbuf1;
-
- /*** this 2 lines necessary? (2/4) eblook do like this ***/
-@@ -669,7 +734,7 @@
-
- item = rb_ary_new2(2);
- rb_ary_push(item, Data_Make_Struct(cEBPosition, EB_Position, 0, free, ebpos));
-- rb_ary_push(item, rb_str_new(desc, len));
-+ rb_ary_push(item, rb_external_str_new_with_enc(desc, len, enc));
- ebpos->page = hits[i].text.page;
- ebpos->offset = hits[i].text.offset;
-
-@@ -707,7 +772,7 @@
- return (flag == 0) ? robj : INT2NUM(hitpushed);
- }
-
--VALUE
-+static VALUE
- position_search(int argc, VALUE * argv, VALUE obj, int wordtype,
- EB_Error_Code(*funct) ())
- {
-@@ -716,6 +781,12 @@
- void *word;
- int max;
- int r;
-+ rb_encoding *enc = REB_TO_RB_ENCODING(obj);
-+ /* The following two variables are used to prevent GC from freeing
-+ * temporary objects.
-+ */
-+ volatile VALUE gc_guard[MAX_KEYWORDS];
-+ volatile VALUE str;
-
- if (argc < 1) {
- rb_raise(rb_eArgError, "missing searchstring");
-@@ -723,10 +794,11 @@
- }
-
- if (wordtype == SEARCHTYPE_WORD) {
-- word = STR2CSTR(argv[0]);
-+ str = rb_str_export_to_enc(argv[0], enc);
-+ word = RSTRING_PTR(str);
- }
- else {
-- set_keywords(argv[0], buffer);
-+ set_keywords(argv[0], buffer, gc_guard, enc);
- word = buffer;
- }
- max = (argc > 1) ? NUM2INT(argv[1]) : -1;
-@@ -775,6 +847,7 @@
- VALUE robj;
-
- Data_Get_Struct(obj, EB_Book, eb);
-+ reb_check_type(position, cEBPosition);
- Data_Get_Struct(position, EB_Position, ppos);
- apx = get_eb_appendix(obj);
- thook = get_eb_texthook(obj);
-@@ -785,7 +858,7 @@
- do {
- rb_yield(robj);
- robj = content_read(obj, eb, apx, thook);
-- dlen = MAX_STRLEN - RSTRING(robj)->len;
-+ dlen = MAX_STRLEN - RSTRING_LEN(robj);
- } while (dlen == 0);
- }
- return robj;
-@@ -803,7 +876,7 @@
- static VALUE
- reb_sethookset(VALUE obj, VALUE hkset)
- {
-- if (rb_funcall(hkset, rb_intern("is_a?"), 1, cEBHook) != Qtrue && hkset != Qnil) {
-+ if (!rb_obj_is_kind_of(hkset, cEBHook) && !NIL_P(hkset)) {
- rb_raise(rb_eArgError, "hookset must be nil or an instance of Hookset");
- return Qfalse;
- }
-@@ -874,7 +947,7 @@
- return robj;
- }
-
--EB_Font_Code
-+static EB_Font_Code
- get_fontcode(EB_Book * eb)
- {
- EB_Font_Code r;
-@@ -991,7 +1064,7 @@
- {
- char buffer[MAX_STRLEN];
- long readbytes;
-- int bitmap_len;
-+ ssize_t bitmap_len;
- int blocksize;
- EB_Error_Code retcode;
- VALUE robj;
-@@ -1010,7 +1083,7 @@
- while (bitmap_len != 0) {
- retcode = eb_read_binary(eb, blocksize, buffer, &bitmap_len);
- if (retcode != EB_SUCCESS) {
-- rb_raise(rb_eRuntimeError, eb_error_message(retcode));
-+ rb_raise(rb_eRuntimeError, "%s", eb_error_message(retcode));
- return Qfalse;
- }
- if (iterateflag) {
-@@ -1024,6 +1097,7 @@
- break;
- }
- }
-+ rb_obj_taint(robj);
-
- return iterateflag ? INT2NUM(readbytes) : robj;
- }
-@@ -1036,6 +1110,7 @@
- EB_Position *epos;
-
- Data_Get_Struct(obj, EB_Book, eb);
-+ reb_check_type(pos, cEBPosition);
- Data_Get_Struct(pos, EB_Position, epos);
-
- retcode = eb_set_binary_mono_graphic(eb, epos, NUM2UINT(width), NUM2UINT(height));
-@@ -1086,7 +1161,9 @@
- maxlen = (argc > 2) ? NUM2UINT(argv[2]) : MAX_STRLEN;
-
- Data_Get_Struct(obj, EB_Book, eb);
-+ reb_check_type(argv[0], cEBPosition);
- Data_Get_Struct(argv[0], EB_Position, spos);
-+ reb_check_type(argv[1], cEBPosition);
- Data_Get_Struct(argv[1], EB_Position, epos);
-
- retcode = eb_set_binary_wave(eb, spos, epos);
-@@ -1104,7 +1181,7 @@
- EB_Error_Code retcode;
- EB_Book *eb;
- long maxlen;
-- int param[4];
-+ unsigned int param[4];
- int i;
-
- if (argc < 4) {
-@@ -1129,8 +1206,8 @@
- reb_compose_mpegfilename(int argc, VALUE * argv, VALUE obj)
- {
- EB_Error_Code retcode;
-- char buffer[1024];
-- int param[4];
-+ char buffer[EB_MAX_DIRECTORY_NAME_LENGTH + 1];
-+ unsigned int param[4];
- int i;
- if (argc != 4) {
- rb_raise(rb_eArgError, "4 args needed.(code1-code4)");
-@@ -1174,7 +1251,7 @@
- return Qnil;
- }
- else if (err != EB_SUCCESS) {
-- rb_raise(rb_eRuntimeError, eb_error_message(err));
-+ rb_raise(rb_eRuntimeError, "%s", eb_error_message(err));
- return Qfalse;
- }
- return content_fetch_from_pos(obj, eb, &pos,
-@@ -1212,7 +1289,7 @@
- EB_Appendix *appendix;
- appendix = get_eb_appendix(obj);
- if (path != Qnil) {
-- eb_bind_appendix(appendix, STR2CSTR(path));
-+ eb_bind_appendix(appendix, StringValueCStr(path));
- }
- else {
- eb_finalize_appendix(appendix);
-@@ -1291,7 +1368,7 @@
- };
-
- (*conv_func) (font->bitmap, width, height, buffer, &size);
-- robj = rb_str_new(buffer, size);
-+ robj = rb_tainted_str_new(buffer, size);
- free(buffer);
- return robj;
- }
-@@ -1439,13 +1516,17 @@
- break;
- case 2:
- proc = argv[1];
-+ if (!rb_respond_to(proc, id_call)) {
-+ rb_raise(rb_eArgError, "wrong type argument %s (should respond to 'call')",
-+ rb_obj_classname(proc));
-+ }
- break;
- default:
- rb_raise(rb_eArgError, "wrong # of arguments");
- break;
- }
-
-- hook_type = FIX2UINT(argv[0]);
-+ hook_type = NUM2UINT(argv[0]);
- rb_ary_store(rb_iv_get(self, HOOKSET_PROCS_IVAR), hook_type, proc);
- Data_Get_Struct(self, EB_Hookset, text_hookset);
- hook.code = hook_type;
-@@ -1485,7 +1566,7 @@
- return Qfalse;
- }
-
--void
-+static void
- define_constants_under(VALUE mod)
- {
- rb_define_const(mod, "HOOK_INITIALIZE", INT2FIX(EB_HOOK_INITIALIZE));
-@@ -1557,7 +1638,19 @@
- void
- Init_eb()
- {
-+#ifdef HAVE_EB_PTHREAD_ENABLED
-+#ifdef RUBY_EB_ENABLE_PTHREAD
-+ if (!eb_pthread_enabled()) {
-+ rb_raise(rb_eRuntimeError, "The RubyEB is compiled for pthread-enabled EB library.");
-+ }
-+#else
-+ if (eb_pthread_enabled()) {
-+ rb_raise(rb_eRuntimeError, "The RubyEB is compiled for pthread-disabled EB library.");
-+ }
-+#endif
-+#endif
- id_call = rb_intern("call");
-+ id_eb_encidx = rb_intern("@__ruby_eb_encidx__");
-
- mEB = rb_define_module("EB");
- rb_define_const(mEB,"RUBYEB_VERSION",rb_str_new2(RUBYEB_VERSION));