|
rpm
5.4.4
|
00001 00006 #include "system.h" 00007 #include "rpm-rb.h" 00008 00009 #include "rpmds-rb.h" 00010 00011 #ifdef NOTYET 00012 #include <argv.h> 00013 #include <mire.h> 00014 #endif 00015 00016 #define _RPMDS_INTERNAL 00017 #include <rpmtag.h> 00018 #include <rpmtypes.h> 00019 #include <rpmtag.h> 00020 #include <rpmio.h> 00021 #include <rpmds.h> 00022 00023 #include "../debug.h" 00024 00025 00026 VALUE rpmdsClass; 00027 00028 00029 /*@unchecked@*/ 00030 static int _debug = 0; 00031 00032 /* --- helpers */ 00033 static void * 00034 rpmds_ptr(VALUE s) 00035 { 00036 void *ptr; 00037 Data_Get_Struct(s, void, ptr); 00038 return ptr; 00039 } 00040 00041 /* --- Object methods */ 00042 00043 static void 00044 initMethods(VALUE klass) 00045 { 00046 } 00047 00048 /* --- Object properties */ 00049 static VALUE 00050 rpmds_debug_get(VALUE s) 00051 { 00052 if (_debug) 00053 fprintf(stderr, "==> %s(0x%lx)\n", __FUNCTION__, s); 00054 return INT2FIX(_debug); 00055 } 00056 00057 static VALUE 00058 rpmds_debug_set(VALUE s, VALUE v) 00059 { 00060 if (_debug) 00061 fprintf(stderr, "==> %s(0x%lx, 0x%lx)\n", __FUNCTION__, s, v); 00062 return INT2FIX(_debug = FIX2INT(v)); 00063 } 00064 00065 static VALUE 00066 rpmds_Count_get(VALUE s) 00067 { 00068 rpmds ds = rpmds_ptr(s); 00069 if (_debug) 00070 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00071 return INT2FIX(rpmdsCount(ds)); 00072 } 00073 00074 /* XXX FIXME: what to call the method? */ 00075 static VALUE 00076 rpmds_Type_get(VALUE s) 00077 { 00078 rpmds ds = rpmds_ptr(s); 00079 if (_debug) 00080 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00081 return rb_str_new2(rpmdsType(ds)); 00082 } 00083 00084 static VALUE 00085 rpmds_Ix_get(VALUE s) 00086 { 00087 rpmds ds = rpmds_ptr(s); 00088 if (_debug) 00089 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00090 return INT2FIX(rpmdsIx(ds)); 00091 } 00092 00093 static VALUE 00094 rpmds_Ix_set(VALUE s, VALUE v) 00095 { 00096 rpmds ds = rpmds_ptr(s); 00097 int ix = FIX2INT(v); 00098 if (_debug) 00099 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00100 if (ix != rpmdsIx(ds)) { 00101 (void) rpmdsSetIx(ds, ix-1); 00102 /* XXX flush and recreate N and DNEVR with a rpmdsNext() step */ 00103 (void) rpmdsNext(ds); 00104 } 00105 return INT2FIX(rpmdsIx(ds)); 00106 } 00107 00108 static VALUE 00109 rpmds_BT_get(VALUE s) 00110 { 00111 rpmds ds = rpmds_ptr(s); 00112 if (_debug) 00113 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00114 return INT2FIX(rpmdsBT(ds)); 00115 } 00116 00117 static VALUE 00118 rpmds_BT_set(VALUE s, VALUE v) 00119 { 00120 rpmds ds = rpmds_ptr(s); 00121 int BT = FIX2INT(v); 00122 if (_debug) 00123 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00124 (void) rpmdsSetBT(ds, BT); 00125 return INT2FIX(rpmdsBT(ds)); 00126 } 00127 00128 static VALUE 00129 rpmds_Color_get(VALUE s) 00130 { 00131 rpmds ds = rpmds_ptr(s); 00132 if (_debug) 00133 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00134 return INT2FIX(rpmdsColor(ds)); 00135 } 00136 00137 static VALUE 00138 rpmds_Color_set(VALUE s, VALUE v) 00139 { 00140 rpmds ds = rpmds_ptr(s); 00141 int color = FIX2INT(v); 00142 if (_debug) 00143 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00144 (void) rpmdsSetColor(ds, color); 00145 return INT2FIX(rpmdsColor(ds)); 00146 } 00147 00148 static VALUE 00149 rpmds_NoPromote_get(VALUE s) 00150 { 00151 rpmds ds = rpmds_ptr(s); 00152 if (_debug) 00153 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00154 return INT2FIX(rpmdsNoPromote(ds)); 00155 } 00156 00157 static VALUE 00158 rpmds_NoPromote_set(VALUE s, VALUE v) 00159 { 00160 rpmds ds = rpmds_ptr(s); 00161 int nopromote = FIX2INT(v); 00162 if (_debug) 00163 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00164 (void) rpmdsSetNoPromote(ds, nopromote); 00165 return INT2FIX(rpmdsNoPromote(ds)); 00166 } 00167 00168 static VALUE 00169 rpmds_N_get(VALUE s) 00170 { 00171 rpmds ds = rpmds_ptr(s); 00172 if (_debug) 00173 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00174 return rb_str_new2(rpmdsN(ds)); 00175 } 00176 00177 static VALUE 00178 rpmds_EVR_get(VALUE s) 00179 { 00180 rpmds ds = rpmds_ptr(s); 00181 if (_debug) 00182 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00183 return rb_str_new2(rpmdsEVR(ds)); 00184 } 00185 00186 static VALUE 00187 rpmds_Flags_get(VALUE s) 00188 { 00189 rpmds ds = rpmds_ptr(s); 00190 if (_debug) 00191 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00192 return INT2FIX(rpmdsFlags(ds)); 00193 } 00194 00195 static VALUE 00196 rpmds_DNEVR_get(VALUE s) 00197 { 00198 rpmds ds = rpmds_ptr(s); 00199 if (_debug) 00200 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds); 00201 return rb_str_new2(rpmdsDNEVR(ds)); 00202 } 00203 00204 static void 00205 initProperties(VALUE klass) 00206 { 00207 rb_define_method(klass, "debug", rpmds_debug_get, 0); 00208 rb_define_method(klass, "debug=", rpmds_debug_set, 1); 00209 rb_define_method(klass, "length", rpmds_Count_get, 0); 00210 rb_define_method(klass, "ix", rpmds_Ix_get, 0); 00211 rb_define_method(klass, "ix=", rpmds_Ix_set, 1); 00212 rb_define_method(klass, "Type", rpmds_Type_get, 0); 00213 rb_define_method(klass, "buildtime", rpmds_BT_get, 0); 00214 rb_define_method(klass, "buildtime=", rpmds_BT_set, 1); 00215 rb_define_method(klass, "color", rpmds_Color_get, 0); 00216 rb_define_method(klass, "color=", rpmds_Color_set, 1); 00217 rb_define_method(klass, "nopromote", rpmds_NoPromote_get, 0); 00218 rb_define_method(klass, "nopromote=", rpmds_NoPromote_set, 1); 00219 rb_define_method(klass, "N", rpmds_N_get, 0); 00220 rb_define_method(klass, "EVR", rpmds_EVR_get, 0); 00221 rb_define_method(klass, "F", rpmds_Flags_get, 0); 00222 rb_define_method(klass, "DNEVR", rpmds_DNEVR_get, 0); 00223 } 00224 00225 /* --- Object ctors/dtors */ 00226 static void 00227 rpmds_free(rpmds ds) 00228 { 00229 if (_debug) 00230 fprintf(stderr, "==> %s(%p)\n", __FUNCTION__, ds); 00231 ds = rpmdsFree(ds); 00232 } 00233 00234 static VALUE 00235 rpmds_new(int argc, VALUE *argv, VALUE s) 00236 { 00237 VALUE v_hdr, v_tag; 00238 rpmTag tag = RPMTAG_NAME; 00239 int flags = 0; 00240 rpmds ds; 00241 00242 rb_scan_args(argc, argv, "02", &v_hdr, &v_tag); 00243 00244 if (!NIL_P(v_tag)) 00245 tag = FIX2INT(v_tag); 00246 00247 if (!NIL_P(v_hdr)) { 00248 Header h = rpmds_ptr(v_hdr); 00249 ds = rpmdsNew(h, tag, flags); 00250 } else 00251 (void) rpmdsRpmlib(&ds, NULL); 00252 00253 if (_debug) 00254 fprintf(stderr, "==> %s(%p[%d], 0x%lx) mi %p\n", __FUNCTION__, argv, argc, s, ds); 00255 return Data_Wrap_Struct(s, 0, rpmds_free, ds); 00256 } 00257 00258 /* --- Class initialization */ 00259 00260 void 00261 Init_rpmds(void) 00262 { 00263 rpmdsClass = rb_define_class_under(rpmModule, "Ds", rb_cObject); 00264 if (_debug) 00265 fprintf(stderr, "==> %s() rpmdsClass 0x%lx\n", __FUNCTION__, rpmdsClass); 00266 #ifdef NOTYET 00267 rb_include_module(rpmdsClass, rb_mEnumerable); 00268 #endif 00269 rb_define_singleton_method(rpmdsClass, "new", rpmds_new, -1); 00270 initProperties(rpmdsClass); 00271 initMethods(rpmdsClass); 00272 } 00273 00274 VALUE 00275 rpmrb_NewDs(void *_ds) 00276 { 00277 return Data_Wrap_Struct(rpmdsClass, 0, rpmds_free, _ds); 00278 } 00279
1.7.5.1