1 karl 1.19 //%2006////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.12 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 schuur 1.1 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.12 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.15 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.19 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 schuur 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 venkat.puvvada 1.24 //
|
21 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33
|
34 schuur 1.4 #include "CMPI_Version.h"
|
35 schuur 1.1
36 #include "CMPI_Object.h"
37 #include "CMPI_Ftabs.h"
|
38 ms.aruran 1.25 #include <Pegasus/Common/Tracer.h>
|
39 konrad.r 1.16 #include <string.h>
40
|
41 schuur 1.1 PEGASUS_USING_STD;
42 PEGASUS_NAMESPACE_BEGIN
43
|
44 venkat.puvvada 1.24 extern "C"
45 {
|
46 schuur 1.9
|
47 venkat.puvvada 1.24 PEGASUS_STATIC CMPIStatus arrayRelease(CMPIArray* eArray)
48 {
|
49 ms.aruran 1.25 PEG_METHOD_ENTER(
50 TRC_CMPIPROVIDERINTERFACE,
51 "CMPI_Array:arrayRelease()");
52
|
53 venkat.puvvada 1.24 CMPIData *dta = (CMPIData*)eArray->hdl;
54 if (dta)
55 {
56 delete[] dta;
57 reinterpret_cast<CMPI_Object*>(eArray)->unlinkAndDelete();
|
58 ms.aruran 1.25 PEG_METHOD_EXIT();
|
59 schuur 1.9 CMReturn(CMPI_RC_OK);
|
60 venkat.puvvada 1.24 }
|
61 ms.aruran 1.25 PEG_METHOD_EXIT();
|
62 venkat.puvvada 1.24 CMReturn(CMPI_RC_ERR_INVALID_HANDLE);
63 }
64
65 PEGASUS_STATIC CMPIArray* arrayClone(
66 const CMPIArray* eArray,
67 CMPIStatus* rc)
68 {
|
69 ms.aruran 1.25 PEG_METHOD_ENTER(
70 TRC_CMPIPROVIDERINTERFACE,
71 "CMPI_Array:arrayClone()");
|
72 venkat.puvvada 1.24 CMPIData* dta=(CMPIData*)eArray->hdl;
73
74 if (!dta)
75 {
76 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
|
77 ms.aruran 1.25 PEG_METHOD_EXIT();
|
78 venkat.puvvada 1.24 return NULL;
79 }
80 CMPIData* nDta = new CMPIData[dta->value.uint32+1];
81 CMPI_Object* obj = new CMPI_Object(nDta);
82 obj->unlink();
83 CMPIArray* nArray = reinterpret_cast<CMPIArray*>(obj);
84 CMPIStatus rrc = {CMPI_RC_OK,NULL};
85
86 if (dta->type & CMPI_ENC)
87 {
88 for (unsigned int i=1; i<=dta->value.uint32; i++)
89 {
90 nDta[i].state=CMPI_nullValue;
91 }
92 }
93
94 for (unsigned int i=0; i<=dta->value.uint32; i++)
95 {
96 nDta[i]=dta[i];
97 if (i == 0)
98 {
99 venkat.puvvada 1.24 continue;
100 }
101 if (dta->type & CMPI_ENC && dta[i].state==CMPI_goodValue)
102 {
103 if ((dta[i].type == CMPI_instance) && (dta[i].value.inst))
104 {
105 nDta[i].value.inst =
106 (dta[i].value.inst)->ft->clone(dta[i].value.inst,&rrc);
107 }
108 if ((dta[i].type == CMPI_ref) && (dta[i].value.ref))
109 {
110 nDta[i].value.ref =
111 (dta[i].value.ref)->ft->clone(dta[i].value.ref,&rrc);
112 }
113 if ((dta[i].type == CMPI_args) && (dta[i].value.args))
114 {
115 nDta[i].value.args =
116 (dta[i].value.args)->ft->clone(dta[i].value.args,&rrc);
117 }
118 if ((dta[i].type == CMPI_dateTime) && (dta[i].value.dateTime))
119 {
120 venkat.puvvada 1.24 nDta[i].value.dateTime =
121 (dta[i].value.dateTime)->ft->clone(
122 dta[i].value.dateTime,
123 &rrc);
124 }
125 if ((dta[i].type == CMPI_enumeration) && (dta[i].value.Enum))
126 {
127 nDta[i].value.Enum =
128 (dta[i].value.Enum)->ft->clone(dta[i].value.Enum,&rrc);
129 }
130 if ((dta[i].type == CMPI_filter) && (dta[i].value.filter))
131 {
132 nDta[i].value.filter =
133 (dta[i].value.filter)->ft->clone(
134 dta[i].value.filter,
135 &rrc);
136 }
137 if ((dta[i].type == CMPI_charsptr) &&
138 (dta[i].value.dataPtr.length>0))
139 {
140 nDta[i].value.dataPtr.length = dta[i].value.dataPtr.length;
141 venkat.puvvada 1.24 nDta[i].value.dataPtr.ptr =
142 malloc(nDta[i].value.dataPtr.length);
143 if (nDta[i].value.dataPtr.ptr == NULL)
144 {
145 arrayRelease(nArray);
146 if (rc)
147 {
148 *rc=rrc;
149 }
150 return NULL;
151 }
152 memcpy(
153 nDta[i].value.dataPtr.ptr,
154 dta[i].value.dataPtr.ptr,
155 dta[i].value.dataPtr.length);
156 }
157
158 if ((dta[i].type == CMPI_string) && (dta[i].value.string))
159 {
160 nDta[i].value.string =
161 (dta[i].value.string)->ft->clone(
162 venkat.puvvada 1.24 dta[i].value.string,
163 &rrc);
164 }
165 if (rrc.rc)
166 {
167 arrayRelease(nArray);
168 if (rc)
169 {
170 *rc=rrc;
171 }
|
172 ms.aruran 1.25 PEG_METHOD_EXIT();
|
173 venkat.puvvada 1.24 return NULL;
174 }
175 }
176 }
177 CMSetStatus(rc,CMPI_RC_OK);
|
178 ms.aruran 1.25 PEG_METHOD_EXIT();
|
179 venkat.puvvada 1.24 return nArray;
180 }
181
182 PEGASUS_STATIC CMPIData arrayGetElementAt(
183 const CMPIArray* eArray,
184 CMPICount pos,
185 CMPIStatus* rc)
186 {
187 CMPIData *dta = (CMPIData*)eArray->hdl;
188 CMPIData data = {0,CMPI_nullValue,{0}};
189 if (!dta)
190 {
191 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
192 return data;
193 }
194 CMSetStatus(rc,CMPI_RC_OK);
195 if (pos < dta->value.uint32)
196 {
197 return dta[pos+1];
198 }
199 CMSetStatus(rc,CMPI_RC_ERR_NO_SUCH_PROPERTY);
200 venkat.puvvada 1.24 return data;
201 }
202
203 CMPIStatus arraySetElementAt(
204 CMPIArray* eArray,
205 CMPICount pos,
206 const CMPIValue *val,
207 CMPIType type)
208 {
|
209 ms.aruran 1.25 PEG_METHOD_ENTER(
210 TRC_CMPIPROVIDERINTERFACE,
211 "CMPI_Array:arraySetElementAt()");
|
212 venkat.puvvada 1.24 CMPIData *dta = (CMPIData*)eArray->hdl;
213 if (!dta)
214 {
|
215 ms.aruran 1.25 PEG_METHOD_EXIT();
|
216 venkat.puvvada 1.24 CMReturn(CMPI_RC_ERR_INVALID_HANDLE);
217 }
218 if (!val)
219 {
|
220 ms.aruran 1.25 PEG_METHOD_EXIT();
|
221 venkat.puvvada 1.24 CMReturn( CMPI_RC_ERR_INVALID_PARAMETER);
222 }
223 if (pos<dta->value.uint32)
224 {
225 if ((dta->type&~CMPI_ARRAY)==type)
226 {
227 dta[pos+1].state=CMPI_goodValue;
|
228 kumpf 1.27 if (type == CMPI_chars)
229 {
230 dta[pos+1].value.chars = (char*) val;
231 }
232 else
233 {
234 dta[pos+1].value = *val;
235 }
|
236 ms.aruran 1.25 PEG_METHOD_EXIT();
|
237 venkat.puvvada 1.24 CMReturn(CMPI_RC_OK);
238 }
239 else
240 {
241 char msg[512];
242 sprintf(msg,"arraySetElementAt(): CMPI_RC_ERR_TYPE_MISMATCH."
|
243 kavita.gupta 1.26 " Is %u - should be %u",
|
244 mike 1.27.4.1 (unsigned int)type, (unsigned int)dta->type);
|
245 ms.aruran 1.25 PEG_METHOD_EXIT();
|
246 venkat.puvvada 1.24 CMReturnWithString(
247 CMPI_RC_ERR_TYPE_MISMATCH,
248 reinterpret_cast<CMPIString*>(new CMPI_Object(msg)));
249 }
250 }
|
251 ms.aruran 1.25 PEG_METHOD_EXIT();
|
252 venkat.puvvada 1.24 CMReturn(CMPI_RC_ERR_NO_SUCH_PROPERTY);
253 }
254
255 PEGASUS_STATIC CMPICount arrayGetSize(
256 const CMPIArray* eArray,
257 CMPIStatus* rc)
258 {
259 CMPIData *dta = (CMPIData*)eArray->hdl;
260 if (!dta)
261 {
262 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
263 return 0;
264 }
265 CMSetStatus(rc,CMPI_RC_OK);
266 return dta->value.uint32;
267 }
268
269 PEGASUS_STATIC CMPIType arrayGetType(
270 const CMPIArray* eArray,
271 CMPIStatus* rc)
272 {
273 venkat.puvvada 1.24 CMPIData *dta = (CMPIData*)eArray->hdl;
274 if (!dta)
275 {
276 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
277 return CMPI_null;
278 }
279 CMSetStatus(rc,CMPI_RC_OK);
280 return dta->type;
281 }
282 }
|
283 schuur 1.1
|
284 venkat.puvvada 1.24 static CMPIArrayFT array_FT =
285 {
286 CMPICurrentVersion,
287 arrayRelease,
288 arrayClone,
289 arrayGetSize,
290 arrayGetType,
291 arrayGetElementAt,
292 arraySetElementAt,
|
293 schuur 1.1 };
294
|
295 venkat.puvvada 1.24 CMPIArrayFT *CMPI_Array_Ftab = &array_FT;
|
296 schuur 1.1
297 PEGASUS_NAMESPACE_END
298
299
300
301
|