(file) Return to CMPI_Array.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / CMPI

  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                         

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2