rpm  5.4.14
rpmds-rb.c
Go to the documentation of this file.
1 
6 #include "system.h"
7 #include "rpm-rb.h"
8 
9 #include "rpmds-rb.h"
10 
11 #ifdef NOTYET
12 #include <argv.h>
13 #include <mire.h>
14 #endif
15 
16 #define _RPMDS_INTERNAL
17 #include <rpmtag.h>
18 #include <rpmtypes.h>
19 #include <rpmtag.h>
20 #include <rpmio.h>
21 #include <rpmds.h>
22 
23 #include "../debug.h"
24 
25 
26 VALUE rpmdsClass;
27 
28 
29 /*@unchecked@*/
30 static int _debug = 0;
31 
32 /* --- helpers */
33 static void *
34 rpmds_ptr(VALUE s)
35 {
36  void *ptr;
37  Data_Get_Struct(s, void, ptr);
38  return ptr;
39 }
40 
41 /* --- Object methods */
42 
43 static void
44 initMethods(VALUE klass)
45 {
46 }
47 
48 /* --- Object properties */
49 static VALUE
51 {
52 if (_debug)
53 fprintf(stderr, "==> %s(0x%lx)\n", __FUNCTION__, s);
54  return INT2FIX(_debug);
55 }
56 
57 static VALUE
58 rpmds_debug_set(VALUE s, VALUE v)
59 {
60 if (_debug)
61 fprintf(stderr, "==> %s(0x%lx, 0x%lx)\n", __FUNCTION__, s, v);
62  return INT2FIX(_debug = FIX2INT(v));
63 }
64 
65 static VALUE
67 {
68  rpmds ds = rpmds_ptr(s);
69 if (_debug)
70 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
71  return INT2FIX(rpmdsCount(ds));
72 }
73 
74 /* XXX FIXME: what to call the method? */
75 static VALUE
77 {
78  rpmds ds = rpmds_ptr(s);
79 if (_debug)
80 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
81  return rb_str_new2(rpmdsType(ds));
82 }
83 
84 static VALUE
86 {
87  rpmds ds = rpmds_ptr(s);
88 if (_debug)
89 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
90  return INT2FIX(rpmdsIx(ds));
91 }
92 
93 static VALUE
94 rpmds_Ix_set(VALUE s, VALUE v)
95 {
96  rpmds ds = rpmds_ptr(s);
97  int ix = FIX2INT(v);
98 if (_debug)
99 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
100  if (ix != rpmdsIx(ds)) {
101  (void) rpmdsSetIx(ds, ix-1);
102  /* XXX flush and recreate N and DNEVR with a rpmdsNext() step */
103  (void) rpmdsNext(ds);
104  }
105  return INT2FIX(rpmdsIx(ds));
106 }
107 
108 static VALUE
110 {
111  rpmds ds = rpmds_ptr(s);
112 if (_debug)
113 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
114  return INT2FIX(rpmdsBT(ds));
115 }
116 
117 static VALUE
118 rpmds_BT_set(VALUE s, VALUE v)
119 {
120  rpmds ds = rpmds_ptr(s);
121  int BT = FIX2INT(v);
122 if (_debug)
123 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
124  (void) rpmdsSetBT(ds, BT);
125  return INT2FIX(rpmdsBT(ds));
126 }
127 
128 static VALUE
130 {
131  rpmds ds = rpmds_ptr(s);
132 if (_debug)
133 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
134  return INT2FIX(rpmdsColor(ds));
135 }
136 
137 static VALUE
138 rpmds_Color_set(VALUE s, VALUE v)
139 {
140  rpmds ds = rpmds_ptr(s);
141  int color = FIX2INT(v);
142 if (_debug)
143 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
144  (void) rpmdsSetColor(ds, color);
145  return INT2FIX(rpmdsColor(ds));
146 }
147 
148 static VALUE
150 {
151  rpmds ds = rpmds_ptr(s);
152 if (_debug)
153 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
154  return INT2FIX(rpmdsNoPromote(ds));
155 }
156 
157 static VALUE
158 rpmds_NoPromote_set(VALUE s, VALUE v)
159 {
160  rpmds ds = rpmds_ptr(s);
161  int nopromote = FIX2INT(v);
162 if (_debug)
163 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
164  (void) rpmdsSetNoPromote(ds, nopromote);
165  return INT2FIX(rpmdsNoPromote(ds));
166 }
167 
168 static VALUE
170 {
171  rpmds ds = rpmds_ptr(s);
172 if (_debug)
173 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
174  return rb_str_new2(rpmdsN(ds));
175 }
176 
177 static VALUE
179 {
180  rpmds ds = rpmds_ptr(s);
181 if (_debug)
182 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
183  return rb_str_new2(rpmdsEVR(ds));
184 }
185 
186 static VALUE
188 {
189  rpmds ds = rpmds_ptr(s);
190 if (_debug)
191 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
192  return INT2FIX(rpmdsFlags(ds));
193 }
194 
195 static VALUE
197 {
198  rpmds ds = rpmds_ptr(s);
199 if (_debug)
200 fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, s, ds);
201  return rb_str_new2(rpmdsDNEVR(ds));
202 }
203 
204 static void
205 initProperties(VALUE klass)
206 {
207  rb_define_method(klass, "debug", rpmds_debug_get, 0);
208  rb_define_method(klass, "debug=", rpmds_debug_set, 1);
209  rb_define_method(klass, "length", rpmds_Count_get, 0);
210  rb_define_method(klass, "ix", rpmds_Ix_get, 0);
211  rb_define_method(klass, "ix=", rpmds_Ix_set, 1);
212  rb_define_method(klass, "Type", rpmds_Type_get, 0);
213  rb_define_method(klass, "buildtime", rpmds_BT_get, 0);
214  rb_define_method(klass, "buildtime=", rpmds_BT_set, 1);
215  rb_define_method(klass, "color", rpmds_Color_get, 0);
216  rb_define_method(klass, "color=", rpmds_Color_set, 1);
217  rb_define_method(klass, "nopromote", rpmds_NoPromote_get, 0);
218  rb_define_method(klass, "nopromote=", rpmds_NoPromote_set, 1);
219  rb_define_method(klass, "N", rpmds_N_get, 0);
220  rb_define_method(klass, "EVR", rpmds_EVR_get, 0);
221  rb_define_method(klass, "F", rpmds_Flags_get, 0);
222  rb_define_method(klass, "DNEVR", rpmds_DNEVR_get, 0);
223 }
224 
225 /* --- Object ctors/dtors */
226 static void
228 {
229 if (_debug)
230 fprintf(stderr, "==> %s(%p)\n", __FUNCTION__, ds);
231  ds = rpmdsFree(ds);
232 }
233 
234 static VALUE
235 rpmds_new(int argc, VALUE *argv, VALUE s)
236 {
237  VALUE v_hdr, v_tag;
239  int flags = 0;
240  rpmds ds;
241 
242  rb_scan_args(argc, argv, "02", &v_hdr, &v_tag);
243 
244  if (!NIL_P(v_tag))
245  tag = FIX2INT(v_tag);
246 
247  if (!NIL_P(v_hdr)) {
248  Header h = rpmds_ptr(v_hdr);
249  ds = rpmdsNew(h, tag, flags);
250  } else
251  (void) rpmdsRpmlib(&ds, NULL);
252 
253 if (_debug)
254 fprintf(stderr, "==> %s(%p[%d], 0x%lx) mi %p\n", __FUNCTION__, argv, argc, s, ds);
255  return Data_Wrap_Struct(s, 0, rpmds_free, ds);
256 }
257 
258 /* --- Class initialization */
259 
260 void
262 {
263  rpmdsClass = rb_define_class_under(rpmModule, "Ds", rb_cObject);
264 if (_debug)
265 fprintf(stderr, "==> %s() rpmdsClass 0x%lx\n", __FUNCTION__, rpmdsClass);
266 #ifdef NOTYET
267  rb_include_module(rpmdsClass, rb_mEnumerable);
268 #endif
269  rb_define_singleton_method(rpmdsClass, "new", rpmds_new, -1);
272 }
273 
274 VALUE
275 rpmrb_NewDs(void *_ds)
276 {
277  return Data_Wrap_Struct(rpmdsClass, 0, rpmds_free, _ds);
278 }
279 
int rpmdsNext(rpmds ds)
Return next dependency set iterator index.
Definition: rpmds.c:912
static int _debug
Definition: rpmds-rb.c:30
static void initProperties(VALUE klass)
Definition: rpmds-rb.c:205
static VALUE rpmds_debug_set(VALUE s, VALUE v)
Definition: rpmds-rb.c:58
VALUE rpmrb_NewDs(void *_ds)
Definition: rpmds-rb.c:275
static VALUE rpmds_N_get(VALUE s)
Definition: rpmds-rb.c:169
static VALUE rpmds_Type_get(VALUE s)
Definition: rpmds-rb.c:76
static VALUE rpmds_NoPromote_set(VALUE s, VALUE v)
Definition: rpmds-rb.c:158
evrFlags rpmdsFlags(const rpmds ds)
Return current dependency flags.
Definition: rpmds.c:691
The Header data structure.
static VALUE rpmds_Flags_get(VALUE s)
Definition: rpmds-rb.c:187
int rpmdsIx(const rpmds ds)
Return dependency set index.
Definition: rpmds.c:641
enum rpmTag_e rpmTag
Definition: rpmtag.h:468
static VALUE rpmds_Ix_get(VALUE s)
Definition: rpmds-rb.c:85
rpmds rpmdsNew(Header h, rpmTag tagN, int flags)
Create and load a dependency set.
Definition: rpmds.c:238
Header h
Definition: spec.c:739
argv
Definition: rpmmtree.c:3679
static void * rpmds_ptr(VALUE s)
Definition: rpmds-rb.c:34
exit Fhe p ptr
Definition: db3.c:2119
static VALUE rpmds_BT_get(VALUE s)
Definition: rpmds-rb.c:109
static VALUE rpmds_Color_get(VALUE s)
Definition: rpmds-rb.c:129
int ix
Definition: rpmps-py.c:174
int rpmdsSetIx(rpmds ds, int ix)
Set dependency set index.
Definition: rpmds.c:646
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
static VALUE rpmds_Count_get(VALUE s)
Definition: rpmds-rb.c:66
RPM pattern matching.
static VALUE rpmds_Color_set(VALUE s, VALUE v)
Definition: rpmds-rb.c:138
he tag
Definition: db3.c:1927
static void rpmds_free(rpmds ds)
Definition: rpmds-rb.c:227
time_t rpmdsBT(const rpmds ds)
Return dependency build time.
Definition: rpmds.c:720
int rpmdsNoPromote(const rpmds ds)
Return current &quot;Don&#39;t promote Epoch:&quot; flag.
Definition: rpmds.c:746
void Init_rpmds(void)
Definition: rpmds-rb.c:261
static void initMethods(VALUE klass)
Definition: rpmds-rb.c:44
Structure(s) used for dependency tag sets.
const char * rpmdsType(const rpmds ds)
Return current dependency type name.
Definition: rpmds.c:162
int rpmdsCount(const rpmds ds)
Return dependency set count.
Definition: rpmds.c:636
VALUE rpmdsClass
Definition: rpmds-rb.c:26
rpmuint32_t rpmdsSetColor(const rpmds ds, rpmuint32_t color)
Set current dependency color.
Definition: rpmds.c:800
struct rpmds_s * rpmds
Dependency tag sets from a header, so that a header can be discarded early.
Definition: rpmtypes.h:28
RPM Ruby bindings &quot;RPM&quot; module.
rpmds rpmdsFree(rpmds ds)
Destroy a dependency set.
static VALUE rpmds_NoPromote_get(VALUE s)
Definition: rpmds-rb.c:149
const char * s
Definition: poptALL.c:734
static VALUE rpmds_debug_get(VALUE s)
Definition: rpmds-rb.c:50
int rpmdsRpmlib(rpmds *dsp, void *tblp)
Load rpmlib provides into a dependency set.
Definition: rpmds.c:1577
rpmuint32_t rpmdsColor(const rpmds ds)
Return current dependency color.
Definition: rpmds.c:789
int flags
Definition: fnmatch.c:282
const char * rpmdsEVR(const rpmds ds)
Return current dependency epoch-version-release.
Definition: rpmds.c:680
const char * rpmdsDNEVR(const rpmds ds)
Return current formatted dependency string.
Definition: rpmds.c:657
return NULL
Definition: poptALL.c:613
VALUE rpmModule
The &quot;RPM&quot; Ruby module.
Definition: rpm-rb.c:35
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
Definition: spec.c:737
static VALUE rpmds_new(int argc, VALUE *argv, VALUE s)
Definition: rpmds-rb.c:235
static VALUE rpmds_Ix_set(VALUE s, VALUE v)
Definition: rpmds-rb.c:94
const char * rpmdsN(const rpmds ds)
Return current dependency name.
Definition: rpmds.c:668
time_t rpmdsSetBT(const rpmds ds, time_t BT)
Set dependency build time.
Definition: rpmds.c:728
static VALUE rpmds_DNEVR_get(VALUE s)
Definition: rpmds-rb.c:196
static VALUE rpmds_BT_set(VALUE s, VALUE v)
Definition: rpmds-rb.c:118
int rpmdsSetNoPromote(rpmds ds, int nopromote)
Set &quot;Don&#39;t promote Epoch:&quot; flag.
Definition: rpmds.c:755
static PyObject *rpmds ds
Definition: rpmte-py.c:283
static VALUE rpmds_EVR_get(VALUE s)
Definition: rpmds-rb.c:178