1 /*************************************************************************/ 2 /* module: some helper functions */ 3 /* */ 4 /* file: mgrutil.c */ 5 /* target system: all */ 6 /* target OS: all */ 7 /* */ 8 /* Description: */ 9 /*************************************************************************/ 10 11 /* 12 * Copyright Notice 13 * Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication 14 * Industrial Co., Ltd., Motorola, Nokia, Openwave Systems, Inc., 15 * Palm, Inc., Psion, Starfish Software, Symbian, Ltd. (2001). 16 * All Rights Reserved. 17 * Implementation of all or part of any Specification may require 18 * licenses under third party intellectual property rights, 19 * including without limitation, patent rights (such a third party 20 * may or may not be a Supporter). The Sponsors of the Specification 21 * are not responsible and shall not be held responsible in any 22 * manner for identifying or failing to identify any or all such 23 * third party intellectual property rights. 24 * 25 * THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED 26 * ON AN "AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM, 27 * LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA, 28 * NOKIA, PALM INC., PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML 29 * SPONSORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 30 * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 31 * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 32 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT 33 * SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION INDUSTRIAL CO., 34 * LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE OR ANY 35 * OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF 36 * PROFITS, LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF 37 * BUSINESS, OR FOR DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, 38 * PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH 39 * THIS DOCUMENT OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED 40 * OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE. 41 * 42 * The above notice and this paragraph must be included on all copies 43 * of this document that are made. 44 * 45 */ 46 47 /************************************************************************* 48 * Definitions 49 *************************************************************************/ 50 51 52 /* Include Headers */ 53 #include <sml.h> 54 #include <smldtd.h> 55 #include <smldef.h> 56 #include <smlerr.h> 57 #include <smlmetinfdtd.h> 58 #include <smldevinfdtd.h> 59 #include <smldmtnddtd.h> 60 #include "libmem.h" 61 #include "libstr.h" 62 #include "liblock.h" 63 #include "mgr.h" 64 #include "mgrutil.h" 65 66 67 /************************************************************************* 68 * Exported SyncML API functions 69 *************************************************************************/ 70 71 /** 72 * FUNCTION: smlFreeProtoElement 73 * 74 * frees all allocated memory of a smlProtoElement 75 * 76 * IN: VoidPtr_t 77 * Element to free 78 * 79 * RETURN: Ret_t 80 * Return Code 81 */ 82 SML_API Ret_t smlFreeProtoElement(VoidPtr_t pProtoElement) 83 { 84 if (! pProtoElement) 85 return(SML_ERR_OK); 86 87 switch (((SmlUnknownProtoElementPtr_t)pProtoElement)->elementType) { 88 89 case SML_PE_HEADER: 90 smlFreeSyncHdr((SmlSyncHdrPtr_t)pProtoElement); 91 break; 92 93 case SML_PE_SYNC_START: 94 smlFreeSync((SmlSyncPtr_t)pProtoElement); 95 break; 96 97 case SML_PE_ADD: 98 case SML_PE_COPY: 99 case SML_PE_REPLACE: 100 case SML_PE_DELETE: 101 case SML_PE_GENERIC: 102 smlFreeGeneric((SmlGenericCmdPtr_t)pProtoElement); 103 break; 104 105 case SML_PE_ALERT: 106 smlFreeAlert((SmlAlertPtr_t)pProtoElement); 107 break; 108 109 case SML_PE_ATOMIC_START: 110 case SML_PE_SEQUENCE_START: 111 case SML_PE_CMD_GROUP: 112 smlFreeAtomic((SmlAtomicPtr_t)pProtoElement); 113 break; 114 115 #if (defined EXEC_SEND || defined EXEC_RECEIVE) 116 case SML_PE_EXEC: 117 smlFreeExec((SmlExecPtr_t)pProtoElement); 118 break; 119 #endif 120 121 case SML_PE_PUT: 122 case SML_PE_GET: 123 case SML_PE_PUT_GET: 124 smlFreeGetPut((SmlPutPtr_t)pProtoElement); 125 break; 126 127 case SML_PE_MAP: 128 smlFreeMap((SmlMapPtr_t)pProtoElement); 129 break; 130 131 case SML_PE_RESULTS: 132 smlFreeResults((SmlResultsPtr_t)pProtoElement); 133 break; 134 135 #if (defined SEARCH_SEND || defined SEARCH_RECEIVE) 136 case SML_PE_SEARCH: 137 smlFreeSearch((SmlSearchPtr_t)pProtoElement); 138 break; 139 #endif 140 case SML_PE_STATUS: 141 smlFreeStatus((SmlStatusPtr_t)pProtoElement); 142 break; 143 144 default: 145 return(SML_ERR_A_UTI_UNKNOWN_PROTO_ELEMENT); 146 } 147 148 return(SML_ERR_OK); 149 } 150 151 152 /** 153 * FUNCTION: smlFreePcdata 154 * 155 * frees the Memory of an allocated Pcdata memory object 156 * 157 * IN: SmlPcdataPtr_t 158 * A Pointer to a PcData structure, which should be freed 159 * 160 * RETURN: --- 161 * 162 */ 163 SML_API void smlFreePcdata(SmlPcdataPtr_t pPcdata) 164 { 165 if (! pPcdata) 166 return; 167 168 if (pPcdata->contentType == SML_PCDATA_EXTENSION) { 169 switch ((int)pPcdata->extension) { 170 #ifdef __USE_METINF__ 171 case SML_EXT_METINF: 172 smlFreeMetinfMetinf(pPcdata->content); 173 smlLibFree(pPcdata); 174 break; 175 #endif 176 #ifdef __USE_DEVINF__ 177 case SML_EXT_DEVINF: 178 smlFreeDevInfDevInf(pPcdata->content); 179 smlLibFree(pPcdata); 180 break; 181 #endif 182 #ifdef __USE_DMTND__ 183 case SML_EXT_DMTND: 184 smlFreeDmTnd(pPcdata->content); 185 smlLibFree(pPcdata); 186 break; 187 #endif 188 } 189 return; 190 } 191 192 if (pPcdata->content) 193 smlLibFree(pPcdata->content); 194 195 smlLibFree(pPcdata); 196 } 197 198 199 SML_API void smlFreePcdataList(SmlPcdataListPtr_t list) { 200 if (!list) return; 201 smlFreePcdataList(list->next); 202 smlFreePcdata(list->data); 203 smlLibFree(list); 204 return; 205 } 206 207 #ifdef __USE_METINF__ 208 /** Subfunctions to smlFreePcdata, to freeup MetaInf DTD structures **/ 209 SML_API void smlFreeMetinfMetinf(SmlMetInfMetInfPtr_t data) { 210 if (!data) return; 211 smlFreePcdata(data->format); 212 smlFreePcdata(data->type); 213 smlFreePcdata(data->mark); 214 smlFreePcdata(data->size); 215 smlFreePcdata(data->version); 216 smlFreePcdata(data->nextnonce); 217 smlFreePcdata(data->maxmsgsize); 218 /* SCTSTK - 18/03/2002, S.H. 2002-04-05 : SyncML 1.1 */ 219 smlFreePcdata(data->maxobjsize); 220 smlFreeMetinfAnchor(data->anchor); 221 smlFreeMetinfMem(data->mem); 222 smlFreePcdataList(data->emi); 223 smlLibFree(data); 224 return; 225 } 226 SML_API void smlFreeMetinfAnchor(SmlMetInfAnchorPtr_t data) { 227 if (!data) return; 228 smlFreePcdata(data->last); 229 smlFreePcdata(data->next); 230 smlLibFree(data); 231 return; 232 } 233 SML_API void smlFreeMetinfMem(SmlMetInfMemPtr_t data) { 234 if (!data) return; 235 smlFreePcdata(data->shared); 236 smlFreePcdata(data->free); 237 smlFreePcdata(data->freeid); 238 smlLibFree(data); 239 return; 240 } 241 #endif 242 243 #ifdef __USE_DEVINF__ 244 /** Subfunctions to smlFreePcdata, to freeup DevInf DTD structures **/ 245 SML_API void smlFreeDevInfDevInf(SmlDevInfDevInfPtr_t data) { 246 if (!data) return; 247 smlFreePcdata(data->verdtd); 248 smlFreePcdata(data->man); 249 smlFreePcdata(data->mod); 250 smlFreePcdata(data->oem); 251 smlFreePcdata(data->fwv); 252 smlFreePcdata(data->hwv); 253 smlFreePcdata(data->swv); 254 smlFreePcdata(data->devid); 255 smlFreePcdata(data->devtyp); 256 smlFreeDevInfDatastoreList(data->datastore); 257 smlFreeDevInfExtList(data->ext); 258 smlFreeDevInfCtcapList(data->ctcap); 259 smlLibFree(data); 260 } 261 SML_API void smlFreeDevInfDatastore(SmlDevInfDatastorePtr_t data) { 262 if (!data) return; 263 smlFreePcdata(data->sourceref); 264 smlFreePcdata(data->displayname); 265 smlFreePcdata(data->maxguidsize); 266 smlFreeDevInfXmit(data->rxpref); 267 smlFreeDevInfXmit(data->txpref); 268 smlFreeDevInfXmitList(data->rx); 269 smlFreeDevInfXmitList(data->tx); 270 smlFreeDevInfDSMem(data->dsmem); 271 smlFreeDevInfSynccap(data->synccap); 272 smlLibFree(data); 273 return; 274 } 275 SML_API void smlFreeDevInfDatastoreList(SmlDevInfDatastoreListPtr_t data) { 276 if (!data) return; 277 smlFreeDevInfDatastore(data->data); 278 smlFreeDevInfDatastoreList(data->next); 279 smlLibFree(data); 280 return; 281 } 282 SML_API void smlFreeDevInfXmitList(SmlDevInfXmitListPtr_t data) { 283 if (!data) return; 284 smlFreeDevInfXmit(data->data); 285 smlFreeDevInfXmitList(data->next); 286 smlLibFree(data); 287 } 288 SML_API void smlFreeDevInfXmit(SmlDevInfXmitPtr_t data) { 289 if (!data) return; 290 smlFreePcdata(data->cttype); 291 smlFreePcdata(data->verct); 292 smlLibFree(data); 293 } 294 SML_API void smlFreeDevInfDSMem(SmlDevInfDSMemPtr_t data) { 295 if (!data) return; 296 // %%%luz:2003-04-28: this is now a flag! smlFreePcdata(data->shared); 297 smlFreePcdata(data->maxmem); 298 smlFreePcdata(data->maxid); 299 smlLibFree(data); 300 } 301 SML_API void smlFreeDevInfSynccap(SmlDevInfSyncCapPtr_t data) { 302 if (!data) return; 303 smlFreePcdataList(data->synctype); 304 smlLibFree(data); 305 } 306 SML_API void smlFreeDevInfExt(SmlDevInfExtPtr_t data) { 307 if (!data) return; 308 smlFreePcdata(data->xnam); 309 smlFreePcdataList(data->xval); 310 smlLibFree(data); 311 } 312 SML_API void smlFreeDevInfExtList(SmlDevInfExtListPtr_t data) { 313 if (!data) return; 314 smlFreeDevInfExt(data->data); 315 smlFreeDevInfExtList(data->next); 316 smlLibFree(data); 317 } 318 SML_API void smlFreeDevInfCTData(SmlDevInfCTDataPtr_t data) { 319 if (!data) return; 320 smlFreePcdata(data->name); 321 smlFreePcdata(data->dname); 322 smlFreePcdataList(data->valenum); 323 smlFreePcdata(data->datatype); 324 smlFreePcdata(data->size); 325 smlLibFree(data); 326 } 327 SML_API void smlFreeDevInfCTDataProp(SmlDevInfCTDataPropPtr_t data) { 328 if (!data) return; 329 smlFreeDevInfCTData(data->prop); 330 smlFreeDevInfCTDataList(data->param); 331 smlLibFree(data); 332 } 333 334 SML_API void smlFreeDevInfCTDataList(SmlDevInfCTDataListPtr_t data) { 335 if (!data) return; 336 smlFreeDevInfCTData(data->data); 337 smlFreeDevInfCTDataList(data->next); 338 smlLibFree(data); 339 } 340 341 SML_API void smlFreeDevInfCTDataPropList(SmlDevInfCTDataPropListPtr_t data) { 342 if (!data) return; 343 smlFreeDevInfCTDataProp(data->data); 344 smlFreeDevInfCTDataPropList(data->next); 345 smlLibFree(data); 346 } 347 348 SML_API void smlFreeDevInfCTCap(SmlDevInfCTCapPtr_t data) { 349 if (!data) return; 350 smlFreePcdata(data->cttype); 351 smlFreeDevInfCTDataPropList(data->prop); 352 smlLibFree(data); 353 } 354 355 SML_API void smlFreeDevInfCtcapList(SmlDevInfCtcapListPtr_t data) { 356 if (!data) return; 357 358 smlFreeDevInfCTCap(data->data); 359 smlFreeDevInfCtcapList(data->next); 360 smlLibFree(data); 361 } 362 #endif 363 364 #ifdef __USE_DMTND__ 365 /** Subfunctions to smlFreePcdata, to freeup DM TND DTD structures **/ 366 SML_API void smlFreeDmTndFormat(SmlDmTndFormatPtr_t data) { 367 if (!data) return; 368 smlFreePcdata(data->value); 369 smlLibFree(data); 370 } 371 372 SML_API void smlFreeDmTndType(SmlDmTndTypePtr_t data) { 373 if (!data) return; 374 smlFreePcdata(data->mime); 375 smlFreePcdata(data->ddfname); 376 smlLibFree(data); 377 } 378 379 SML_API void smlFreeDmTndDFElement(SmlDmTndDFElementPtr_t data) { 380 if (!data) return; 381 smlFreePcdata(data->value); 382 smlLibFree(data); 383 } 384 385 SML_API void smlFreeDmTndRTProps(SmlDmTndRTPropsPtr_t data) { 386 if (!data) return; 387 smlFreePcdata(data->acl); 388 smlFreeDmTndFormat(data->format); 389 smlFreePcdata(data->name); 390 smlFreePcdata(data->size); 391 smlFreePcdata(data->title); 392 smlFreePcdata(data->tstamp); 393 smlFreeDmTndType(data->type); 394 smlFreePcdata(data->verno); 395 smlLibFree(data); 396 } 397 398 SML_API void smlFreeDmTndDFProps(SmlDmTndDFPropsPtr_t data) { 399 if (!data) return; 400 smlFreeDmTndDFElement(data->accesstype); 401 smlFreePcdata(data->defaultvalue); 402 smlFreePcdata(data->description); 403 smlFreeDmTndFormat(data->dfformat); 404 smlFreeDmTndDFElement(data->occurrence); 405 smlFreeDmTndDFElement(data->scope); 406 smlFreePcdata(data->dftitle); 407 smlFreeDmTndType(data->dftype); 408 smlFreeDmTndDFElement(data->casesense); 409 smlLibFree(data); 410 } 411 412 SML_API void smlFreeDmTndNodeList(SmlDmTndNodeListPtr_t data); 413 414 SML_API void smlFreeDmTndNode(SmlDmTndNodePtr_t data) { 415 if (!data) return; 416 smlFreePcdata(data->nodename); 417 smlFreePcdata(data->path); 418 smlFreeDmTndRTProps(data->rtprops); 419 smlFreeDmTndDFProps(data->dfprops); 420 smlFreePcdata(data->value); 421 smlFreeDmTndNodeList(data->nodelist); 422 smlLibFree(data); 423 } 424 425 SML_API void smlFreeDmTndNodeList(SmlDmTndNodeListPtr_t data) { 426 if (!data) return; 427 smlFreeDmTndNode(data->node); 428 smlFreeDmTndNodeList(data->next); 429 smlLibFree(data); 430 return; 431 } 432 433 SML_API void smlFreeDmTnd(SmlDmTndPtr_t data) { 434 if (!data) return; 435 smlFreePcdata(data->verdtd); 436 smlFreePcdata(data->man); 437 smlFreePcdata(data->mod); 438 smlFreeDmTndNodeList(data->nodelist); 439 smlLibFree(data); 440 return; 441 } 442 #endif 443 444 /************************************************************************* 445 * Exported SyncML API functions (FULL-SIZE TOOLKIT ONLY) 446 *************************************************************************/ 447 448 #ifndef __SML_LITE__ /* these API calls are NOT included in the Toolkit lite version */ 449 450 /** 451 * FUNCTION: smlGetFreeBuffer 452 * 453 * Return amount of unused Workspace memory 454 * 455 * RETURN: MemSize_t 456 * Amount of unused Workspace memory 457 * 458 */ 459 SML_API MemSize_t smlGetFreeBuffer(InstanceID_t id) 460 { 461 /* Definitions */ 462 MemSize_t freeMem=0; 463 464 #ifdef NOWSM 465 InstanceInfoPtr_t pInstanceInfo = (InstanceInfoPtr_t)id; // ID is the instance info pointer 466 if (pInstanceInfo==NULL) return 0; // no buffer if no instance there 467 freeMem = 468 (pInstanceInfo->instanceBuffer+pInstanceInfo->instanceBufSiz) - // end of buffer 469 pInstanceInfo->writePointer; // current write pointer 470 #else 471 /* ask the Workspace Buffer */ 472 LOCKTOOLKIT("smlGetFreeBuffer"); 473 wsmGetFreeSize(id, &freeMem); 474 RELEASETOOLKIT("smlGetFreeBuffer"); 475 #endif 476 477 return (MemSize_t)freeMem; 478 } 479 480 481 /** 482 * FUNCTION: smlString2Pcdata 483 * 484 * copy a string into a Pcdata structure 485 * 486 * IN: String_t 487 * Input String 488 * 489 * RETURN: SmlPcdataPtr_t 490 * A Pointer to a PcData structure 491 * 492 */ 493 SML_API SmlPcdataPtr_t smlString2Pcdata(String_t str) 494 { 495 /* Definitions */ 496 SmlPcdataPtr_t pcdata; 497 498 /* Invalid Input */ 499 if (! str) 500 return NULL; 501 502 /* Allocate the PcData Structure */ 503 pcdata = (SmlPcdataPtr_t)smlLibMalloc((MemSize_t)sizeof(SmlPcdata_t)); 504 if (! pcdata) 505 return NULL; 506 smlLibMemset (pcdata, 0, (MemSize_t)sizeof(SmlPcdata_t)); 507 508 /* Set the PcData Structure */ 509 pcdata->contentType = SML_PCDATA_STRING; 510 pcdata->length = smlLibStrlen( str ); 511 pcdata->content = (VoidPtr_t)smlLibStrdup(str); 512 513 return pcdata; 514 } 515 516 517 /** 518 * FUNCTION: smlPcdata2String 519 * 520 * copy a Pcdata structure into a string 521 * 522 * IN: SmlPcdataPtr_t 523 * A Pointer to a PcData structure 524 * RETURN: String_t 525 * Input String 526 * 527 */ 528 SML_API String_t smlPcdata2String(SmlPcdataPtr_t pcdata) 529 { 530 /* Definitions */ 531 String_t str; 532 533 /* Invalid Input */ 534 if (! pcdata) 535 return NULL; 536 537 /* Allocate the String */ 538 str = (String_t)smlLibMalloc((MemSize_t)(pcdata->length+1)); 539 if (str == NULL) 540 return NULL; 541 542 /* Copy the string into the allocated data structure */ 543 smlLibMemcpy((MemPtr_t)str, (MemPtr_t)pcdata->content, pcdata->length); 544 *(str + pcdata->length) = '\0'; 545 546 return str; 547 } 548 549 550 /** 551 * FUNCTION: smlPcdataDup 552 * 553 * Duplicates a Pcdata memory object 554 * 555 * IN: SmlPcdataPtr_t 556 * A Pointer to the original PcData structure 557 * 558 * RETURN: SmlPcdataPtr_t 559 * A Pointer to the copy of the PcData structure 560 * 561 */ 562 SML_API SmlPcdataPtr_t smlPcdataDup(SmlPcdataPtr_t pcdata) 563 { 564 /* Definitions */ 565 SmlPcdataPtr_t newPcdata; 566 567 /* Invalid Input */ 568 if (! pcdata) 569 return NULL; 570 571 /* Allocate the new pcdata memory object */ 572 newPcdata = (SmlPcdataPtr_t)smlLibMalloc((MemSize_t)sizeof(SmlPcdata_t)); 573 if (! newPcdata) 574 return NULL; 575 smlLibMemset (newPcdata, 0, (MemSize_t)sizeof(SmlPcdata_t)); 576 577 /* Set the PcData Structure */ 578 newPcdata->contentType = pcdata->contentType; 579 newPcdata->length = pcdata->length; 580 newPcdata->content =(VoidPtr_t)smlLibMalloc((MemSize_t)pcdata->length+1); 581 if (newPcdata->content ==NULL) 582 { 583 smlLibFree(newPcdata->content); 584 smlLibFree(newPcdata); 585 return NULL; 586 } 587 smlLibMemset(newPcdata->content, 0, (MemSize_t)((pcdata->length)+1)); 588 smlLibMemcpy(newPcdata->content, pcdata->content, (MemSize_t)pcdata->length); 589 590 return newPcdata; 591 } 592 593 #endif 594 595 SML_API void smlFreeSyncHdr(SmlSyncHdrPtr_t pSyncHdr) 596 { 597 if (! pSyncHdr) 598 return; 599 600 smlFreePcdata(pSyncHdr->version); 601 smlFreePcdata(pSyncHdr->proto); 602 smlFreePcdata(pSyncHdr->sessionID); 603 smlFreePcdata(pSyncHdr->msgID); 604 smlFreePcdata(pSyncHdr->respURI); 605 smlFreePcdata(pSyncHdr->meta); 606 607 smlFreeSourceTargetPtr(pSyncHdr->source); 608 smlFreeSourceTargetPtr(pSyncHdr->target); 609 610 smlFreeCredPtr(pSyncHdr->cred); 611 612 smlLibFree(pSyncHdr); 613 } 614 615 616 SML_API void smlFreeSync(SmlSyncPtr_t pSync) 617 { 618 if (! pSync) 619 return; 620 621 smlFreePcdata(pSync->cmdID); 622 smlFreePcdata(pSync->meta); 623 624 smlFreeSourceTargetPtr(pSync->source); 625 smlFreeSourceTargetPtr(pSync->target); 626 627 smlFreeCredPtr(pSync->cred); 628 629 smlLibFree(pSync); 630 } 631 632 633 SML_API void smlFreeGeneric(SmlGenericCmdPtr_t pGenericCmd) 634 { 635 if (! pGenericCmd) 636 return; 637 638 smlFreePcdata(pGenericCmd->cmdID); 639 smlFreePcdata(pGenericCmd->meta); 640 641 smlFreeCredPtr(pGenericCmd->cred); 642 643 smlFreeItemList(pGenericCmd->itemList); 644 645 smlLibFree(pGenericCmd); 646 } 647 648 649 SML_API void smlFreeAlert(SmlAlertPtr_t pAlert) 650 { 651 if (! pAlert) 652 return; 653 654 smlFreePcdata(pAlert->cmdID); 655 smlFreePcdata(pAlert->data); 656 657 smlFreeCredPtr(pAlert->cred); 658 659 smlFreeItemList(pAlert->itemList); 660 smlFreePcdata(pAlert->correlator); 661 662 smlLibFree(pAlert); 663 } 664 665 666 SML_API void smlFreeAtomic(SmlAtomicPtr_t pAtomic) 667 { 668 if (! pAtomic) 669 return; 670 671 smlFreePcdata(pAtomic->cmdID); 672 smlFreePcdata(pAtomic->meta); 673 674 smlLibFree(pAtomic); 675 } 676 677 #if (defined EXEC_SEND || defined EXEC_RECEIVE) 678 679 SML_API void smlFreeExec(SmlExecPtr_t pExec) 680 { 681 if (! pExec) 682 return; 683 684 smlFreePcdata(pExec->cmdID); 685 686 smlFreeCredPtr(pExec->cred); 687 688 smlFreeItemPtr(pExec->item); 689 690 smlFreePcdata(pExec->correlator); 691 692 smlLibFree(pExec); 693 } 694 695 #endif 696 697 SML_API void smlFreeGetPut(SmlPutPtr_t pGetPut) 698 { 699 if (! pGetPut) 700 return; 701 702 smlFreePcdata(pGetPut->cmdID); 703 smlFreePcdata(pGetPut->meta); 704 smlFreePcdata(pGetPut->lang); 705 706 smlFreeCredPtr(pGetPut->cred); 707 708 smlFreeItemList(pGetPut->itemList); 709 710 smlLibFree(pGetPut); 711 } 712 713 714 SML_API void smlFreeMap(SmlMapPtr_t pMap) 715 { 716 if (! pMap) 717 return; 718 719 smlFreePcdata(pMap->cmdID); 720 smlFreePcdata(pMap->meta); 721 722 smlFreeCredPtr(pMap->cred); 723 724 smlFreeSourceTargetPtr(pMap->source); 725 smlFreeSourceTargetPtr(pMap->target); 726 727 smlFreeMapItemList(pMap->mapItemList); 728 729 smlLibFree(pMap); 730 } 731 732 733 SML_API void smlFreeResults(SmlResultsPtr_t pResults) 734 { 735 if (! pResults) 736 return; 737 738 smlFreePcdata(pResults->cmdID); 739 smlFreePcdata(pResults->msgRef); 740 smlFreePcdata(pResults->cmdRef); 741 smlFreePcdata(pResults->meta); 742 smlFreePcdata(pResults->targetRef); 743 smlFreePcdata(pResults->sourceRef); 744 745 smlFreeItemList(pResults->itemList); 746 747 smlLibFree(pResults); 748 } 749 750 #if (defined SEARCH_SEND || defined SEARCH_RECEIVE) 751 752 SML_API void smlFreeSearch(SmlSearchPtr_t pSearch) 753 { 754 if (! pSearch) 755 return; 756 757 smlFreePcdata(pSearch->cmdID); 758 smlFreePcdata(pSearch->lang); 759 smlFreePcdata(pSearch->meta); 760 smlFreePcdata(pSearch->data); 761 762 smlFreeCredPtr(pSearch->cred); 763 764 smlFreeSourceTargetPtr(pSearch->target); 765 766 smlFreeSourceList(pSearch->sourceList); 767 768 smlLibFree(pSearch); 769 } 770 771 #endif 772 773 SML_API void smlFreeStatus(SmlStatusPtr_t pStatus) 774 { 775 if (! pStatus) 776 return; 777 778 smlFreePcdata(pStatus->cmdID); 779 smlFreePcdata(pStatus->msgRef); 780 smlFreePcdata(pStatus->cmdRef); 781 smlFreePcdata(pStatus->cmd); 782 smlFreePcdata(pStatus->data); 783 784 smlFreeCredPtr(pStatus->cred); 785 smlFreeChalPtr(pStatus->chal); 786 787 smlFreeTargetRefList(pStatus->targetRefList); 788 smlFreeSourceRefList(pStatus->sourceRefList); 789 790 smlFreeItemList(pStatus->itemList); 791 792 smlLibFree(pStatus); 793 } 794 795 796 SML_API void smlFreeCredPtr(SmlCredPtr_t pCred) 797 { 798 if (! pCred) 799 return; 800 801 smlFreePcdata(pCred->meta); 802 smlFreePcdata(pCred->data); 803 804 smlLibFree(pCred); 805 } 806 807 808 SML_API void smlFreeChalPtr(SmlChalPtr_t pChal) 809 { 810 if (! pChal) 811 return; 812 813 smlFreePcdata(pChal->meta); 814 815 smlLibFree(pChal); 816 } 817 818 819 SML_API void smlFreeSourceTargetPtr(SmlSourcePtr_t pSourceTarget) 820 { 821 if (! pSourceTarget) 822 return; 823 824 smlFreePcdata(pSourceTarget->locURI); 825 smlFreePcdata(pSourceTarget->locName); 826 827 smlLibFree(pSourceTarget); 828 } 829 830 831 SML_API void smlFreeSourceList(SmlSourceListPtr_t pSourceList) 832 { 833 SmlSourceListPtr_t pTmp; 834 835 while (pSourceList) { 836 pTmp = pSourceList->next; 837 smlFreeSourceTargetPtr(pSourceList->source); 838 smlLibFree(pSourceList); 839 pSourceList = pTmp; 840 } 841 } 842 843 844 SML_API void smlFreeSourceRefList(SmlSourceRefListPtr_t pSourceRefList) 845 { 846 SmlSourceRefListPtr_t pTmp; 847 848 while (pSourceRefList) { 849 pTmp = pSourceRefList->next; 850 smlFreePcdata(pSourceRefList->sourceRef); 851 smlLibFree(pSourceRefList); 852 pSourceRefList = pTmp; 853 } 854 } 855 856 857 SML_API void smlFreeTargetRefList(SmlTargetRefListPtr_t pTargetRefList) 858 { 859 SmlTargetRefListPtr_t pTmp; 860 861 while (pTargetRefList) { 862 pTmp = pTargetRefList->next; 863 smlFreePcdata(pTargetRefList->targetRef); 864 smlLibFree(pTargetRefList); 865 pTargetRefList = pTmp; 866 } 867 } 868 869 870 SML_API void smlFreeItemPtr(SmlItemPtr_t pItem) 871 { 872 if (! pItem) 873 return; 874 875 smlFreePcdata(pItem->meta); 876 smlFreePcdata(pItem->data); 877 878 smlFreeSourceTargetPtr(pItem->source); 879 smlFreeSourceTargetPtr(pItem->target); 880 881 smlLibFree(pItem); 882 } 883 884 885 SML_API void smlFreeItemList(SmlItemListPtr_t pItemList) 886 { 887 SmlItemListPtr_t pTmp; 888 889 while (pItemList) { 890 pTmp = pItemList->next; 891 smlFreeItemPtr(pItemList->item); 892 smlLibFree(pItemList); 893 pItemList = pTmp; 894 } 895 } 896 897 898 SML_API void smlFreeMapItemPtr(SmlMapItemPtr_t pMapItem) 899 { 900 if (! pMapItem) 901 return; 902 903 smlFreeSourceTargetPtr(pMapItem->source); 904 smlFreeSourceTargetPtr(pMapItem->target); 905 906 smlLibFree(pMapItem); 907 } 908 909 910 SML_API void smlFreeMapItemList(SmlMapItemListPtr_t pMapItemList) 911 { 912 SmlMapItemListPtr_t pTmp; 913 914 while (pMapItemList) { 915 pTmp = pMapItemList->next; 916 smlFreeMapItemPtr(pMapItemList->mapItem); 917 smlLibFree(pMapItemList); 918 pMapItemList = pTmp; 919 } 920 } 921 922 #ifdef __USE_ALLOCFUNCS__ 923 /* Helperfunctions, that allocate and preset SyncML C structs */ 924 SML_API SmlPcdataPtr_t smlAllocPcdata() { 925 SmlPcdataPtr_t p = (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t)); 926 if (p == NULL) return NULL; 927 smlLibMemset(p, 0, sizeof(SmlPcdata_t)); 928 return p; 929 } 930 931 SML_API SmlPcdataListPtr_t smlAllocPcdataList() { 932 SmlPcdataListPtr_t p = (SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t)); 933 if (p == NULL) return NULL; 934 smlLibMemset(p, 0, sizeof(SmlPcdataList_t)); 935 p->data = smlAllocPcdata(); 936 if (p->data == NULL) { 937 smlFreePcdataList(p); 938 return NULL; 939 } 940 return p; 941 } 942 943 SML_API SmlChalPtr_t smlAllocChal() { 944 SmlChalPtr_t p = (SmlChalPtr_t)smlLibMalloc(sizeof(SmlChal_t)); 945 if (p == NULL) return NULL; 946 smlLibMemset(p, 0, sizeof(SmlChal_t)); 947 p->meta = smlAllocPcdata(); 948 if (p->meta == NULL) { 949 smlFreeChalPtr(p); 950 return NULL; 951 } 952 return p; 953 } 954 955 SML_API SmlCredPtr_t smlAllocCred() { 956 SmlCredPtr_t p = (SmlCredPtr_t)smlLibMalloc(sizeof(SmlCred_t)); 957 if (p == NULL) return NULL; 958 smlLibMemset(p, 0, sizeof(SmlCred_t)); 959 p->data = smlAllocPcdata(); 960 if (p->data == NULL) { 961 smlFreeCredPtr(p); 962 return NULL; 963 } 964 return p; 965 } 966 967 SML_API SmlSourcePtr_t smlAllocSource() { 968 SmlSourcePtr_t p = (SmlSourcePtr_t)smlLibMalloc(sizeof(SmlSource_t)); 969 if (p == NULL) return NULL; 970 smlLibMemset(p, 0, sizeof(SmlSource_t)); 971 p->locURI = smlAllocPcdata(); 972 if (p->locURI == NULL) { 973 smlFreeSourceTargetPtr(p); 974 return NULL; 975 } 976 return p; 977 } 978 979 SML_API SmlTargetPtr_t smlAllocTarget() { 980 return smlAllocSource(); 981 } 982 983 SML_API SmlSourceListPtr_t smlAllocSourceList() { 984 SmlSourceListPtr_t p = (SmlSourceListPtr_t)smlLibMalloc(sizeof(SmlSourceList_t)); 985 if (p == NULL) return NULL; 986 smlLibMemset(p, 0, sizeof(SmlSourceList_t)); 987 p->source = smlAllocSource(); 988 if (p->source == NULL) { 989 smlFreeSourceList(p); 990 return NULL; 991 } 992 return p; 993 } 994 995 996 SML_API SmlSyncHdrPtr_t smlAllocSyncHdr() { 997 SmlSyncHdrPtr_t p = (SmlSyncHdrPtr_t)smlLibMalloc(sizeof(SmlSyncHdr_t)); 998 if (p == NULL) return NULL; 999 smlLibMemset(p, 0, sizeof(SmlSyncHdr_t)); 1000 p->elementType = SML_PE_HEADER; 1001 p->version = smlAllocPcdata(); 1002 if (p->version == NULL) { 1003 smlFreeSyncHdr(p); 1004 return NULL; 1005 } 1006 p->proto = smlAllocPcdata(); 1007 if (p->proto == NULL) { 1008 smlFreeSyncHdr(p); 1009 return NULL; 1010 } 1011 p->sessionID = smlAllocPcdata(); 1012 if (p->sessionID == NULL) { 1013 smlFreeSyncHdr(p); 1014 return NULL; 1015 } 1016 p->msgID = smlAllocPcdata(); 1017 if (p->msgID == NULL) { 1018 smlFreeSyncHdr(p); 1019 return NULL; 1020 } 1021 p->target = smlAllocTarget(); 1022 if (p->target == NULL) { 1023 smlFreeSyncHdr(p); 1024 return NULL; 1025 } 1026 p->source = smlAllocSource(); 1027 if (p->source == NULL) { 1028 smlFreeSyncHdr(p); 1029 return NULL; 1030 } 1031 return p; 1032 } 1033 1034 SML_API SmlItemPtr_t smlAllocItem() { 1035 SmlItemPtr_t p = (SmlItemPtr_t)smlLibMalloc(sizeof(SmlItem_t)); 1036 if (p == NULL) return NULL; 1037 smlLibMemset(p, 0, sizeof(SmlItem_t)); 1038 return p; 1039 } 1040 1041 SML_API SmlItemListPtr_t smlAllocItemList() { 1042 SmlItemListPtr_t p = (SmlItemListPtr_t)smlLibMalloc(sizeof(SmlItemList_t)); 1043 if (p == NULL) return NULL; 1044 smlLibMemset(p, 0, sizeof(SmlItemList_t)); 1045 p->item = smlAllocItem(); 1046 if (p->item == NULL) { 1047 smlFreeItemList(p); 1048 return NULL; 1049 } 1050 return p; 1051 } 1052 1053 SML_API SmlGenericCmdPtr_t smlAllocGeneric() { 1054 SmlGenericCmdPtr_t p = (SmlGenericCmdPtr_t)smlLibMalloc(sizeof(SmlGenericCmd_t)); 1055 if (p == NULL) return NULL; 1056 smlLibMemset(p, 0, sizeof(SmlGenericCmd_t)); 1057 p->elementType = SML_PE_GENERIC; 1058 p->cmdID = smlAllocPcdata(); 1059 if (p->cmdID == NULL) { 1060 smlFreeGeneric(p); 1061 return NULL; 1062 } 1063 p->itemList = smlAllocItemList(); 1064 if (p->itemList == NULL) { 1065 smlFreeGeneric(p); 1066 return NULL; 1067 } 1068 return p; 1069 } 1070 1071 SML_API SmlAddPtr_t smlAllocAdd() { 1072 SmlAddPtr_t p = smlAllocGeneric(); 1073 if (p == NULL) return p; 1074 p->elementType = SML_PE_ADD; 1075 return p; 1076 } 1077 1078 SML_API SmlCopyPtr_t smlAllocCopy() { 1079 SmlCopyPtr_t p = smlAllocGeneric(); 1080 if (p == NULL) return p; 1081 p->elementType = SML_PE_COPY; 1082 return p; 1083 } 1084 1085 SML_API SmlReplacePtr_t smlAllocReplace() { 1086 SmlReplacePtr_t p = smlAllocGeneric(); 1087 if (p == NULL) return p; 1088 p->elementType = SML_PE_REPLACE; 1089 return p; 1090 } 1091 1092 SML_API SmlDeletePtr_t smlAllocDelete() { 1093 SmlDeletePtr_t p = smlAllocGeneric(); 1094 if (p == NULL) return p; 1095 p->elementType = SML_PE_DELETE; 1096 return p; 1097 } 1098 1099 SML_API SmlAlertPtr_t smlAllocAlert() { 1100 SmlAlertPtr_t p = (SmlAlertPtr_t)smlLibMalloc(sizeof(SmlAlert_t)); 1101 if (p == NULL) return NULL; 1102 smlLibMemset(p, 0, sizeof(SmlAlert_t)); 1103 p->elementType = SML_PE_ALERT; 1104 p->cmdID = smlAllocPcdata(); 1105 if (p->cmdID == NULL) { 1106 smlFreeAlert(p); 1107 return NULL; 1108 } 1109 p->itemList = smlAllocItemList(); 1110 if (p->itemList == NULL) { 1111 smlFreeAlert(p); 1112 return NULL; 1113 } 1114 return p; 1115 } 1116 1117 SML_API SmlAtomicPtr_t smlAllocAtomic() { 1118 SmlAtomicPtr_t p = (SmlAtomicPtr_t)smlLibMalloc(sizeof(SmlAtomic_t)); 1119 if (p == NULL) return NULL; 1120 smlLibMemset(p, 0, sizeof(SmlAtomic_t)); 1121 p->elementType = SML_PE_ATOMIC_START; 1122 p->cmdID = smlAllocPcdata(); 1123 if (p->cmdID == NULL) { 1124 smlFreeAtomic(p); 1125 return NULL; 1126 } 1127 return p; 1128 } 1129 1130 SML_API SmlSequencePtr_t smlAllocSequence() { 1131 SmlSequencePtr_t p = smlAllocAtomic(); 1132 if (p == NULL) return NULL; 1133 p->elementType = SML_PE_SEQUENCE_START; 1134 return p; 1135 } 1136 1137 SML_API SmlSyncPtr_t smlAllocSync() { 1138 SmlSyncPtr_t p = (SmlSyncPtr_t)smlLibMalloc(sizeof(SmlSync_t)); 1139 if (p == NULL) return NULL; 1140 smlLibMemset(p, 0, sizeof(SmlSync_t)); 1141 p->elementType = SML_PE_SYNC_START; 1142 p->cmdID = smlAllocPcdata(); 1143 if (p->cmdID == NULL) { 1144 smlFreeSync(p); 1145 return NULL; 1146 } 1147 return p; 1148 } 1149 1150 #if defined(EXEC_SEND) || defined(EXEC_RECEIVE) 1151 SML_API SmlExecPtr_t smlAllocExec() { 1152 SmlExecPtr_t p = (SmlExecPtr_t)smlLibMalloc(sizeof(SmlExec_t)); 1153 if (p == NULL) return NULL; 1154 smlLibMemset(p, 0, sizeof(SmlExec_t)); 1155 p->elementType = SML_PE_EXEC; 1156 p->cmdID = smlAllocPcdata(); 1157 if (p->cmdID == NULL) { 1158 smlFreeExec(p); 1159 return NULL; 1160 } 1161 p->item = smlAllocItem(); 1162 if (p->item == NULL) { 1163 smlFreeExec(p); 1164 return NULL; 1165 } 1166 return p; 1167 } 1168 #endif 1169 1170 SML_API SmlGetPtr_t smlAllocGet() { 1171 SmlGetPtr_t p = (SmlGetPtr_t)smlLibMalloc(sizeof(SmlGet_t)); 1172 if (p == NULL) return NULL; 1173 smlLibMemset(p, 0, sizeof(SmlGet_t)); 1174 p->elementType = SML_PE_GET; 1175 p->cmdID = smlAllocPcdata(); 1176 if (p->cmdID == NULL) { 1177 smlFreeGetPut(p); 1178 return NULL; 1179 } 1180 p->itemList = smlAllocItemList(); 1181 if (p->itemList == NULL) { 1182 smlFreeGetPut(p); 1183 return NULL; 1184 } 1185 return p; 1186 } 1187 1188 SML_API SmlPutPtr_t smlAllocPut() { 1189 SmlPutPtr_t p = smlAllocGet(); 1190 if (p == NULL) return NULL; 1191 p->elementType = SML_PE_PUT; 1192 return p; 1193 } 1194 1195 SML_API SmlMapItemPtr_t smlAllocMapItem() { 1196 SmlMapItemPtr_t p = (SmlMapItemPtr_t)smlLibMalloc(sizeof(SmlMapItem_t)); 1197 if (p == 0) return NULL; 1198 smlLibMemset(p, 0, sizeof(SmlMapItem_t)); 1199 p->target = smlAllocTarget(); 1200 if (p->target == NULL) { 1201 smlFreeMapItemPtr(p); 1202 return NULL; 1203 } 1204 p->source = smlAllocSource(); 1205 if (p->source == NULL) { 1206 smlFreeMapItemPtr(p); 1207 return NULL; 1208 } 1209 return p; 1210 } 1211 1212 SML_API SmlMapItemListPtr_t smlAllocMapItemList() { 1213 SmlMapItemListPtr_t p = (SmlMapItemListPtr_t)smlLibMalloc(sizeof(SmlMapItemList_t)); 1214 if (p == 0) return NULL; 1215 smlLibMemset(p, 0, sizeof(SmlMapItemList_t)); 1216 p->mapItem = smlAllocMapItem(); 1217 if (p->mapItem == NULL) { 1218 smlFreeMapItemList(p); 1219 return NULL; 1220 } 1221 return p; 1222 } 1223 1224 SML_API SmlMapPtr_t smlAllocMap() { 1225 SmlMapPtr_t p = (SmlMapPtr_t)smlLibMalloc(sizeof(SmlMap_t)); 1226 if (p == 0) return NULL; 1227 smlLibMemset(p, 0, sizeof(SmlMap_t)); 1228 p->elementType = SML_PE_MAP; 1229 p->cmdID = smlAllocPcdata(); 1230 if (p->cmdID == NULL) { 1231 smlFreeMap(p); 1232 return NULL; 1233 } 1234 p->target = smlAllocTarget(); 1235 if (p->target == NULL) { 1236 smlFreeMap(p); 1237 return NULL; 1238 } 1239 p->source = smlAllocSource(); 1240 if (p->source == NULL) { 1241 smlFreeMap(p); 1242 return NULL; 1243 } 1244 p->mapItemList = smlAllocMapItemList(); 1245 if (p->mapItemList == NULL) { 1246 smlFreeMap(p); 1247 return NULL; 1248 } 1249 return p; 1250 } 1251 1252 SML_API SmlResultsPtr_t smlAllocResults() { 1253 SmlResultsPtr_t p = (SmlResultsPtr_t)smlLibMalloc(sizeof(SmlResults_t)); 1254 if (p == 0) return NULL; 1255 smlLibMemset(p, 0, sizeof(SmlResults_t)); 1256 p->elementType = SML_PE_RESULTS; 1257 p->cmdID = smlAllocPcdata(); 1258 if (p->cmdID == NULL) { 1259 smlFreeResults(p); 1260 return NULL; 1261 } 1262 p->cmdRef = smlAllocPcdata(); 1263 if (p->cmdRef == NULL) { 1264 smlFreeResults(p); 1265 return NULL; 1266 } 1267 p->itemList = smlAllocItemList(); 1268 if (p->itemList == NULL) { 1269 smlFreeResults(p); 1270 return NULL; 1271 } 1272 return p; 1273 } 1274 1275 #if (defined SEARCH_SEND || defined SEARCH_RECEIVE) 1276 1277 SML_API SmlSearchPtr_t smlAllocSearch() { 1278 SmlSearchPtr_t p = (SmlSearchPtr_t)smlLibMalloc(sizeof(SmlSearch_t)); 1279 if (p == 0) return NULL; 1280 smlLibMemset(p, 0, sizeof(SmlSearch_t)); 1281 p->elementType = SML_PE_SEARCH; 1282 p->cmdID = smlAllocPcdata(); 1283 if (p->cmdID == NULL) { 1284 smlFreeSearch(p); 1285 return NULL; 1286 } 1287 p->meta = smlAllocPcdata(); 1288 if (p->meta == NULL) { 1289 smlFreeSearch(p); 1290 return NULL; 1291 } 1292 p->data = smlAllocPcdata(); 1293 if (p->data == NULL) { 1294 smlFreeSearch(p); 1295 return NULL; 1296 } 1297 p->sourceList = smlAllocSourceList(); 1298 if (p->sourceList == NULL) { 1299 smlFreeSearch(p); 1300 return NULL; 1301 } 1302 return p; 1303 } 1304 #endif 1305 1306 SML_API SmlTargetRefListPtr_t smlAllocTargetRefList() { 1307 SmlTargetRefListPtr_t p = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t)); 1308 if (p == 0) return NULL; 1309 smlLibMemset(p, 0, sizeof(SmlTargetRefList_t)); 1310 p->targetRef = smlAllocPcdata(); 1311 if (p->targetRef == NULL) { 1312 smlFreeTargetRefList(p); 1313 return NULL; 1314 } 1315 return p; 1316 } 1317 1318 SML_API SmlSourceRefListPtr_t smlAllocSourceRefList() { 1319 SmlSourceRefListPtr_t p = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t)); 1320 if (p == 0) return NULL; 1321 smlLibMemset(p, 0, sizeof(SmlSourceRefList_t)); 1322 p->sourceRef = smlAllocPcdata(); 1323 if (p->sourceRef == NULL) { 1324 smlFreeSourceRefList(p); 1325 return NULL; 1326 } 1327 return p; 1328 } 1329 1330 SML_API SmlStatusPtr_t smlAllocStatus() { 1331 SmlStatusPtr_t p = (SmlStatusPtr_t)smlLibMalloc(sizeof(SmlStatus_t)); 1332 if (p == 0) return NULL; 1333 smlLibMemset(p, 0, sizeof(SmlStatus_t)); 1334 p->elementType = SML_PE_STATUS; 1335 p->cmdID = smlAllocPcdata(); 1336 if (p->cmdID == NULL) { 1337 smlFreeStatus(p); 1338 return NULL; 1339 } 1340 p->msgRef = smlAllocPcdata(); 1341 if (p->msgRef == NULL) { 1342 smlFreeStatus(p); 1343 return NULL; 1344 } 1345 p->cmdRef = smlAllocPcdata(); 1346 if (p->cmdRef == NULL) { 1347 smlFreeStatus(p); 1348 return NULL; 1349 } 1350 p->cmd = smlAllocPcdata(); 1351 if (p->cmd == NULL) { 1352 smlFreeStatus(p); 1353 return NULL; 1354 } 1355 p->data = smlAllocPcdata(); 1356 if (p->data == NULL) { 1357 smlFreeStatus(p); 1358 return NULL; 1359 } 1360 return p; 1361 } 1362 1363 SML_API SmlUnknownProtoElementPtr_t smlAllocUnknownProtoElement() { 1364 SmlUnknownProtoElementPtr_t p = (SmlUnknownProtoElementPtr_t)smlLibMalloc(sizeof(SmlUnknownProtoElement_t)); 1365 if (p == 0) return NULL; 1366 smlLibMemset(p, 0, sizeof(SmlUnknownProtoElement_t)); 1367 p->elementType = SML_PE_UNDEF; 1368 return p; 1369 } 1370 1371 #ifdef __USE_METINF__ 1372 SML_API SmlMetInfMetInfPtr_t smlAllocMetInfMetInf() { 1373 SmlMetInfMetInfPtr_t p = (SmlMetInfMetInfPtr_t)smlLibMalloc(sizeof(SmlMetInfMetInf_t)); 1374 if (p == NULL) return NULL; 1375 smlLibMemset(p, 0, sizeof(SmlMetInfMetInf_t)); 1376 return p; 1377 } 1378 1379 SML_API SmlMetInfAnchorPtr_t smlAllocMetInfAnchor() { 1380 SmlMetInfAnchorPtr_t p = (SmlMetInfAnchorPtr_t)smlLibMalloc(sizeof(SmlMetInfAnchor_t)); 1381 if (p == NULL) return NULL; 1382 smlLibMemset(p, 0, sizeof(SmlMetInfAnchor_t)); 1383 p->next = smlAllocPcdata(); 1384 if (p->next == NULL) { 1385 smlFreeMetinfAnchor(p); 1386 return NULL; 1387 } 1388 return p; 1389 } 1390 1391 SML_API SmlMetInfMemPtr_t smlAllocMetInfMem() { 1392 SmlMetInfMemPtr_t p = (SmlMetInfMemPtr_t)smlLibMalloc(sizeof(SmlMetInfMem_t)); 1393 if (p == NULL) return NULL; 1394 smlLibMemset(p, 0, sizeof(SmlMetInfMem_t)); 1395 p->free = smlAllocPcdata(); 1396 if (p->free == NULL) { 1397 smlFreeMetinfMem(p); 1398 return NULL; 1399 } 1400 p->freeid = smlAllocPcdata(); 1401 if (p->freeid == NULL) { 1402 smlFreeMetinfMem(p); 1403 return NULL; 1404 } 1405 return p; 1406 } 1407 #endif 1408 1409 #ifdef __USE_DEVINF__ 1410 SML_API SmlDevInfExtPtr_t smlAllocDevInfExt() { 1411 SmlDevInfExtPtr_t p = (SmlDevInfExtPtr_t)smlLibMalloc(sizeof(SmlDevInfExt_t)); 1412 if (p == NULL) return NULL; 1413 smlLibMemset(p, 0, sizeof(SmlDevInfExt_t)); 1414 p->xnam = smlAllocPcdata(); 1415 if (p->xnam == NULL) { 1416 smlFreeDevInfExt(p); 1417 return NULL; 1418 } 1419 return p; 1420 } 1421 1422 SML_API SmlDevInfExtListPtr_t smlAllocDevInfExtList() { 1423 SmlDevInfExtListPtr_t p = (SmlDevInfExtListPtr_t)smlLibMalloc(sizeof(SmlDevInfExtList_t)); 1424 if (p == NULL) return NULL; 1425 smlLibMemset(p, 0, sizeof(SmlDevInfExtList_t)); 1426 p->data = smlAllocDevInfExt(); 1427 if (p->data == NULL) { 1428 smlFreeDevInfExtList(p); 1429 return NULL; 1430 } 1431 return p; 1432 } 1433 1434 SML_API SmlDevInfSyncCapPtr_t smlAllocDevInfSyncCap() { 1435 SmlDevInfSyncCapPtr_t p = (SmlDevInfSyncCapPtr_t)smlLibMalloc(sizeof(SmlDevInfSyncCap_t)); 1436 if (p == NULL) return NULL; 1437 smlLibMemset(p, 0, sizeof(SmlDevInfSyncCap_t)); 1438 p->synctype = smlAllocPcdataList(); 1439 if (p->synctype == NULL) { 1440 smlFreeDevInfSynccap(p); 1441 return NULL; 1442 } 1443 return p; 1444 } 1445 1446 SML_API SmlDevInfCTDataPtr_t smlAllocDevInfCTData() { 1447 SmlDevInfCTDataPtr_t p = (SmlDevInfCTDataPtr_t)smlLibMalloc(sizeof(SmlDevInfCTData_t)); 1448 if (p == NULL) return NULL; 1449 smlLibMemset(p, 0, sizeof(SmlDevInfCTData_t)); 1450 p->name = smlAllocPcdata(); 1451 if (p->name == NULL) { 1452 smlFreeDevInfCTData(p); 1453 return NULL; 1454 } 1455 return p; 1456 } 1457 1458 SML_API SmlDevInfCTDataListPtr_t smlAllocDevInfCTDataList() { 1459 SmlDevInfCTDataListPtr_t p = (SmlDevInfCTDataListPtr_t)smlLibMalloc(sizeof(SmlDevInfCTDataList_t)); 1460 if (p == NULL) return NULL; 1461 smlLibMemset(p, 0, sizeof(SmlDevInfCTDataList_t)); 1462 p->data = smlAllocDevInfCTData(); 1463 if (p->data == NULL) { 1464 smlFreeDevInfCTDataList(p); 1465 return NULL; 1466 } 1467 return p; 1468 } 1469 1470 SML_API SmlDevInfCTDataPropPtr_t smlAllocDevInfCTDataProp() { 1471 SmlDevInfCTDataPropPtr_t p = (SmlDevInfCTDataPropPtr_t)smlLibMalloc(sizeof(SmlDevInfCTDataProp_t)); 1472 if (p == NULL) return NULL; 1473 smlLibMemset(p, 0, sizeof(SmlDevInfCTDataProp_t)); 1474 p->prop = smlAllocDevInfCTData(); 1475 if (p->prop == NULL) { 1476 smlFreeDevInfCTDataProp(p); 1477 return NULL; 1478 } 1479 return p; 1480 } 1481 1482 SML_API SmlDevInfCTDataPropListPtr_t smlAllocDevInfCTDataPropList() { 1483 SmlDevInfCTDataPropListPtr_t p = (SmlDevInfCTDataPropListPtr_t)smlLibMalloc(sizeof(SmlDevInfCTDataPropList_t)); 1484 if (p == NULL) return NULL; 1485 smlLibMemset(p, 0, sizeof(SmlDevInfCTDataPropList_t)); 1486 p->data = smlAllocDevInfCTDataProp(); 1487 if (p->data == NULL) { 1488 smlFreeDevInfCTDataPropList(p); 1489 return NULL; 1490 } 1491 return p; 1492 } 1493 1494 SML_API SmlDevInfCTCapPtr_t smlAllocDevInfCTCap() { 1495 SmlDevInfCTCapPtr_t p = (SmlDevInfCTCapPtr_t)smlLibMalloc(sizeof(SmlDevInfCTCap_t)); 1496 if (p == NULL) return NULL; 1497 smlLibMemset(p, 0, sizeof(SmlDevInfCTCap_t)); 1498 p->cttype = smlAllocPcdata(); 1499 if (p->cttype == NULL) { 1500 smlFreeDevInfCTCap(p); 1501 return NULL; 1502 } 1503 p->prop = smlAllocDevInfCTDataPropList(); 1504 if (p->prop == NULL) { 1505 smlFreeDevInfCTCap(p); 1506 return NULL; 1507 } 1508 return p; 1509 } 1510 1511 SML_API SmlDevInfCtcapListPtr_t smlAllocDevInfCtcapList() { 1512 SmlDevInfCtcapListPtr_t p = (SmlDevInfCtcapListPtr_t)smlLibMalloc(sizeof(SmlDevInfCtcapList_t)); 1513 if (p == NULL) return NULL; 1514 smlLibMemset(p, 0, sizeof(SmlDevInfCtcapList_t)); 1515 p->data = smlAllocDevInfCTCap(); 1516 if (p->data == NULL) { 1517 smlFreeDevInfCtcapList(p); 1518 return NULL; 1519 } 1520 return p; 1521 } 1522 1523 SML_API SmlDevInfDSMemPtr_t smlAllocDevInfDSMem() { 1524 SmlDevInfDSMemPtr_t p = (SmlDevInfDSMemPtr_t)smlLibMalloc(sizeof(SmlDevInfDSMem_t)); 1525 if (p == NULL) return NULL; 1526 smlLibMemset(p, 0, sizeof(SmlDevInfDSMem_t)); 1527 return p; 1528 } 1529 1530 SML_API SmlDevInfXmitPtr_t smlAllocDevInfXmit() { 1531 SmlDevInfXmitPtr_t p = (SmlDevInfXmitPtr_t)smlLibMalloc(sizeof(SmlDevInfXmit_t)); 1532 if (p == NULL) return NULL; 1533 smlLibMemset(p, 0, sizeof(SmlDevInfXmit_t)); 1534 p->cttype = smlAllocPcdata(); 1535 if (p->cttype == NULL) { 1536 smlFreeDevInfXmit(p); 1537 return NULL; 1538 } 1539 p->verct = smlAllocPcdata(); 1540 if (p->verct == NULL) { 1541 smlFreeDevInfXmit(p); 1542 return NULL; 1543 } 1544 return p; 1545 } 1546 1547 SML_API SmlDevInfXmitListPtr_t smlAllocDevInfXmitList() { 1548 SmlDevInfXmitListPtr_t p = (SmlDevInfXmitListPtr_t)smlLibMalloc(sizeof(SmlDevInfXmitList_t)); 1549 if (p == NULL) return NULL; 1550 smlLibMemset(p, 0, sizeof(SmlDevInfXmitList_t)); 1551 p->data = smlAllocDevInfXmit(); 1552 if (p->data == NULL) { 1553 smlFreeDevInfXmitList(p); 1554 return NULL; 1555 } 1556 return p; 1557 } 1558 1559 SML_API SmlDevInfDatastorePtr_t smlAllocDevInfDatastore() { 1560 SmlDevInfDatastorePtr_t p = (SmlDevInfDatastorePtr_t)smlLibMalloc(sizeof(SmlDevInfDatastore_t)); 1561 if (p == NULL) return NULL; 1562 smlLibMemset(p, 0, sizeof(SmlDevInfDatastore_t)); 1563 p->sourceref = smlAllocPcdata(); 1564 if (p->sourceref == NULL) { 1565 smlFreeDevInfDatastore(p); 1566 return NULL; 1567 } 1568 p->rxpref = smlAllocDevInfXmit(); 1569 if (p->rxpref == NULL) { 1570 smlFreeDevInfDatastore(p); 1571 return NULL; 1572 } 1573 p->txpref = smlAllocDevInfXmit(); 1574 if (p->txpref == NULL) { 1575 smlFreeDevInfDatastore(p); 1576 return NULL; 1577 } 1578 p->synccap = smlAllocDevInfSyncCap(); 1579 if (p->synccap == NULL) { 1580 smlFreeDevInfDatastore(p); 1581 return NULL; 1582 } 1583 return p; 1584 } 1585 1586 SML_API SmlDevInfDatastoreListPtr_t smlAllocDevInfDatastoreList() { 1587 SmlDevInfDatastoreListPtr_t p = (SmlDevInfDatastoreListPtr_t)smlLibMalloc(sizeof(SmlDevInfDatastoreList_t)); 1588 if (p == NULL) return NULL; 1589 smlLibMemset(p, 0, sizeof(SmlDevInfDatastoreList_t)); 1590 p->data = smlAllocDevInfDatastore(); 1591 if (p->data == NULL) { 1592 smlFreeDevInfDatastoreList(p); 1593 return NULL; 1594 } 1595 return p; 1596 } 1597 1598 SML_API SmlDevInfDevInfPtr_t smlAllocDevInfDevInf() { 1599 SmlDevInfDevInfPtr_t p = (SmlDevInfDevInfPtr_t)smlLibMalloc(sizeof(SmlDevInfDevInf_t)); 1600 if (p == NULL) return NULL; 1601 smlLibMemset(p, 0, sizeof(SmlDevInfDevInf_t)); 1602 p->verdtd = smlAllocPcdata(); 1603 if (p->verdtd == NULL) { 1604 smlFreeDevInfDevInf(p); 1605 return NULL; 1606 } 1607 p->devid = smlAllocPcdata(); 1608 if (p->devid == NULL) { 1609 smlFreeDevInfDevInf(p); 1610 return NULL; 1611 } 1612 p->devtyp = smlAllocPcdata(); 1613 if (p->devtyp == NULL) { 1614 smlFreeDevInfDevInf(p); 1615 return NULL; 1616 } 1617 1618 p->datastore = smlAllocDevInfDatastoreList(); 1619 /* Fixed error checking. 3/07/03 Emily Bernotas */ 1620 if (p->datastore == NULL) { 1621 smlFreeDevInfDevInf(p); 1622 return NULL; 1623 } 1624 /* When developing the DS Stack, testing showed that the RTK was depending on these 1625 * two optional DevInf element to have valid data when encoding the SyncML document. 1626 * Although the phone does use the CTCAP element, it does NOT use the Ext element and 1627 * not having valid data in the Ext was causing a PANIC. 1628 * The design decision was made to fix the RTK here to follow the original philosophy 1629 * not allocating memory of optional elements. For example, memory for other optional 1630 * elements like Man, FwV, etc is not allocated here. It is now the responsibility of 1631 * the DS Stack to allocate memory for CTCAP. 04/02/03 Emily Bernotas 1632 */ 1633 /* 1634 p->ctcap = smlAllocDevInfCtcapList(); 1635 if (p->ctcap == NULL) { 1636 smlFreeDevInfDevInf(p); 1637 return NULL; 1638 } 1639 p->ext = smlAllocDevInfExtList(); 1640 if (p->ext == NULL) { 1641 smlFreeDevInfDevInf(p); 1642 return NULL; 1643 } 1644 */ 1645 return p; 1646 } 1647 1648 #endif // DevInf 1649 1650 #ifdef __USE_DMTND__ 1651 SML_API SmlDmTndPtr_t smlAllocDmTnd() { 1652 SmlDmTndPtr_t p = (SmlDmTndPtr_t)smlLibMalloc(sizeof(SmlDmTnd_t)); 1653 if (p == NULL) return NULL; 1654 smlLibMemset(p, 0, sizeof(SmlDmTnd_t)); 1655 return p; 1656 } 1657 1658 SML_API SmlDmTndNodeListPtr_t smlAllocDmTndNodeList() { 1659 SmlDmTndNodeListPtr_t p = (SmlDmTndNodeListPtr_t)smlLibMalloc(sizeof(SmlDmTndNodeList_t)); 1660 if (p == NULL) return NULL; 1661 smlLibMemset(p, 0, sizeof(SmlDmTndNodeList_t)); 1662 return p; 1663 } 1664 1665 SML_API SmlDmTndNodePtr_t smlAllocDmTndNode() { 1666 SmlDmTndNodePtr_t p = (SmlDmTndNodePtr_t)smlLibMalloc(sizeof(SmlDmTndNode_t)); 1667 if (p == NULL) return NULL; 1668 smlLibMemset(p, 0, sizeof(SmlDmTndNode_t)); 1669 return p; 1670 } 1671 1672 SML_API SmlDmTndRTPropsPtr_t smlAllocDmTndRTProps() { 1673 SmlDmTndRTPropsPtr_t p = (SmlDmTndRTPropsPtr_t)smlLibMalloc(sizeof(SmlDmTndRTProps_t)); 1674 if (p == NULL) return NULL; 1675 smlLibMemset(p, 0, sizeof(SmlDmTndRTProps_t)); 1676 return p; 1677 } 1678 1679 SML_API SmlDmTndFormatPtr_t smlAllocDmTndFormat() { 1680 SmlDmTndFormatPtr_t p = (SmlDmTndFormatPtr_t)smlLibMalloc(sizeof(SmlDmTndFormatPtr_t)); 1681 if (p == NULL) return NULL; 1682 smlLibMemset(p, 0, sizeof(SmlDmTndFormat_t)); 1683 return p; 1684 } 1685 1686 SML_API SmlDmTndTypePtr_t smlAllocDmTndType() { 1687 SmlDmTndTypePtr_t p = (SmlDmTndTypePtr_t)smlLibMalloc(sizeof(SmlDmTndRTProps_t)); 1688 if (p == NULL) return NULL; 1689 smlLibMemset(p, 0, sizeof(SmlDmTndType_t)); 1690 return p; 1691 } 1692 #endif // AllocDmTnd 1693 1694 #endif // AllocFuncs 1695