sfcc 0.1.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|