char* ModelNode_getObjectReference(ModelNode* node, char* objectReference) { if (objectReference == NULL) objectReference = (char*) malloc(130); int bufPos = createObjectReference(node, objectReference); objectReference[bufPos] = 0; return objectReference; }
static int createObjectReference(ModelNode* node, char* objectReference) { ModelNodeType type; int bufPos; if (node->modelType != LogicalNodeModelType) { bufPos = createObjectReference(node->parent, objectReference); objectReference[bufPos++] = '.'; } else { LogicalNode* lNode = (LogicalNode*) node; LogicalDevice* lDevice = lNode->parent; bufPos = 0; int nameLength = strlen(lDevice->name); int i; for (i = 0; i < nameLength; i++) { objectReference[bufPos++] = lDevice->name[i]; } objectReference[bufPos++] = '/'; } /* append own name */ int nameLength = strlen(node->name); int i; for (i = 0; i < nameLength; i++) { objectReference[bufPos++] = node->name[i]; } return bufPos; }
static int createObjectReference(ModelNode* node, char* objectReference) { int bufPos; if (node->modelType != LogicalNodeModelType) { bufPos = createObjectReference(node->parent, objectReference); objectReference[bufPos++] = '.'; } else { LogicalNode* lNode = (LogicalNode*) node; LogicalDevice* lDevice = (LogicalDevice*) lNode->parent; IedModel* iedModel = (IedModel*) lDevice->parent; bufPos = 0; int nameLength = strlen (iedModel->name) + strlen(lDevice->name); strncpy(objectReference, iedModel->name, 64); strncat(objectReference, lDevice->name, 64); bufPos += nameLength; objectReference[bufPos++] = '/'; } /* append own name */ int nameLength = strlen(node->name); int i; for (i = 0; i < nameLength; i++) { objectReference[bufPos++] = node->name[i]; } return bufPos; }