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
|
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 CMPIData *dta = (CMPIData*)eArray->hdl;
50 if (dta)
51 {
52 delete[] dta;
53 reinterpret_cast<CMPI_Object*>(eArray)->unlinkAndDelete();
|
54 schuur 1.9 CMReturn(CMPI_RC_OK);
|
55 venkat.puvvada 1.24 }
56 CMReturn(CMPI_RC_ERR_INVALID_HANDLE);
57 }
58
59 PEGASUS_STATIC CMPIArray* arrayClone(
60 const CMPIArray* eArray,
61 CMPIStatus* rc)
62 {
63 CMPIData* dta=(CMPIData*)eArray->hdl;
64
65 if (!dta)
66 {
67 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
68 return NULL;
69 }
70 CMPIData* nDta = new CMPIData[dta->value.uint32+1];
71 CMPI_Object* obj = new CMPI_Object(nDta);
72 obj->unlink();
73 CMPIArray* nArray = reinterpret_cast<CMPIArray*>(obj);
74 CMPIStatus rrc = {CMPI_RC_OK,NULL};
75
76 venkat.puvvada 1.24 if (dta->type & CMPI_ENC)
77 {
78 for (unsigned int i=1; i<=dta->value.uint32; i++)
79 {
80 nDta[i].state=CMPI_nullValue;
81 }
82 }
83
84 for (unsigned int i=0; i<=dta->value.uint32; i++)
85 {
86 nDta[i]=dta[i];
87 if (i == 0)
88 {
89 continue;
90 }
91 if (dta->type & CMPI_ENC && dta[i].state==CMPI_goodValue)
92 {
93 if ((dta[i].type == CMPI_instance) && (dta[i].value.inst))
94 {
95 nDta[i].value.inst =
96 (dta[i].value.inst)->ft->clone(dta[i].value.inst,&rrc);
97 venkat.puvvada 1.24 }
98 if ((dta[i].type == CMPI_ref) && (dta[i].value.ref))
99 {
100 nDta[i].value.ref =
101 (dta[i].value.ref)->ft->clone(dta[i].value.ref,&rrc);
102 }
103 if ((dta[i].type == CMPI_args) && (dta[i].value.args))
104 {
105 nDta[i].value.args =
106 (dta[i].value.args)->ft->clone(dta[i].value.args,&rrc);
107 }
108 if ((dta[i].type == CMPI_dateTime) && (dta[i].value.dateTime))
109 {
110 nDta[i].value.dateTime =
111 (dta[i].value.dateTime)->ft->clone(
112 dta[i].value.dateTime,
113 &rrc);
114 }
115 if ((dta[i].type == CMPI_enumeration) && (dta[i].value.Enum))
116 {
117 nDta[i].value.Enum =
118 venkat.puvvada 1.24 (dta[i].value.Enum)->ft->clone(dta[i].value.Enum,&rrc);
119 }
120 if ((dta[i].type == CMPI_filter) && (dta[i].value.filter))
121 {
122 nDta[i].value.filter =
123 (dta[i].value.filter)->ft->clone(
124 dta[i].value.filter,
125 &rrc);
126 }
127 if ((dta[i].type == CMPI_charsptr) &&
128 (dta[i].value.dataPtr.length>0))
129 {
130 nDta[i].value.dataPtr.length = dta[i].value.dataPtr.length;
131 nDta[i].value.dataPtr.ptr =
132 malloc(nDta[i].value.dataPtr.length);
133 if (nDta[i].value.dataPtr.ptr == NULL)
134 {
135 arrayRelease(nArray);
136 if (rc)
137 {
138 *rc=rrc;
139 venkat.puvvada 1.24 }
140 return NULL;
141 }
142 memcpy(
143 nDta[i].value.dataPtr.ptr,
144 dta[i].value.dataPtr.ptr,
145 dta[i].value.dataPtr.length);
146 }
147
148 if ((dta[i].type == CMPI_string) && (dta[i].value.string))
149 {
150 nDta[i].value.string =
151 (dta[i].value.string)->ft->clone(
152 dta[i].value.string,
153 &rrc);
154 }
155 if (rrc.rc)
156 {
157 arrayRelease(nArray);
158 if (rc)
159 {
160 venkat.puvvada 1.24 *rc=rrc;
161 }
162 return NULL;
163 }
164 }
165 }
166 CMSetStatus(rc,CMPI_RC_OK);
167 return nArray;
168 }
169
170 PEGASUS_STATIC CMPIData arrayGetElementAt(
171 const CMPIArray* eArray,
172 CMPICount pos,
173 CMPIStatus* rc)
174 {
175 CMPIData *dta = (CMPIData*)eArray->hdl;
176 CMPIData data = {0,CMPI_nullValue,{0}};
177 if (!dta)
178 {
179 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
180 return data;
181 venkat.puvvada 1.24 }
182 CMSetStatus(rc,CMPI_RC_OK);
183 if (pos < dta->value.uint32)
184 {
185 return dta[pos+1];
186 }
187 CMSetStatus(rc,CMPI_RC_ERR_NO_SUCH_PROPERTY);
188 return data;
189 }
190
191 CMPIStatus arraySetElementAt(
192 CMPIArray* eArray,
193 CMPICount pos,
194 const CMPIValue *val,
195 CMPIType type)
196 {
197 CMPIData *dta = (CMPIData*)eArray->hdl;
198 if (!dta)
199 {
200 CMReturn(CMPI_RC_ERR_INVALID_HANDLE);
201 }
202 venkat.puvvada 1.24 if (!val)
203 {
204 CMReturn( CMPI_RC_ERR_INVALID_PARAMETER);
205 }
206 if (pos<dta->value.uint32)
207 {
208 if ((dta->type&~CMPI_ARRAY)==type)
209 {
210 dta[pos+1].state=CMPI_goodValue;
211 dta[pos+1].value=*val;
212 CMReturn(CMPI_RC_OK);
213 }
214 else
215 {
216 char msg[512];
217 sprintf(msg,"arraySetElementAt(): CMPI_RC_ERR_TYPE_MISMATCH."
218 " Is %p - should be %p",
219 (void*)(long)type, (void*)(long)dta->type);
220 CMReturnWithString(
221 CMPI_RC_ERR_TYPE_MISMATCH,
222 reinterpret_cast<CMPIString*>(new CMPI_Object(msg)));
223 venkat.puvvada 1.24 }
224 }
225 CMReturn(CMPI_RC_ERR_NO_SUCH_PROPERTY);
226 }
227
228 PEGASUS_STATIC CMPICount arrayGetSize(
229 const CMPIArray* eArray,
230 CMPIStatus* rc)
231 {
232 CMPIData *dta = (CMPIData*)eArray->hdl;
233 if (!dta)
234 {
235 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
236 return 0;
237 }
238 CMSetStatus(rc,CMPI_RC_OK);
239 return dta->value.uint32;
240 }
241
242 PEGASUS_STATIC CMPIType arrayGetType(
243 const CMPIArray* eArray,
244 venkat.puvvada 1.24 CMPIStatus* rc)
245 {
246 CMPIData *dta = (CMPIData*)eArray->hdl;
247 if (!dta)
248 {
249 CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
250 return CMPI_null;
251 }
252 CMSetStatus(rc,CMPI_RC_OK);
253 return dta->type;
254 }
255 }
|
256 schuur 1.1
|
257 venkat.puvvada 1.24 static CMPIArrayFT array_FT =
258 {
259 CMPICurrentVersion,
260 arrayRelease,
261 arrayClone,
262 arrayGetSize,
263 arrayGetType,
264 arrayGetElementAt,
265 arraySetElementAt,
|
266 schuur 1.1 };
267
|
268 venkat.puvvada 1.24 CMPIArrayFT *CMPI_Array_Ftab = &array_FT;
|
269 schuur 1.1
270 PEGASUS_NAMESPACE_END
271
272
273
274
|