diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-09-11 12:52:49 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-09-11 12:52:49 -0500 |
commit | ef7a60860d18e9be343b6fa5fe8d76fd080cead0 (patch) | |
tree | 640a3f17c9f0e1d133b05f1eb434d13057a78e8d /qtruby/rubylib/qtruby/Qt.cpp | |
parent | 46659f992d49f86347c43528a8705657b6896cb7 (diff) | |
download | tdebindings-ef7a60860d18e9be343b6fa5fe8d76fd080cead0.tar.gz tdebindings-ef7a60860d18e9be343b6fa5fe8d76fd080cead0.zip |
Fix FTBS on ruby 1.9.x
Thanks to Darrell Anderson for the majority of the patch!
Diffstat (limited to 'qtruby/rubylib/qtruby/Qt.cpp')
-rw-r--r-- | qtruby/rubylib/qtruby/Qt.cpp | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/qtruby/rubylib/qtruby/Qt.cpp b/qtruby/rubylib/qtruby/Qt.cpp index 3d71cfc4..370ad6d1 100644 --- a/qtruby/rubylib/qtruby/Qt.cpp +++ b/qtruby/rubylib/qtruby/Qt.cpp @@ -60,6 +60,14 @@ #include "smokeruby.h" #include "smoke.h" +#include "config.h" + +#ifndef HAVE_RUBY_1_9 +#define RARRAY_LEN(x) (RARRAY(x)->len) +#define RSTRING_LEN(x) (RSTRING(x)->len) +#define rb_str_catf_1 rb_str_catf +#endif + // #define DEBUG #define TQTRUBY_VERSION "1.0.13" @@ -110,7 +118,7 @@ bool application_terminated = false; }; #define logger logger_backend -void rb_str_catf(VALUE self, const char *format, ...) __attribute__ ((format (printf, 2, 3))); +void rb_str_catf_1(VALUE self, const char *format, ...) __attribute__ ((format (printf, 2, 3))); static VALUE (*_new_kde)(int, VALUE *, VALUE) = 0; static VALUE (*_kconfigskeletonitem_immutable)(VALUE) = 0; @@ -820,7 +828,7 @@ public: } }; -void rb_str_catf(VALUE self, const char *format, ...) +void rb_str_catf_1(VALUE self, const char *format, ...) { va_list ap; va_start(ap, format); @@ -985,16 +993,16 @@ VALUE prettyPrintMethod(Smoke::Index id) VALUE r = rb_str_new2(""); Smoke::Method &meth = qt_Smoke->methods[id]; const char *tname = qt_Smoke->types[meth.ret].name; - if(meth.flags & Smoke::mf_static) rb_str_catf(r, "static "); - rb_str_catf(r, "%s ", (tname ? tname:"void")); - rb_str_catf(r, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]); + if(meth.flags & Smoke::mf_static) rb_str_catf_1(r, "static "); + rb_str_catf_1(r, "%s ", (tname ? tname:"void")); + rb_str_catf_1(r, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]); for(int i = 0; i < meth.numArgs; i++) { - if(i) rb_str_catf(r, ", "); + if(i) rb_str_catf_1(r, ", "); tname = qt_Smoke->types[qt_Smoke->argumentList[meth.args+i]].name; - rb_str_catf(r, "%s", (tname ? tname:"void")); + rb_str_catf_1(r, "%s", (tname ? tname:"void")); } - rb_str_catf(r, ")"); - if(meth.flags & Smoke::mf_const) rb_str_catf(r, " const"); + rb_str_catf_1(r, ")"); + if(meth.flags & Smoke::mf_const) rb_str_catf_1(r, " const"); return r; } @@ -1177,7 +1185,7 @@ inspect_qobject(VALUE self) // Start with #<TQt::HBoxLayout:0x30139030> from the original inspect() call // Drop the closing '>' VALUE inspect_str = rb_call_super(0, 0); - rb_str_resize(inspect_str, RSTRING(inspect_str)->len - 1); + rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1); smokeruby_object * o = 0; Data_Get_Struct(self, smokeruby_object, o); @@ -1220,7 +1228,7 @@ pretty_print_qobject(VALUE self, VALUE pp) // Start with #<TQt::HBoxLayout:0x30139030> // Drop the closing '>' VALUE inspect_str = rb_funcall(self, rb_intern("to_s"), 0, 0); - rb_str_resize(inspect_str, RSTRING(inspect_str)->len - 1); + rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1); rb_funcall(pp, rb_intern("text"), 1, inspect_str); rb_funcall(pp, rb_intern("breakable"), 0); @@ -1236,7 +1244,7 @@ pretty_print_qobject(VALUE self, VALUE pp) VALUE obj = getPointerObject(qobject->parent()); if (obj != Qnil) { VALUE parent_inspect_str = rb_funcall(obj, rb_intern("to_s"), 0, 0); - rb_str_resize(parent_inspect_str, RSTRING(parent_inspect_str)->len - 1); + rb_str_resize(parent_inspect_str, RSTRING_LEN(parent_inspect_str) - 1); parentInspectString = StringValuePtr(parent_inspect_str); } else { parentInspectString.sprintf("#<%s:0x0", qobject->parent()->className()); @@ -1382,7 +1390,7 @@ static Smoke::Index new_qvariant_qmap = 0; return *(c.var()); } else if ( argc == 1 && TYPE(argv[0]) == T_ARRAY - && RARRAY(argv[0])->len > 0 + && RARRAY_LEN(argv[0]) > 0 && TYPE(rb_ary_entry(argv[0], 0)) != T_STRING ) { _current_method = new_qvariant_qlist; @@ -1741,7 +1749,7 @@ new_qapplication(int argc, VALUE * argv, VALUE klass) VALUE * local_argv = (VALUE *) calloc(argc + 1, sizeof(VALUE)); VALUE temp = rb_ary_dup(argv[0]); rb_ary_unshift(temp, rb_gv_get("$0")); - local_argv[0] = INT2NUM(RARRAY(temp)->len); + local_argv[0] = INT2NUM(RARRAY_LEN(temp)); local_argv[1] = temp; result = new_qt(2, local_argv, klass); free(local_argv); @@ -1772,7 +1780,7 @@ qapplication_argv(VALUE /*self*/) VALUE getmetainfo(VALUE self, int &offset, int &index) { - const char * signalname = rb_id2name(rb_frame_last_func()); + const char * signalname = rb_id2name(rb_frame_this_func()); VALUE metaObject_value = rb_funcall(qt_internal_module, rb_intern("getMetaObject"), 1, self); smokeruby_object *ometa = value_obj_info(metaObject_value); @@ -1862,7 +1870,7 @@ tqt_invoke(int /*argc*/, VALUE * argv, VALUE self) // Now, I need to find out if this means me int index; char *slotname; - bool isSignal = tqstrcmp(rb_id2name(rb_frame_last_func()), "qt_emit") == 0; + bool isSignal = tqstrcmp(rb_id2name(rb_frame_this_func()), "qt_emit") == 0; VALUE mocArgs = getslotinfo(self, id, slotname, index, isSignal); if(mocArgs == Qnil) { // No ruby slot/signal found, assume the target is a C++ one @@ -2009,7 +2017,7 @@ qbytearray_setRawData(VALUE self, VALUE data) return Qnil; } TQByteArray * dataArray = (TQByteArray*) o->ptr; - dataArray->setRawData(StringValuePtr(data), RSTRING(data)->len); + dataArray->setRawData(StringValuePtr(data), RSTRING_LEN(data)); return self; } @@ -2195,7 +2203,7 @@ make_QUMethod(VALUE /*self*/, VALUE name_value, VALUE params) m->name = new char[strlen(name) + 1]; // this too strcpy((char*)m->name, name); m->parameters = 0; - m->count = RARRAY(params)->len; + m->count = RARRAY_LEN(params); if (m->count > 0) { m->parameters = new TQUParameter[m->count]; @@ -2213,7 +2221,7 @@ make_QUMethod(VALUE /*self*/, VALUE name_value, VALUE params) static VALUE make_QMetaData_tbl(VALUE /*self*/, VALUE list) { - long count = RARRAY(list)->len; + long count = RARRAY_LEN(list); TQMetaData *m = new TQMetaData[count]; for (long i = 0; i < count; i++) { @@ -2281,7 +2289,7 @@ add_metaobject_methods(VALUE self, VALUE klass) static VALUE add_signal_methods(VALUE self, VALUE klass, VALUE signalNames) { - for (long index = 0; index < RARRAY(signalNames)->len; index++) { + for (long index = 0; index < RARRAY_LEN(signalNames); index++) { VALUE signal = rb_ary_entry(signalNames, index); rb_define_method(klass, StringValuePtr(signal), (VALUE (*) (...)) qt_signal, -1); } @@ -2597,28 +2605,28 @@ dumpCandidates(VALUE /*self*/, VALUE rmeths) { VALUE errmsg = rb_str_new2(""); if(rmeths != Qnil) { - int count = RARRAY(rmeths)->len; + int count = RARRAY_LEN(rmeths); for(int i = 0; i < count; i++) { - rb_str_catf(errmsg, "\t"); + rb_str_catf_1(errmsg, "\t"); int id = NUM2INT(rb_ary_entry(rmeths, i)); Smoke::Method &meth = qt_Smoke->methods[id]; const char *tname = qt_Smoke->types[meth.ret].name; if(meth.flags & Smoke::mf_enum) { - rb_str_catf(errmsg, "enum "); - rb_str_catf(errmsg, "%s::%s", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]); - rb_str_catf(errmsg, "\n"); + rb_str_catf_1(errmsg, "enum "); + rb_str_catf_1(errmsg, "%s::%s", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]); + rb_str_catf_1(errmsg, "\n"); } else { if(meth.flags & Smoke::mf_static) rb_str_catf(errmsg, "static "); - rb_str_catf(errmsg, "%s ", (tname ? tname:"void")); - rb_str_catf(errmsg, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]); + rb_str_catf_1(errmsg, "%s ", (tname ? tname:"void")); + rb_str_catf_1(errmsg, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]); for(int i = 0; i < meth.numArgs; i++) { - if(i) rb_str_catf(errmsg, ", "); + if(i) rb_str_catf_1(errmsg, ", "); tname = qt_Smoke->types[qt_Smoke->argumentList[meth.args+i]].name; - rb_str_catf(errmsg, "%s", (tname ? tname:"void")); + rb_str_catf_1(errmsg, "%s", (tname ? tname:"void")); } - rb_str_catf(errmsg, ")"); - if(meth.flags & Smoke::mf_const) rb_str_catf(errmsg, " const"); - rb_str_catf(errmsg, "\n"); + rb_str_catf_1(errmsg, ")"); + if(meth.flags & Smoke::mf_const) rb_str_catf_1(errmsg, " const"); + rb_str_catf_1(errmsg, "\n"); } } } |