180
static long addClString(ClObjectHdr * hdr, const char *str)
180
long addClString(ClObjectHdr * hdr, const char *str)
182
182
_SFCB_ENTER(TRACE_OBJECTIMPL, "addClString");
628
634
case CMPI_boolean:
629
635
return "boolean";
632
642
case CMPI_dateTime:
633
643
return "dateTime";
645
return "unknownType";
638
649
static char *dataValueToString(ClObjectHdr * hdr, CMPIData * d)
640
651
static char *True = "true", *False = "false";
652
// Allocate for the biggest numeric type we'll get, if
653
// we get a char type, it's reallocated below.
654
char *retval=malloc(sizeof(d->value.real64));
641
655
switch (d->type) {
643
return (char *) ClObjectGetClString(hdr, (ClString *) & d->value.chars);
647
return d->value.boolean ? True : False;
658
char *ret = (char *) ClObjectGetClString(hdr, (ClString *) & d->value.chars);
660
retval=realloc(retval,sizeof(ret));
661
strcpy(retval, ret); }
668
char *ret = (char *) ClObjectGetClString(hdr, (ClString *) & d->value.char16);
670
retval=realloc(retval,sizeof(ret));
671
strcpy (retval, ret); }
677
sprintf(retval, "%lf", d->value.real64);
680
sprintf(retval, "%f", d->value.real32);
683
sprintf(retval, "%lld", d->value.sint64);
686
sprintf(retval, "%d", d->value.sint32);
689
sprintf(retval, "%d", d->value.sint16);
692
sprintf(retval, "%d", d->value.sint8);
695
sprintf(retval, "%llu", d->value.uint64);
698
sprintf(retval, "%u", d->value.uint32);
701
sprintf(retval, "%u", d->value.uint16);
704
sprintf(retval, "%u", d->value.uint8);
707
strcpy(retval, d->value.boolean ? True : False);
710
strcpy(retval, "***??***");
782
845
cat2string(sc, ClObjectGetClString(hdr, &q->id));
783
846
if (q->data.state != CMPI_nullValue) {
784
847
cat2string(sc, "(");
785
cat2string(sc, dataValueToString(hdr, &q->data));
848
char * val=dataValueToString(hdr, &q->data);
786
850
cat2string(sc, ")");
788
853
if (sb & 1) cat2string(sc, "]");
789
854
return sc->str + o;
1119
1184
p=(ClProperty*)getSectionPtr(hdr,prps);
1121
1185
for (i = 0; i < prps->used; i++) {
1122
1186
if (strcasecmp(id, ClObjectGetClString(hdr, &(p + i)->id)) == 0)
1148
1212
ClQualifier *q;
1149
1213
char *array = NULL;
1215
if (p->data.state && CMPI_nullValue)
1151
1218
q = (ClQualifier *) ClObjectGetClSection(hdr, &p->qualifiers);
1152
1219
if ((l = p->qualifiers.used)) {
1153
1220
for (i = 0; i < l; sb = 0, i++) {
1158
1225
cat2string(sc, "\n");
1161
1229
cat2string(sc, " ");
1162
1230
cat2string(sc, datatypeToString(&p->data, &array));
1163
1231
cat2string(sc, " ");
1164
1232
cat2string(sc, ClObjectGetClString(hdr, &p->id));
1165
1233
if (array) cat2string(sc, array);
1166
1234
cat2string(sc, " = ");
1167
cat2string(sc, dataValueToString(hdr,&p->data));
1236
char *val = dataValueToString(hdr,&p->data);
1237
if (val == NULL || *val == 0)
1238
cat2string(sc, "\"\"");
1240
cat2string(sc, val);
1168
1242
cat2string(sc, ";\n");
1169
1244
return sc->str + o;
1234
1309
_SFCB_ENTER(TRACE_OBJECTIMPL, "addObjectPropertyH");
1310
/* if id is not in the section (prps), add it, increment number of props */
1236
1311
if ((i = ClObjectLocateProperty(hdr, prps, id)) == 0) {
1237
1312
p = (ClProperty *) ensureClSpace(hdr, prps, sizeof(*p), 8);
1238
1313
p = p + (prps->used++);
1298
1373
_SFCB_RETURN(-CMPI_RC_ERR_TYPE_MISMATCH);
1300
1375
if (d.type != CMPI_chars) {
1376
if (d.type != CMPI_string) {
1377
_SFCB_RETURN(-CMPI_RC_ERR_TYPE_MISMATCH);
1301
1379
replaceClString(hdr, (long)od.value.chars, "");
1302
1380
(p + i - 1)->data = d;
1316
1394
else if (od.type == CMPI_dateTime && (d.state & CMPI_nullValue) == 0) {
1317
1395
char chars[26];
1396
if (d.type != CMPI_dateTime) {
1397
_SFCB_RETURN(-CMPI_RC_ERR_TYPE_MISMATCH);
1318
1399
dateTime2chars(d.value.dateTime, NULL, chars);
1319
1400
if (od.value.chars) {
1320
1401
(p + i - 1)->data = d;
1330
1411
else if (od.type == CMPI_ref && (d.state & CMPI_nullValue) == 0) {
1331
1412
char chars[4096] = { 0 };
1413
if (d.type != CMPI_ref) {
1414
_SFCB_RETURN(-CMPI_RC_ERR_TYPE_MISMATCH);
1332
1416
sfcb_pathToChars(d.value.ref, &st, chars);
1333
1417
if (od.value.chars) {
1334
1418
(p + i - 1)->data = d;
1344
1428
else if ((od.type & CMPI_ARRAY) && (d.state & CMPI_nullValue) == 0) {
1429
if (!(d.type & CMPI_ARRAY)) {
1430
_SFCB_RETURN(-CMPI_RC_ERR_TYPE_MISMATCH);
1345
1432
if (od.value.array) {
1346
1433
(p + i - 1)->data = d;
1347
1434
replaceClArray(hdr, (long)od.value.array, d);
1757
1844
return newInstanceH(ns, cn);
1847
ClInstance *ClInstanceNewFromMof(const char *ns, const char *cn)
1849
ClInstance *inst = newInstanceH(ns, cn);
1851
inst->hdr.flags |= HDR_FromMof;
1760
1855
static long sizeInstanceH(ClObjectHdr * hdr, ClInstance * inst)
1762
1857
long sz = sizeof(*inst);
1843
1938
p = (ClProperty *) ClObjectGetClSection(&inst->hdr, &inst->properties);
1844
1939
for (i = 0, l = inst->properties.used; i < l; i++) {
1845
addPropertyToString(&sc, &inst->hdr, p + i);
1940
addPropertyToString(&sc, &inst->hdr, (p+i));
1848
1943
cat2string(&sc, "};\n");