From 285237b358d536a09ca1cf1529729b50ded140d1 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 0b5f84b7..128b2d18 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 @@ -301,15 +301,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); } @@ -349,10 +350,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); @@ -362,6 +361,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); }