From 067b13da30b0f0c3a10000080994c644b1cdc542 Mon Sep 17 00:00:00 2001 From: Thorsten Kummermehr Date: Tue, 7 Nov 2017 16:03:53 +0100 Subject: Fix wrong iteration over all ports --- ucs2-interface/ucs-xml/UcsXml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ucs2-interface/ucs-xml/UcsXml.c') diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index 8837356..943f43b 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -756,7 +756,7 @@ static ParseResult_t ParseNode(mxml_node_t *node, PrivateData_t *priv) UcsXml_CB_OnError("Unknown Port:'%s'", 1, txt); RETURN_ASSERT(Parse_XmlError); } - if(!GetElementArray(port, ALL_SOCKETS, &txt, &port)) + if(!GetElementArray(port, ALL_PORTS, &txt, &port)) break; } } -- cgit 1.2.3-korg From 0b7b06a72303616d5b3baccfe4336cb5d9fd3003 Mon Sep 17 00:00:00 2001 From: Thorsten Kummermehr Date: Tue, 7 Nov 2017 16:04:49 +0100 Subject: Add NULL termination of port lists --- ucs2-interface/ucs-xml/UcsXml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ucs2-interface/ucs-xml/UcsXml.c') diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index 943f43b..f9ec5f8 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -169,7 +169,7 @@ static const char* ALL_SOCKETS[] = { MOST_SOCKET, USB_SOCKET, MLB_SOCKET, #define MLB_PORT "MediaLBPort" #define USB_PORT "USBPort" #define STRM_PORT "StreamPort" -static const char* ALL_PORTS[] = { MLB_PORT, USB_PORT, STRM_PORT }; +static const char* ALL_PORTS[] = { MLB_PORT, USB_PORT, STRM_PORT, NULL }; static const char* PHYSICAL_LAYER = "PhysicalLayer"; static const char* DEVICE_INTERFACES = "DeviceInterfaces"; -- cgit 1.2.3-korg From 1f25b3a06ec284ee132bae8a81e183bb2a9ec819 Mon Sep 17 00:00:00 2001 From: Thorsten Kummermehr Date: Tue, 7 Nov 2017 16:08:22 +0100 Subject: Change all UNICENS words to upper case --- ucs2-interface/ucs-xml/UcsXml.c | 2 +- ucs2-interface/ucs-xml/UcsXml.h | 8 ++++---- ucs2-interface/ucs-xml/UcsXml_Private.c | 2 +- ucs2-interface/ucs-xml/UcsXml_Private.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'ucs2-interface/ucs-xml/UcsXml.c') diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index f9ec5f8..fcbe5f5 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -1,5 +1,5 @@ /*------------------------------------------------------------------------------------------------*/ -/* Unicens XML Parser */ +/* UNICENS XML Parser */ /* Copyright 2017, Microchip Technology Inc. and its subsidiaries. */ /* */ /* Redistribution and use in source and binary forms, with or without */ diff --git a/ucs2-interface/ucs-xml/UcsXml.h b/ucs2-interface/ucs-xml/UcsXml.h index b36e007..8aff893 100644 --- a/ucs2-interface/ucs-xml/UcsXml.h +++ b/ucs2-interface/ucs-xml/UcsXml.h @@ -1,5 +1,5 @@ /*------------------------------------------------------------------------------------------------*/ -/* Unicens XML Parser */ +/* UNICENS XML Parser */ /* Copyright 2017, Microchip Technology Inc. and its subsidiaries. */ /* */ /* Redistribution and use in source and binary forms, with or without */ @@ -38,7 +38,7 @@ extern "C" { #include #include "ucs_api.h" -/** Structure holding informations to startup Unicens (UCS). +/** Structure holding informations to startup UNICENS (UCS). * Pass all these variables to the UCS manager structure, but not pInternal. * */ typedef struct @@ -62,8 +62,8 @@ typedef struct /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ /** - * \brief Initializes Unicens XML parser module, parses the given string and - * generate the data needed to run Unicens (UCS) library. + * \brief Initializes UNICENS XML parser module, parses the given string and + * generate the data needed to run UNICENS (UCS) library. * * \note In case of errors the callback UcsXml_CB_OnError will be raised. * \param xmlString - Zero terminated XML string. The string will not be used diff --git a/ucs2-interface/ucs-xml/UcsXml_Private.c b/ucs2-interface/ucs-xml/UcsXml_Private.c index 9350191..f914ccb 100644 --- a/ucs2-interface/ucs-xml/UcsXml_Private.c +++ b/ucs2-interface/ucs-xml/UcsXml_Private.c @@ -1,5 +1,5 @@ /*------------------------------------------------------------------------------------------------*/ -/* Unicens XML Parser */ +/* UNICENS XML Parser */ /* Copyright 2017, Microchip Technology Inc. and its subsidiaries. */ /* */ /* Redistribution and use in source and binary forms, with or without */ diff --git a/ucs2-interface/ucs-xml/UcsXml_Private.h b/ucs2-interface/ucs-xml/UcsXml_Private.h index f8df323..964a7ad 100644 --- a/ucs2-interface/ucs-xml/UcsXml_Private.h +++ b/ucs2-interface/ucs-xml/UcsXml_Private.h @@ -1,5 +1,5 @@ /*------------------------------------------------------------------------------------------------*/ -/* Unicens XML Parser */ +/* UNICENS XML Parser */ /* Copyright 2017, Microchip Technology Inc. and its subsidiaries. */ /* */ /* Redistribution and use in source and binary forms, with or without */ -- cgit 1.2.3-korg From a18a8321a061ae60aec72d4cba4974ddf0bcf8f8 Mon Sep 17 00:00:00 2001 From: Thorsten Kummermehr Date: Tue, 7 Nov 2017 16:12:54 +0100 Subject: Improve general error handling --- ucs2-interface/ucs-xml/UcsXml.c | 48 ++++++++++++++++++++++++++++----- ucs2-interface/ucs-xml/UcsXml_Private.c | 27 ++++++++++--------- 2 files changed, 56 insertions(+), 19 deletions(-) (limited to 'ucs2-interface/ucs-xml/UcsXml.c') diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index fcbe5f5..c86746f 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -38,7 +38,7 @@ /************************************************************************/ #define COMPILETIME_CHECK(cond) (void)sizeof(int[2 * !!(cond) - 1]) -#define RETURN_ASSERT(result) { assert(false); return result; } +#define RETURN_ASSERT(result) { UcsXml_CB_OnError("Assertion in file=%s, line=%d", 2, __FILE__, __LINE__); return result; } #define MISC_HB(value) ((uint8_t)((uint16_t)(value) >> 8)) #define MISC_LB(value) ((uint8_t)((uint16_t)(value) & (uint16_t)0xFF)) @@ -54,6 +54,7 @@ struct UcsXmlRoute struct UcsXmlScript { + bool inUse; char scriptName[32]; Ucs_Rm_Node_t *node; struct UcsXmlScript *next; @@ -278,9 +279,9 @@ UcsXmlVal_t *UcsXml_Parse(const char *xmlString) return val; ERROR: if (Parse_MemoryError == result) - UcsXml_CB_OnError("XML error, aborting..", 0); + UcsXml_CB_OnError("XML memory error, aborting..", 0); else - UcsXml_CB_OnError("Allocation error, aborting..", 0); + UcsXml_CB_OnError("XML parsing error, aborting..", 0); assert(false); if (!tree) mxmlDelete(tree); @@ -687,6 +688,8 @@ static ParseResult_t ParseAll(mxml_node_t *tree, UcsXmlVal_t *ucs, PrivateData_t /*Iterate all scripts. No scripts at all is allowed*/ if(GetElement(tree, SCRIPT, true, &sub, false)) { + bool found = true; + struct UcsXmlScript *scrlist = priv->pScrLst; while(sub) { result = ParseScript(sub, priv); @@ -695,6 +698,18 @@ static ParseResult_t ParseAll(mxml_node_t *tree, UcsXmlVal_t *ucs, PrivateData_t if(!GetElement(sub, SCRIPT, false, &sub, false)) break; } + /* Check if all scripts where referenced */ + while(NULL != scrlist) + { + if (!scrlist->inUse) + { + UcsXml_CB_OnError("Script not defined:'%s', used by node=0x%X", 1, scrlist->scriptName, scrlist->node->signature_ptr->node_address); + found = false; + } + scrlist = scrlist->next; + } + if (!found) + RETURN_ASSERT(Parse_XmlError); } return result; } @@ -995,6 +1010,7 @@ static ParseResult_t ParseSocket(mxml_node_t *soc, bool isSource, MSocketType_t /*Connect in and out socket once they are created*/ if (priv->conData.inSocket && priv->conData.outSocket) { + bool mostIsInput; bool mostIsOutput; Ucs_Rm_EndPoint_t *ep; struct UcsXmlRoute *route; @@ -1031,7 +1047,13 @@ static ParseResult_t ParseSocket(mxml_node_t *soc, bool isSource, MSocketType_t ep = MCalloc(&priv->objList, 1, sizeof(Ucs_Rm_EndPoint_t)); if (NULL == ep) RETURN_ASSERT(Parse_MemoryError); + mostIsInput = (UCS_XRM_RC_TYPE_MOST_SOCKET == *((Ucs_Xrm_ResourceType_t *)priv->conData.inSocket)); mostIsOutput = (UCS_XRM_RC_TYPE_MOST_SOCKET == *((Ucs_Xrm_ResourceType_t *)priv->conData.outSocket)); + if (!mostIsInput && !mostIsOutput) + { + UcsXml_CB_OnError("At least one MOST socket required per connection", 0); + RETURN_ASSERT(Parse_XmlError); + } ep->endpoint_type = mostIsOutput ? UCS_RM_EP_SOURCE : UCS_RM_EP_SINK; ep->jobs_list_ptr = GetJobList(*jobList, &priv->objList); if(NULL == ep->jobs_list_ptr) RETURN_ASSERT(Parse_MemoryError); @@ -1102,7 +1124,7 @@ static ParseResult_t ParseScript(mxml_node_t *scr, PrivateData_t *priv) if (Parse_Success != result) return result; } else { UcsXml_CB_OnError("Unknown script action:'%s'", 1, txt); - /*RETURN_ASSERT(Parse_XmlError);*/ + RETURN_ASSERT(Parse_XmlError); } if (!GetElementArray(act, ALL_SCRIPTS, &txt, &act)) break; @@ -1117,6 +1139,7 @@ static ParseResult_t ParseScript(mxml_node_t *scr, PrivateData_t *priv) Ucs_Rm_Node_t *node = scrlist->node; node->script_list_ptr = script; node->script_list_size = actCnt; + scrlist->inUse = true; found = true; } scrlist = scrlist->next; @@ -1277,7 +1300,11 @@ static ParseResult_t ParseScriptPortCreate(mxml_node_t *act, Ucs_Ns_Script_t *sc speed = 0; else if (0 == strcmp(txt, I2C_SPEED_FAST)) speed = 1; - else RETURN_ASSERT(Parse_XmlError); + else + { + UcsXml_CB_OnError("Invalid I2C speed:'%s'", 1, txt); + RETURN_ASSERT(Parse_XmlError); + } req = scr->send_cmd; res = scr->exp_result; req->InstId = res->InstId = 1; @@ -1317,6 +1344,11 @@ static ParseResult_t ParseScriptPortWrite(mxml_node_t *act, Ucs_Ns_Script_t *scr mode = 1; else if (0 == strcmp(txt, I2C_WRITE_MODE_BURST)) mode = 2; + else + { + UcsXml_CB_OnError("Invalid I2C mode:'%s'", 1, txt); + RETURN_ASSERT(Parse_XmlError); + } } else { mode = 0; } @@ -1458,7 +1490,11 @@ static ParseResult_t ParseRoutes(UcsXmlVal_t *ucs, PrivateData_t *priv) } sourceRoute = sourceRoute->next; } - assert(routeAmount == ucs->routesSize); + if (routeAmount != ucs->routesSize) + { + UcsXml_CB_OnError("At least one sink (num=%d) is not connected, because of wrong Route name!", 2, (routeAmount - ucs->routesSize)); + RETURN_ASSERT(Parse_XmlError); + } #ifdef DEBUG /* Third perform checks when running in debug mode*/ diff --git a/ucs2-interface/ucs-xml/UcsXml_Private.c b/ucs2-interface/ucs-xml/UcsXml_Private.c index f914ccb..743598f 100644 --- a/ucs2-interface/ucs-xml/UcsXml_Private.c +++ b/ucs2-interface/ucs-xml/UcsXml_Private.c @@ -31,6 +31,7 @@ #include #include #include +#include "UcsXml.h" #include "UcsXml_Private.h" static const char* USB_PHY_STANDARD = "Standard"; @@ -69,8 +70,8 @@ static const char* VAL_TRUE = "true"; static const char* VAL_FALSE = "false"; */ -#define ASSERT_FALSE() { assert(false); return false; } -#define CHECK_POINTER(PTR) if (NULL == PTR) { ASSERT_FALSE(); } +#define ASSERT_FALSE(func, par) { UcsXml_CB_OnError("Parameter error in attribute=%s value=%s, file=%s, line=%d", 4, func, par, __FILE__, __LINE__); return false; } +#define CHECK_POINTER(PTR) if (NULL == PTR) { ASSERT_FALSE(PTR, "NULL pointer"); } static int32_t Str2Int(const char *val) { @@ -149,7 +150,7 @@ bool GetMostSocket(Ucs_Xrm_MostSocket_t **mostSoc, struct MostSocketParameters * soc->data_type = UCS_MOST_SCKT_DISC_FRAME_PHASE; break; default: - ASSERT_FALSE(); + ASSERT_FALSE("GetMostSocket->dataType", ""); } return true; } @@ -176,7 +177,7 @@ bool GetUsbPort(Ucs_Xrm_UsbPort_t **usbPort, struct UsbPortParameters *param) port->physical_layer = UCS_USB_PHY_LAYER_STANDARD; else if (0 == strcmp(USB_PHY_HSIC, param->physicalLayer)) port->physical_layer = UCS_USB_PHY_LAYER_HSCI; - else ASSERT_FALSE(); + else ASSERT_FALSE("GetUsbPort->physical_layer", param->physicalLayer); return true; } @@ -220,7 +221,7 @@ bool GetUsbSocket(Ucs_Xrm_UsbSocket_t **usbSoc, struct UsbSocketParameters *para soc->data_type = UCS_USB_SCKT_IPC_PACKET; break; default: - ASSERT_FALSE(); + ASSERT_FALSE("GetUsbSocket->dataType", ""); } soc->end_point_addr = (uint8_t)Str2Int(param->endpointAddress); soc->frames_per_transfer = (uint16_t)Str2Int(param->framesPerTrans); @@ -256,7 +257,7 @@ bool GetMlbPort(Ucs_Xrm_MlbPort_t **mlbPort, struct MlbPortParameters *param) port->clock_config = UCS_MLB_CLK_CFG_6144_FS; else if (0 == strcmp(param->clockConfig, CLOCK_8192FS)) port->clock_config = UCS_MLB_CLK_CFG_8192_FS; - else ASSERT_FALSE(); + else ASSERT_FALSE("GetMlbPort->clockConfig", param->clockConfig); return true; } @@ -306,7 +307,7 @@ bool GetMlbSocket(Ucs_Xrm_MlbSocket_t **mlbSoc, struct MlbSocketParameters *para soc->data_type = UCS_MLB_SCKT_IPC_PACKET; break; default: - ASSERT_FALSE(); + ASSERT_FALSE("GetMlbSocket->dataType", ""); } soc->channel_address = (uint16_t)Str2Int(param->channelAddress); soc->mlb_port_obj_ptr = param->mlbPort; @@ -343,7 +344,7 @@ bool GetStrmPort(Ucs_Xrm_StrmPort_t **strmPort, struct StrmPortParameters *param port->clock_config = UCS_STREAM_PORT_CLK_CFG_512FS; else if (0 == strcmp(param->clockConfig, CLOCK_WILDCARD)) port->clock_config = UCS_STREAM_PORT_CLK_CFG_WILD; - else ASSERT_FALSE(); + else ASSERT_FALSE("GetStrmPort->clockConfig", param->clockConfig); } else { port->clock_config = UCS_STREAM_PORT_CLK_CFG_WILD; } @@ -358,7 +359,7 @@ bool GetStrmPort(Ucs_Xrm_StrmPort_t **strmPort, struct StrmPortParameters *param port->data_alignment = UCS_STREAM_PORT_ALGN_RIGHT24BIT; else if (0 == strcmp(param->dataAlignment, STRM_ALIGN_SEQUENTIAL)) port->data_alignment = UCS_STREAM_PORT_ALGN_SEQ; - else ASSERT_FALSE(); + else ASSERT_FALSE("GetStrmPort->dataAlignment", param->dataAlignment); return true; } @@ -382,7 +383,7 @@ bool GetStrmSocket(Ucs_Xrm_StrmSocket_t **strmSoc, struct StrmSocketParameters * soc->data_type = UCS_STREAM_PORT_SCKT_SYNC_DATA; break; default: - ASSERT_FALSE(); + ASSERT_FALSE("GetStrmSocket->dataType", ""); } soc->bandwidth = param->bandwidth; if (0 == strcmp(param->streamPin, I2S_PIN_SRXA0)) @@ -409,7 +410,7 @@ bool GetStrmSocket(Ucs_Xrm_StrmSocket_t **strmSoc, struct StrmSocketParameters * soc->stream_port_obj_ptr = param->streamPortB; return true; } - else ASSERT_FALSE(); + else ASSERT_FALSE("GetStrmSocket->streamPin", param->streamPin); return true; } @@ -462,7 +463,7 @@ bool GetSyncCon(Ucs_Xrm_SyncCon_t **syncCon, struct SyncConParameters *param) con->mute_mode = UCS_SYNC_MUTE_MODE_NO_MUTING; else if (0 == strcmp(param->muteMode, MUTE_SIGNAL)) con->mute_mode = UCS_SYNC_MUTE_MODE_MUTE_SIGNAL; - else ASSERT_FALSE(); + else ASSERT_FALSE("GetSyncCon->mute_mode", param->muteMode); if (param->optional_offset) con->offset = (uint16_t)Str2Int(param->optional_offset); else @@ -501,7 +502,7 @@ bool GetAvpCon(Ucs_Xrm_AvpCon_t **avpCon, struct AvpConParameters *param) con->isoc_packet_size = UCS_ISOC_PCKT_SIZE_206; break; default: - ASSERT_FALSE(); + ASSERT_FALSE("GetAvpCon->isoc_packet_size", ""); } } else { con->isoc_packet_size = UCS_ISOC_PCKT_SIZE_188; -- cgit 1.2.3-korg From 297bad20e3385ecf4d9755370f76463c5072d0dd Mon Sep 17 00:00:00 2001 From: Thorsten Kummermehr Date: Tue, 7 Nov 2017 16:13:52 +0100 Subject: Improve integer handling --- ucs2-interface/ucs-xml/UcsXml.c | 63 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) (limited to 'ucs2-interface/ucs-xml/UcsXml.c') diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index c86746f..3078749 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -232,6 +232,7 @@ static bool GetElementArray(mxml_node_t *element, const char *array[], const cha static bool GetCount(mxml_node_t *element, const char *name, uint32_t *out, bool mandatory); static bool GetCountArray(mxml_node_t *element, const char *array[], uint32_t *out, bool mandatory); static bool GetString(mxml_node_t *element, const char *key, const char **out, bool mandatory); +static bool CheckInteger(const char *val, bool forceHex); static bool GetUInt16(mxml_node_t *element, const char *key, uint16_t *out, bool mandatory); static bool GetUInt8(mxml_node_t *element, const char *key, uint8_t *out, bool mandatory); static bool GetSocketType(const char *txt, MSocketType_t *out); @@ -419,19 +420,70 @@ static bool GetString(mxml_node_t *element, const char *key, const char **out, b return false; } +static bool CheckInteger(const char *value, bool forceHex) +{ + bool hex = forceHex; + int32_t len; + if (!value) return false; + len = strlen(value); + if (len >= 3 && '0' == value[0] && 'x' == value[1]) + { + hex = true; + value += 2; + } + while(value[0]) + { + bool valid = false; + uint8_t v = value[0]; + if (v >= '0' && v <= '9') valid = true; + if (hex) + { + if (v >= 'a' && v <= 'f') valid = true; + if (v >= 'A' && v <= 'F') valid = true; + } + if (!valid) return false; + ++value; + } + return true; +} + static bool GetUInt16(mxml_node_t *element, const char *key, uint16_t *out, bool mandatory) { + long int value; const char* txt; if (!GetString(element, key, &txt, mandatory)) return false; - *out = strtol( txt, NULL, 0 ); + if (!CheckInteger(txt, false)) + { + UcsXml_CB_OnError("key='%s' contained invalid integer='%s'", 2, key, txt); + return false; + } + value = strtol( txt, NULL, 0 ); + if (value > 0xFFFF) + { + UcsXml_CB_OnError("key='%s' is out of range='%d'", 2, key, value); + return false; + } + *out = value; return true; } static bool GetUInt8(mxml_node_t *element, const char *key, uint8_t *out, bool mandatory) { + long int value; const char* txt; if (!GetString(element, key, &txt, mandatory)) return false; - *out = strtol( txt, NULL, 0 ); + if (!CheckInteger(txt, false)) + { + UcsXml_CB_OnError("key='%s' contained invalid integer='%s'", 2, key, txt); + return false; + } + value = strtol( txt, NULL, 0 ); + if (value > 0xFF) + { + UcsXml_CB_OnError("key='%s' is out of range='%d'", 2, key, value); + return false; + } + *out = value; return true; } @@ -509,6 +561,13 @@ static bool GetPayload(mxml_node_t *element, const char *name, uint8_t **pPayloa assert(false); return 0; } + if (!CheckInteger(token, true)) + { + UcsXml_CB_OnError("Script payload contains non valid hex number='%s'", 1, token); + free(txtCopy); + assert(false); + return 0; + } p[offset + len++] = strtol( token, NULL, 16 ); token = strtok_r( NULL, " ,.-", &tkPtr ); } -- cgit 1.2.3-korg From 5a43116f6ec3e84fbdbfa81d6713170b889a8e99 Mon Sep 17 00:00:00 2001 From: Thorsten Kummermehr Date: Tue, 7 Nov 2017 16:14:34 +0100 Subject: Correct handling of empty nodes --- ucs2-interface/ucs-xml/UcsXml.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'ucs2-interface/ucs-xml/UcsXml.c') diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index 3078749..4c392cd 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -710,29 +710,30 @@ static ParseResult_t ParseAll(mxml_node_t *tree, UcsXmlVal_t *ucs, PrivateData_t if (Parse_Success != (result = ParseNode(sub, priv))) return result; /*/Iterate all connections. Node without any connection is also valid.*/ - if (!GetElementArray(sub->child, ALL_CONNECTIONS, &conType, &con)) - continue; - while(con) + if (GetElementArray(sub->child, ALL_CONNECTIONS, &conType, &con)) { - const char *socTypeStr; - MSocketType_t socType; - mxml_node_t *soc; - memset(&priv->conData, 0, sizeof(ConnectionData_t)); - if (Parse_Success != (result = ParseConnection(con, conType, priv))) - return result; - /*Iterate all sockets*/ - if(!GetElementArray(con->child, ALL_SOCKETS, &socTypeStr, &soc)) RETURN_ASSERT(Parse_XmlError); - while(soc) + while(con) { - if (!GetSocketType(socTypeStr, &socType)) RETURN_ASSERT(Parse_XmlError); - if (Parse_Success != (result = ParseSocket(soc, (0 == priv->conData.sockCnt), socType, &priv->conData.jobList, priv))) + const char *socTypeStr; + MSocketType_t socType; + mxml_node_t *soc; + memset(&priv->conData, 0, sizeof(ConnectionData_t)); + if (Parse_Success != (result = ParseConnection(con, conType, priv))) return result; - ++priv->conData.sockCnt; - if(!GetElementArray(soc, ALL_SOCKETS, &socTypeStr, &soc)) + /*Iterate all sockets*/ + if(!GetElementArray(con->child, ALL_SOCKETS, &socTypeStr, &soc)) RETURN_ASSERT(Parse_XmlError); + while(soc) + { + if (!GetSocketType(socTypeStr, &socType)) RETURN_ASSERT(Parse_XmlError); + if (Parse_Success != (result = ParseSocket(soc, (0 == priv->conData.sockCnt), socType, &priv->conData.jobList, priv))) + return result; + ++priv->conData.sockCnt; + if(!GetElementArray(soc, ALL_SOCKETS, &socTypeStr, &soc)) + break; + } + if(!GetElementArray(con, ALL_CONNECTIONS, &conType, &con)) break; } - if(!GetElementArray(con, ALL_CONNECTIONS, &conType, &con)) - break; } ++ucs->nodSize; if (!GetElement(sub, NODE, false, &sub, false)) -- cgit 1.2.3-korg