From 6618093f7a152c3e8e7748728d24b5875ef0ffc6 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Wed, 22 Aug 2018 10:29:09 +0200 Subject: [PATCH] - IEC 61850 server: functions IedModel_getModelNodeByShortObjectReference and IedModel_getModelNodeByObjectReference now also work with object references that have only LD part --- src/iec61850/server/model/model.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/iec61850/server/model/model.c b/src/iec61850/server/model/model.c index c6d06c6d..79a8db19 100644 --- a/src/iec61850/server/model/model.c +++ b/src/iec61850/server/model/model.c @@ -3,7 +3,7 @@ * * Copyright 2013 Michael Zillgith * - * This file is part of libIEC61850. + * This file is part of libIEC61850. * * libIEC61850 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -302,15 +302,16 @@ IedModel_getModelNodeByObjectReference(IedModel* model, const char* objectRefere char* separator = strchr(objRef, '/'); - if (separator == NULL) - return NULL; - - *separator = 0; + if (separator != NULL) + *separator = 0; LogicalDevice* ld = IedModel_getDevice(model, objRef); if (ld == NULL) return NULL; + if ((separator == NULL) || (*(separator + 1) == 0)) + return (ModelNode*) ld; + return ModelNode_getChild((ModelNode*) ld, separator + 1); } @@ -350,10 +351,8 @@ IedModel_getModelNodeByShortObjectReference(IedModel* model, const char* objectR char* separator = strchr(objRef, '/'); - if (separator == NULL) - return NULL; - - *separator = 0; + if (separator != NULL) + *separator = 0; char ldName[65]; strcpy(ldName, model->name); @@ -363,6 +362,9 @@ IedModel_getModelNodeByShortObjectReference(IedModel* model, const char* objectR if (ld == NULL) return NULL; + if ((separator == NULL) || (*(separator + 1) == 0)) + return (ModelNode*) ld; + return ModelNode_getChild((ModelNode*) ld, separator + 1); }