⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xltdec.c

📁 SyncML ToolKits,学习syncml的参考工具包.非常好用.
💻 C
📖 第 1 页 / 共 5 页
字号:
            case TN_CMDREF:                rc = buildPCData(pDecoder, (VoidPtr_t)&pStatus->cmdRef);                break;            case TN_CMD:                rc = buildPCData(pDecoder, (VoidPtr_t)&pStatus->cmd);                cmd++;                break;            case TN_DATA:                rc = buildPCData(pDecoder, (VoidPtr_t)&pStatus->data);                data++;                break;            case TN_CHAL:                rc = buildChal(pDecoder, (VoidPtr_t)&pStatus->chal);                break;            case TN_CRED:                rc = buildCred(pDecoder, (VoidPtr_t)&pStatus->cred);                break;            /* Lists */            case TN_ITEM:                rc = appendItemList(pDecoder, (VoidPtr_t)&pStatus->itemList);                break;            case TN_TARGETREF:                rc = appendTargetRefList(pDecoder, (VoidPtr_t)&pStatus->targetRefList);                break;            case TN_SOURCEREF:                rc = appendSourceRefList(pDecoder, (VoidPtr_t)&pStatus->sourceRefList);                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeStatus(pStatus);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeStatus(pStatus);            return rc;        }    }    if ((cmd == 0) || (data == 0) || (cmdid == 0))     {        smlFreeStatus(pStatus);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppElem = pStatus;    return SML_ERR_OK;}#ifdef RESULT_RECEIVERet_tbuildResults(XltDecoderPtr_t pDecoder, VoidPtr_t *ppResults){    XltDecScannerPtr_t pScanner;    SmlResultsPtr_t pResults;    Ret_t rc;    Long_t cmdref = 0, items = 0, cmdid = 0;    if (*ppResults != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    pScanner = pDecoder->scanner;    if ((pResults = (SmlResultsPtr_t)smlLibMalloc(sizeof(SmlResults_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pResults, 0, sizeof(SmlResults_t));    /* initialize the element type field */    pResults->elementType = SML_PE_RESULTS;    if (IS_EMPTY(pScanner->curtok)) {        smlLibFree(pResults);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        smlLibFree(pResults);        return rc;    }    while (pScanner->curtok->type != TOK_TAG_END) {        switch (pScanner->curtok->tagid) {            /* PCDATA elements */            case TN_CMDID:                rc = buildPCData(pDecoder, (VoidPtr_t)&pResults->cmdID);                cmdid++;                break;            case TN_MSGREF:                rc = buildPCData(pDecoder, (VoidPtr_t)&pResults->msgRef);                break;            case TN_CMDREF:                rc = buildPCData(pDecoder, (VoidPtr_t)&pResults->cmdRef);                cmdref++;                break;            case TN_META:                rc = buildPCData(pDecoder, (VoidPtr_t)&pResults->meta);                break;            case TN_TARGETREF:                rc = buildPCData(pDecoder, (VoidPtr_t)&pResults->targetRef);                break;            case TN_SOURCEREF:                rc = buildPCData(pDecoder, (VoidPtr_t)&pResults->sourceRef);                break;                /* Lists */            case TN_ITEM:                rc = appendItemList(pDecoder, &pResults->itemList);                items++;                break;            default:                rc = SML_ERR_XLT_INVAL_SYNCML_DOC;        }        if (rc != SML_ERR_OK) {            smlFreeResults(pResults);            return rc;        }        if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {            smlFreeResults(pResults);            return rc;        }    }    if ((cmdref == 0) || (items == 0) || (cmdid == 0))    {        smlFreeResults(pResults);        return SML_ERR_XLT_INVAL_SYNCML_DOC;    }    *ppResults = pResults;    return SML_ERR_OK;}#endifRet_tbuildPCData(XltDecoderPtr_t pDecoder, VoidPtr_t *ppPCData){    XltDecScannerPtr_t pScanner;    SmlPcdataPtr_t pPCData = 0;    SmlPcdataExtension_t ext;    Ret_t rc;    pScanner = pDecoder->scanner;    if (*ppPCData != NULL)        return SML_ERR_XLT_INVAL_SYNCML_DOC;    if (IS_EMPTY(pScanner->curtok)) {        if ((pPCData = (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t))) == NULL)            return SML_ERR_NOT_ENOUGH_SPACE;        smlLibMemset(pPCData, 0, sizeof(SmlPcdata_t));        *ppPCData = pPCData;        return SML_ERR_OK;    }     pPCData = NULL;    if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {        if (rc == SML_ERR_XLT_INVAL_SYNCML_DOC) { /* leaks if dtd failed */	        pPCData = pScanner->curtok->pcdata; 		    *ppPCData = pPCData; 		}        return rc;    }    if (IS_CONTENT(pScanner->curtok)) {        /* PCData element has a regular string or opaque content */        while (pScanner->curtok->type == TOK_CONT) {            if (pPCData == NULL)                pPCData = pScanner->curtok->pcdata;            else {                pPCData = concatPCData(pPCData, pScanner->curtok->pcdata);                smlLibFree(pScanner->curtok->pcdata->content);                smlLibFree(pScanner->curtok->pcdata);				                if (pPCData == NULL)                    return SML_ERR_XLT_INVAL_PCDATA;            }                           if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {                *ppPCData = pPCData;                return rc;            }        }    } else if (IS_START_OR_EMPTY(pScanner->curtok)) {        /* PCData element contains an XML dokument that is handled by an           extension mechanism  */        ext = pScanner->curtok->ext;        if ((rc = discardToken(pDecoder)) != SML_ERR_OK) return rc;        if ((pPCData = (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t))) == NULL)            return SML_ERR_NOT_ENOUGH_SPACE;        smlLibMemset(pPCData, 0, sizeof(SmlPcdata_t));        pPCData->contentType = SML_PCDATA_EXTENSION;        pPCData->extension = ext;        switch (ext) {#ifdef __USE_METINF__				case SML_EXT_METINF:                    if ((rc = buildMetInfMetInfCmd(pDecoder, (VoidPtr_t)&pPCData->content)) != SML_ERR_OK) {                        smlLibFree(pPCData);                        return rc;                    }                break;#endif#ifdef __USE_DEVINF__				case SML_EXT_DEVINF:                                    if ((rc = buildDevInfDevInfCmd(pDecoder, (VoidPtr_t)&pPCData->content)) != SML_ERR_OK) {                           					smlLibFree(pPCData);                        return rc;                    }                /* the scanner must point to the closing PCDATA tag */                if (((rc = nextToken(pDecoder)) != SML_ERR_OK)) {                     smlLibFree(pPCData);                    return rc;                }                break;#endif            default:                smlFreePcdata(pPCData);                return SML_ERR_XLT_INVAL_EXT;        }    } else if (IS_END(pScanner->curtok)) {        /* PCData element is empty */    } else {        return SML_ERR_XLT_INVAL_PCDATA;    }                    if (pScanner->curtok->type != TOK_TAG_END)        return SML_ERR_XLT_INVAL_PCDATA;    if (pPCData == NULL) {        if ((pPCData = (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t))) == NULL)            return SML_ERR_NOT_ENOUGH_SPACE;        smlLibMemset(pPCData, 0, sizeof(SmlPcdata_t));    }    *ppPCData = pPCData;    return SML_ERR_OK;}Ret_tbuildPCDataList(XltDecoderPtr_t pDecoder, VoidPtr_t *ppPCData){		SmlPcdataListPtr_t pPCDataList = NULL, pPrev = NULL;    		pPCDataList = (SmlPcdataListPtr_t) *ppPCData;		/* advance to the end of the list, and create ther an empty list element */		while (pPCDataList != NULL) {			pPrev = pPCDataList;			pPCDataList = pPrev->next;		}		if ((pPCDataList = (SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t))) == NULL)          return SML_ERR_NOT_ENOUGH_SPACE;        smlLibMemset(pPCDataList, 0, sizeof(SmlPcdataList_t));		if (pPrev != NULL) /* we already had some entries in the list */			pPrev->next = pPCDataList;		else /* nope we created a new list */			*ppPCData = pPCDataList;		pPCDataList->data = NULL;		/* at this point pPCDataList should point to an valid list element */		return buildPCData(pDecoder, (VoidPtr_t)&pPCDataList->data);}static Ret_tappendItemList(XltDecoderPtr_t pDecoder, SmlItemListPtr_t *ppItemList){    SmlItemListPtr_t pNewItemList;    SmlItemListPtr_t pItemList;    Ret_t rc;    pItemList = *ppItemList;    if (pItemList != NULL)        while (pItemList->next != NULL)            pItemList = pItemList->next;    if ((pNewItemList = (SmlItemListPtr_t)smlLibMalloc(sizeof(SmlItemList_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pNewItemList, 0, sizeof(SmlItemList_t));    if ((rc = buildItem(pDecoder, (VoidPtr_t)&pNewItemList->item)) != SML_ERR_OK) {        smlLibFree(pNewItemList);        return rc;    }    if (pItemList == NULL)        *ppItemList = pNewItemList;    else        pItemList->next = pNewItemList;    return SML_ERR_OK;}static Ret_tappendSourceList(XltDecoderPtr_t pDecoder, SmlSourceListPtr_t *ppSourceList){    SmlSourceListPtr_t pNewSourceList;    SmlSourceListPtr_t pSourceList;    Ret_t rc;    pSourceList = *ppSourceList;    if (pSourceList != NULL)        while (pSourceList->next != NULL)            pSourceList = pSourceList->next;    if ((pNewSourceList = (SmlSourceListPtr_t)smlLibMalloc(sizeof(SmlSourceList_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pNewSourceList, 0, sizeof(SmlSourceList_t));    if ((rc = buildTargetOrSource(pDecoder, (VoidPtr_t)&pNewSourceList->source)) != SML_ERR_OK) {        smlLibFree(pNewSourceList);        return rc;    }    if (pSourceList == NULL)        *ppSourceList = pNewSourceList;    else        pSourceList->next = pNewSourceList;    return SML_ERR_OK;}#ifdef MAPITEM_RECEIVEstatic Ret_tappendMapItemList(XltDecoderPtr_t pDecoder, SmlMapItemListPtr_t *ppMapItemList){    SmlMapItemListPtr_t pNewMapItemList;    SmlMapItemListPtr_t pMapItemList;    Ret_t rc;    pMapItemList = *ppMapItemList;    if (pMapItemList != NULL)        while (pMapItemList->next != NULL)            pMapItemList = pMapItemList->next;    if ((pNewMapItemList = (SmlMapItemListPtr_t)smlLibMalloc(sizeof(SmlMapItemList_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pNewMapItemList, 0, sizeof(SmlMapItemList_t));    if ((rc = buildMapItem(pDecoder, (VoidPtr_t)&pNewMapItemList->mapItem)) != SML_ERR_OK) {        smlLibFree(pNewMapItemList);        return rc;    }    if (pMapItemList == NULL)        *ppMapItemList = pNewMapItemList;    else        pMapItemList->next = pNewMapItemList;    return SML_ERR_OK;}#endifstatic Ret_tappendTargetRefList(XltDecoderPtr_t pDecoder, SmlTargetRefListPtr_t *ppTargetRefList){    SmlTargetRefListPtr_t pNewTargetRefList;    SmlTargetRefListPtr_t pTargetRefList;    Ret_t rc;    pTargetRefList = *ppTargetRefList;    if (pTargetRefList != NULL)        while (pTargetRefList->next != NULL)            pTargetRefList = pTargetRefList->next;    if ((pNewTargetRefList = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pNewTargetRefList, 0, sizeof(SmlTargetRefList_t));    if ((rc = buildPCData(pDecoder, (VoidPtr_t)&pNewTargetRefList->targetRef)) != SML_ERR_OK) {        smlFreePcdata(pNewTargetRefList->targetRef);        smlLibFree(pNewTargetRefList);        return rc;    }    if (pTargetRefList == NULL)        *ppTargetRefList = pNewTargetRefList;    else        pTargetRefList->next = pNewTargetRefList;    return SML_ERR_OK;}static Ret_tappendSourceRefList(XltDecoderPtr_t pDecoder, SmlSourceRefListPtr_t *ppSourceRefList){    SmlSourceRefListPtr_t pNewSourceRefList;    SmlSourceRefListPtr_t pSourceRefList;    Ret_t rc;    pSourceRefList = *ppSourceRefList;    if (pSourceRefList != NULL)        while (pSourceRefList->next != NULL)            pSourceRefList = pSourceRefList->next;    if ((pNewSourceRefList = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t))) == NULL)        return SML_ERR_NOT_ENOUGH_SPACE;    smlLibMemset(pNewSourceRefList, 0, sizeof(SmlSourceRefList_t));    if ((rc = buildPCData(pDecoder, (VoidPtr_t)&pNewSourceRefList->sourceRef)) != SML_ERR_OK) {        smlFreePcdata(pNewSourceRefList->sourceRef);        smlLibFree(pNewSourceRefList);        return rc;    }    if (pSourceRefList == NULL)        *ppSourceRefList = pNewSourceRefList;    else        pSourceRefList->next = pNewSourceRefList;    return SML_ERR_OK;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -