sfcc 0.1.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +24 -0
- data/README.rdoc +16 -0
- data/ext/sfcc/cim_class.c +147 -58
- data/ext/sfcc/cim_class.h +1 -1
- data/ext/sfcc/cim_client.c +187 -198
- data/ext/sfcc/cim_client.h +1 -1
- data/ext/sfcc/cim_enumeration.c +109 -21
- data/ext/sfcc/cim_enumeration.h +1 -1
- data/ext/sfcc/cim_instance.c +70 -77
- data/ext/sfcc/cim_instance.h +1 -1
- data/ext/sfcc/cim_object_path.c +141 -122
- data/ext/sfcc/cim_object_path.h +1 -1
- data/ext/sfcc/cim_string.c +9 -13
- data/ext/sfcc/cim_string.h +1 -1
- data/ext/sfcc/extconf.rb +8 -4
- data/ext/sfcc/sfcc.c +163 -105
- data/ext/sfcc/sfcc.h +15 -40
- data/lib/sfcc.rb +75 -12
- data/lib/sfcc/version.rb +1 -1
- metadata +68 -95
data/ext/sfcc/cim_client.h
CHANGED
data/ext/sfcc/cim_enumeration.c
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
|
2
|
-
#include "sfcc.h"
|
3
2
|
#include "cim_enumeration.h"
|
4
3
|
#include "cim_object_path.h"
|
5
4
|
|
6
5
|
static void
|
7
|
-
dealloc(
|
6
|
+
dealloc(CIMCEnumeration *enm)
|
8
7
|
{
|
9
|
-
|
8
|
+
/* fprintf(stderr, "Sfcc_dealloc_cim_enumeration %p\n", enm); */
|
9
|
+
enm->ft->release(enm);
|
10
10
|
}
|
11
11
|
|
12
12
|
/**
|
@@ -20,34 +20,119 @@ dealloc(CMPIEnumeration *enm)
|
|
20
20
|
*/
|
21
21
|
static VALUE each(VALUE self)
|
22
22
|
{
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
CIMCStatus status;
|
24
|
+
CIMCEnumeration *ptr;
|
25
|
+
CIMCArray *ary;
|
26
|
+
CIMCData data;
|
27
|
+
Data_Get_Struct(self, CIMCEnumeration, ptr);
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
/* since getNext() changes the Enumeration, we cannot iterate
|
30
|
+
use Array representation instead */
|
31
|
+
ary = ptr->ft->toArray(ptr, &status);
|
30
32
|
if (!status.rc) {
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
rb_yield(cimclass);
|
33
|
+
CIMCCount count = ary->ft->getSize(ary, NULL);
|
34
|
+
CIMCCount idx;
|
35
|
+
for (idx = 0; idx < count; ++idx) {
|
36
|
+
VALUE value;
|
37
|
+
data = ary->ft->getElementAt(ary, idx, NULL);
|
38
|
+
value = sfcc_cimdata_to_value(data);
|
39
|
+
rb_yield(value);
|
39
40
|
}
|
41
|
+
return Qnil;
|
40
42
|
}
|
41
43
|
|
42
|
-
tmp->ft->release(tmp);
|
43
44
|
sfcc_rb_raise_if_error(status, "Can't iterate enumeration");
|
44
45
|
return Qnil;
|
45
46
|
}
|
46
47
|
|
48
|
+
|
49
|
+
/**
|
50
|
+
* call-seq:
|
51
|
+
* enumeration.to_a -> Array
|
52
|
+
*
|
53
|
+
* returns an Array representation of the enumeration
|
54
|
+
*
|
55
|
+
*/
|
56
|
+
static VALUE to_a(VALUE self)
|
57
|
+
{
|
58
|
+
CIMCStatus status;
|
59
|
+
CIMCEnumeration *ptr;
|
60
|
+
CIMCArray *ary;
|
61
|
+
Data_Get_Struct(self, CIMCEnumeration, ptr);
|
62
|
+
|
63
|
+
ary = ptr->ft->toArray(ptr, &status);
|
64
|
+
if (!status.rc) {
|
65
|
+
CIMCData data;
|
66
|
+
CIMCCount count = ary->ft->getSize(ary, NULL);
|
67
|
+
VALUE array = rb_ary_new2(count);
|
68
|
+
CIMCCount idx;
|
69
|
+
for (idx = 0; idx < count; ++idx) {
|
70
|
+
VALUE value;
|
71
|
+
data = ary->ft->getElementAt(ary, idx, NULL);
|
72
|
+
value = sfcc_cimdata_to_value(data);
|
73
|
+
rb_ary_store(array, idx, value);
|
74
|
+
}
|
75
|
+
return array;
|
76
|
+
}
|
77
|
+
|
78
|
+
sfcc_rb_raise_if_error(status, "Can't convert enumeration to Array");
|
79
|
+
return Qnil;
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
/**
|
84
|
+
* call-seq:
|
85
|
+
* enumeration.size -> int
|
86
|
+
*
|
87
|
+
* returns the size (number of elements) of the enumeration
|
88
|
+
*
|
89
|
+
*/
|
90
|
+
static VALUE size(VALUE self)
|
91
|
+
{
|
92
|
+
CIMCStatus status;
|
93
|
+
CIMCEnumeration *ptr;
|
94
|
+
CIMCArray *ary;
|
95
|
+
Data_Get_Struct(self, CIMCEnumeration, ptr);
|
96
|
+
|
97
|
+
ary = ptr->ft->toArray(ptr, &status);
|
98
|
+
if (!status.rc) {
|
99
|
+
CIMCCount count = ary->ft->getSize(ary, NULL);
|
100
|
+
return INT2NUM(count);
|
101
|
+
}
|
102
|
+
|
103
|
+
sfcc_rb_raise_if_error(status, "Can't get enumeration size");
|
104
|
+
return Qnil;
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
/**
|
109
|
+
* call-seq:
|
110
|
+
* enumeration.simple_type -> int
|
111
|
+
*
|
112
|
+
* returns the element type of the enumeration elements
|
113
|
+
*
|
114
|
+
*/
|
115
|
+
static VALUE simple_type(VALUE self)
|
116
|
+
{
|
117
|
+
CIMCStatus status;
|
118
|
+
CIMCEnumeration *ptr;
|
119
|
+
CIMCArray *ary;
|
120
|
+
Data_Get_Struct(self, CIMCEnumeration, ptr);
|
121
|
+
|
122
|
+
ary = ptr->ft->toArray(ptr, &status);
|
123
|
+
if (!status.rc) {
|
124
|
+
CIMCType type = ary->ft->getSimpleType(ary, NULL);
|
125
|
+
return INT2NUM(type);
|
126
|
+
}
|
127
|
+
|
128
|
+
sfcc_rb_raise_if_error(status, "Can't get enumeration type");
|
129
|
+
return Qnil;
|
130
|
+
}
|
131
|
+
|
132
|
+
|
47
133
|
VALUE
|
48
|
-
Sfcc_wrap_cim_enumeration(
|
134
|
+
Sfcc_wrap_cim_enumeration(CIMCEnumeration *enm)
|
49
135
|
{
|
50
|
-
SFCC_INC_REFCOUNT(enm);
|
51
136
|
return Data_Wrap_Struct(cSfccCimEnumeration, NULL, dealloc, enm);
|
52
137
|
}
|
53
138
|
|
@@ -60,6 +145,9 @@ void init_cim_enumeration()
|
|
60
145
|
VALUE klass = rb_define_class_under(cimc, "Enumeration", rb_cObject);
|
61
146
|
cSfccCimEnumeration = klass;
|
62
147
|
|
148
|
+
rb_include_module(klass, rb_const_get(rb_cObject, rb_intern("Enumerable")));
|
63
149
|
rb_define_method(klass, "each", each, 0);
|
64
|
-
|
150
|
+
rb_define_method(klass, "to_a", to_a, 0);
|
151
|
+
rb_define_method(klass, "size", size, 0);
|
152
|
+
rb_define_method(klass, "simple_type", simple_type, 0);
|
65
153
|
}
|
data/ext/sfcc/cim_enumeration.h
CHANGED
data/ext/sfcc/cim_instance.c
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
#include "cim_object_path.h"
|
4
4
|
|
5
5
|
static void
|
6
|
-
dealloc(
|
6
|
+
dealloc(CIMCInstance *inst)
|
7
7
|
{
|
8
|
-
|
8
|
+
/* fprintf(stderr, "Sfcc_dealloc_cim_instance %p\n", inst); */
|
9
|
+
inst->ft->release(inst);
|
9
10
|
}
|
10
11
|
|
11
12
|
/**
|
@@ -16,15 +17,14 @@ dealloc(CMPIInstance *instance)
|
|
16
17
|
*/
|
17
18
|
static VALUE property(VALUE self, VALUE name)
|
18
19
|
{
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Data_Get_Struct(self,
|
23
|
-
data = ptr->ft->getProperty(ptr,
|
20
|
+
CIMCInstance *ptr;
|
21
|
+
CIMCStatus status;
|
22
|
+
CIMCData data;
|
23
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
24
|
+
data = ptr->ft->getProperty(ptr, to_charptr(name), &status);
|
24
25
|
if ( !status.rc )
|
25
26
|
return sfcc_cimdata_to_value(data);
|
26
|
-
|
27
|
-
sfcc_rb_raise_if_error(status, "Can't retrieve property '%s'", StringValuePtr(name));
|
27
|
+
sfcc_rb_raise_if_error(status, "Can't retrieve property '%s'", to_charptr(name));
|
28
28
|
return Qnil;
|
29
29
|
}
|
30
30
|
|
@@ -40,13 +40,13 @@ static VALUE property(VALUE self, VALUE name)
|
|
40
40
|
*/
|
41
41
|
static VALUE each_property(VALUE self)
|
42
42
|
{
|
43
|
-
|
44
|
-
|
43
|
+
CIMCInstance *ptr;
|
44
|
+
CIMCStatus status;
|
45
45
|
int k=0;
|
46
46
|
int num_props=0;
|
47
|
-
|
48
|
-
|
49
|
-
Data_Get_Struct(self,
|
47
|
+
CIMCString *property_name = NULL;
|
48
|
+
CIMCData data;
|
49
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
50
50
|
|
51
51
|
num_props = ptr->ft->getPropertyCount(ptr, &status);
|
52
52
|
if (!status.rc) {
|
@@ -57,7 +57,7 @@ static VALUE each_property(VALUE self)
|
|
57
57
|
}
|
58
58
|
else {
|
59
59
|
sfcc_rb_raise_if_error(status, "Can't retrieve property #%d", k);
|
60
|
-
}
|
60
|
+
}
|
61
61
|
if (property_name) CMRelease(property_name);
|
62
62
|
}
|
63
63
|
}
|
@@ -75,8 +75,8 @@ static VALUE each_property(VALUE self)
|
|
75
75
|
*/
|
76
76
|
static VALUE property_count(VALUE self)
|
77
77
|
{
|
78
|
-
|
79
|
-
Data_Get_Struct(self,
|
78
|
+
CIMCInstance *ptr;
|
79
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
80
80
|
return UINT2NUM(ptr->ft->getPropertyCount(ptr, NULL));
|
81
81
|
}
|
82
82
|
|
@@ -88,11 +88,11 @@ static VALUE property_count(VALUE self)
|
|
88
88
|
*/
|
89
89
|
static VALUE set_property(VALUE self, VALUE name, VALUE value)
|
90
90
|
{
|
91
|
-
|
92
|
-
|
93
|
-
Data_Get_Struct(self,
|
91
|
+
CIMCInstance *ptr;
|
92
|
+
CIMCData data;
|
93
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
94
94
|
data = sfcc_value_to_cimdata(value);
|
95
|
-
ptr->ft->setProperty(ptr,
|
95
|
+
ptr->ft->setProperty(ptr, to_charptr(name), &data.value, data.type);
|
96
96
|
|
97
97
|
return value;
|
98
98
|
}
|
@@ -106,21 +106,18 @@ static VALUE set_property(VALUE self, VALUE name, VALUE value)
|
|
106
106
|
*/
|
107
107
|
static VALUE object_path(VALUE self)
|
108
108
|
{
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
Data_Get_Struct(self, CMPIInstance, ptr);
|
109
|
+
CIMCInstance *ptr;
|
110
|
+
CIMCObjectPath *op;
|
111
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
113
112
|
op = ptr->ft->getObjectPath(ptr, NULL);
|
114
|
-
|
115
|
-
op->ft->release(op);
|
116
|
-
return Sfcc_wrap_cim_object_path(newop);
|
113
|
+
return Sfcc_wrap_cim_object_path(op);
|
117
114
|
}
|
118
115
|
|
119
116
|
/**
|
120
117
|
* call-seq:
|
121
118
|
* set_property_filter(property_list, keys)
|
122
119
|
*
|
123
|
-
* Directs
|
120
|
+
* Directs CIMC to ignore any setProperty operations for this
|
124
121
|
* instance for any properties not in this list.
|
125
122
|
*
|
126
123
|
* +property_list+ If not nil, the members of the array define one
|
@@ -132,12 +129,12 @@ static VALUE object_path(VALUE self)
|
|
132
129
|
*/
|
133
130
|
static VALUE set_property_filter(VALUE self, VALUE property_list, VALUE keys)
|
134
131
|
{
|
135
|
-
|
136
|
-
|
132
|
+
CIMCStatus status;
|
133
|
+
CIMCInstance *ptr;
|
137
134
|
char **prop_a;
|
138
135
|
char **key_a;
|
139
136
|
|
140
|
-
Data_Get_Struct(self,
|
137
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
141
138
|
|
142
139
|
prop_a = sfcc_value_array_to_string_array(property_list);
|
143
140
|
key_a = sfcc_value_array_to_string_array(keys);
|
@@ -158,16 +155,16 @@ static VALUE set_property_filter(VALUE self, VALUE property_list, VALUE keys)
|
|
158
155
|
*/
|
159
156
|
static VALUE qualifier(VALUE self, VALUE name)
|
160
157
|
{
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
memset(&status, 0, sizeof(
|
165
|
-
Data_Get_Struct(self,
|
166
|
-
data = ptr->ft->getQualifier(ptr,
|
158
|
+
CIMCInstance *ptr;
|
159
|
+
CIMCStatus status;
|
160
|
+
CIMCData data;
|
161
|
+
memset(&status, 0, sizeof(CIMCStatus));
|
162
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
163
|
+
data = ptr->ft->getQualifier(ptr, to_charptr(name), &status);
|
167
164
|
if ( !status.rc )
|
168
165
|
return sfcc_cimdata_to_value(data);
|
169
166
|
|
170
|
-
sfcc_rb_raise_if_error(status, "Can't retrieve qualifier '%s'",
|
167
|
+
sfcc_rb_raise_if_error(status, "Can't retrieve qualifier '%s'", to_charptr(name));
|
171
168
|
return Qnil;
|
172
169
|
}
|
173
170
|
|
@@ -183,13 +180,13 @@ static VALUE qualifier(VALUE self, VALUE name)
|
|
183
180
|
*/
|
184
181
|
static VALUE each_qualifier(VALUE self)
|
185
182
|
{
|
186
|
-
|
187
|
-
|
183
|
+
CIMCInstance *ptr;
|
184
|
+
CIMCStatus status;
|
188
185
|
int k=0;
|
189
186
|
int num_props=0;
|
190
|
-
|
191
|
-
|
192
|
-
Data_Get_Struct(self,
|
187
|
+
CIMCString *qualifier_name = NULL;
|
188
|
+
CIMCData data;
|
189
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
193
190
|
|
194
191
|
num_props = ptr->ft->getQualifierCount(ptr, &status);
|
195
192
|
if (!status.rc) {
|
@@ -200,7 +197,7 @@ static VALUE each_qualifier(VALUE self)
|
|
200
197
|
}
|
201
198
|
else {
|
202
199
|
sfcc_rb_raise_if_error(status, "Can't retrieve qualifier #%d", k);
|
203
|
-
}
|
200
|
+
}
|
204
201
|
if (qualifier_name) CMRelease(qualifier_name);
|
205
202
|
}
|
206
203
|
}
|
@@ -218,8 +215,8 @@ static VALUE each_qualifier(VALUE self)
|
|
218
215
|
*/
|
219
216
|
static VALUE qualifier_count(VALUE self)
|
220
217
|
{
|
221
|
-
|
222
|
-
Data_Get_Struct(self,
|
218
|
+
CIMCInstance *ptr;
|
219
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
223
220
|
return UINT2NUM(ptr->ft->getQualifierCount(ptr, NULL));
|
224
221
|
}
|
225
222
|
|
@@ -231,17 +228,17 @@ static VALUE qualifier_count(VALUE self)
|
|
231
228
|
*/
|
232
229
|
static VALUE property_qualifier(VALUE self, VALUE property_name, VALUE qualifier_name)
|
233
230
|
{
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
memset(&status, 0, sizeof(
|
238
|
-
Data_Get_Struct(self,
|
239
|
-
data = ptr->ft->getPropertyQualifier(ptr,
|
240
|
-
|
231
|
+
CIMCInstance *ptr;
|
232
|
+
CIMCStatus status;
|
233
|
+
CIMCData data;
|
234
|
+
memset(&status, 0, sizeof(CIMCStatus));
|
235
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
236
|
+
data = ptr->ft->getPropertyQualifier(ptr, to_charptr(property_name),
|
237
|
+
to_charptr(qualifier_name), &status);
|
241
238
|
if ( !status.rc )
|
242
239
|
return sfcc_cimdata_to_value(data);
|
243
240
|
|
244
|
-
sfcc_rb_raise_if_error(status, "Can't retrieve property qualifier '%s'",
|
241
|
+
sfcc_rb_raise_if_error(status, "Can't retrieve property qualifier '%s'", to_charptr(qualifier_name));
|
245
242
|
return Qnil;
|
246
243
|
}
|
247
244
|
|
@@ -257,24 +254,24 @@ static VALUE property_qualifier(VALUE self, VALUE property_name, VALUE qualifier
|
|
257
254
|
*/
|
258
255
|
static VALUE each_property_qualifier(VALUE self, VALUE property_name)
|
259
256
|
{
|
260
|
-
|
261
|
-
|
257
|
+
CIMCInstance *ptr;
|
258
|
+
CIMCStatus status;
|
262
259
|
int k=0;
|
263
260
|
int num_props=0;
|
264
|
-
|
265
|
-
|
266
|
-
Data_Get_Struct(self,
|
261
|
+
CIMCString *property_qualifier_name = NULL;
|
262
|
+
CIMCData data;
|
263
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
267
264
|
|
268
|
-
num_props = ptr->ft->getPropertyQualifierCount(ptr,
|
265
|
+
num_props = ptr->ft->getPropertyQualifierCount(ptr, to_charptr(property_name), &status);
|
269
266
|
if (!status.rc) {
|
270
267
|
for (; k < num_props; ++k) {
|
271
|
-
data = ptr->ft->getPropertyQualifierAt(ptr,
|
268
|
+
data = ptr->ft->getPropertyQualifierAt(ptr, to_charptr(property_name), k, &property_qualifier_name, &status);
|
272
269
|
if (!status.rc) {
|
273
270
|
rb_yield_values(2, (property_qualifier_name ? rb_str_new2(property_qualifier_name->ft->getCharPtr(property_qualifier_name, NULL)) : Qnil), sfcc_cimdata_to_value(data));
|
274
271
|
}
|
275
272
|
else {
|
276
273
|
sfcc_rb_raise_if_error(status, "Can't retrieve property qualifier #%d", k);
|
277
|
-
}
|
274
|
+
}
|
278
275
|
if (property_qualifier_name) CMRelease(property_qualifier_name);
|
279
276
|
}
|
280
277
|
}
|
@@ -292,9 +289,9 @@ static VALUE each_property_qualifier(VALUE self, VALUE property_name)
|
|
292
289
|
*/
|
293
290
|
static VALUE property_qualifier_count(VALUE self, VALUE property_name)
|
294
291
|
{
|
295
|
-
|
296
|
-
Data_Get_Struct(self,
|
297
|
-
return UINT2NUM(ptr->ft->getPropertyQualifierCount(ptr,
|
292
|
+
CIMCInstance *ptr;
|
293
|
+
Data_Get_Struct(self, CIMCInstance, ptr);
|
294
|
+
return UINT2NUM(ptr->ft->getPropertyQualifierCount(ptr, to_charptr(property_name), NULL));
|
298
295
|
}
|
299
296
|
|
300
297
|
/**
|
@@ -306,26 +303,22 @@ static VALUE property_qualifier_count(VALUE self, VALUE property_name)
|
|
306
303
|
*/
|
307
304
|
static VALUE new(VALUE klass, VALUE object_path)
|
308
305
|
{
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
CMPIObjectPath *op;
|
306
|
+
CIMCStatus status;
|
307
|
+
CIMCInstance *ptr;
|
308
|
+
CIMCObjectPath *op;
|
313
309
|
|
314
|
-
Data_Get_Struct(object_path,
|
315
|
-
ptr =
|
316
|
-
newins = ptr->ft->clone(ptr, &status);
|
317
|
-
ptr->ft->release(ptr);
|
310
|
+
Data_Get_Struct(object_path, CIMCObjectPath, op);
|
311
|
+
ptr = cimcEnv->ft->newInstance(cimcEnv, op, &status);
|
318
312
|
|
319
313
|
if (!status.rc)
|
320
|
-
return Sfcc_wrap_cim_instance(
|
314
|
+
return Sfcc_wrap_cim_instance(ptr);
|
321
315
|
sfcc_rb_raise_if_error(status, "Can't create instance");
|
322
316
|
return Qnil;
|
323
317
|
}
|
324
318
|
|
325
319
|
VALUE
|
326
|
-
Sfcc_wrap_cim_instance(
|
320
|
+
Sfcc_wrap_cim_instance(CIMCInstance *instance)
|
327
321
|
{
|
328
|
-
SFCC_INC_REFCOUNT(instance);
|
329
322
|
return Data_Wrap_Struct(cSfccCimInstance, NULL, dealloc, instance);
|
330
323
|
}
|
331
324
|
|