- code format update and additional NULL pointer checks in ied_connection.c

v1.6
Michael Zillgith 4 weeks ago
parent 1ff6224d1e
commit 9b467fa60d

@ -324,7 +324,10 @@ ICLogicalDevice_create(char* name)
{
ICLogicalDevice* self = (ICLogicalDevice*) GLOBAL_CALLOC(1, sizeof(struct sICLogicalDevice));
self->name = StringUtils_copyString(name);
if (self)
{
self->name = StringUtils_copyString(name);
}
return self;
}
@ -338,12 +341,15 @@ ICLogicalDevice_setVariableList(ICLogicalDevice* self, LinkedList variables)
static void
ICLogicalDevice_destroy(ICLogicalDevice* self)
{
GLOBAL_FREEMEM(self->name);
if (self)
{
GLOBAL_FREEMEM(self->name);
if (self->variables != NULL)
LinkedList_destroy(self->variables);
if (self->variables)
LinkedList_destroy(self->variables);
GLOBAL_FREEMEM(self);
GLOBAL_FREEMEM(self);
}
}
static ClientDataSet
@ -351,10 +357,15 @@ ClientDataSet_create(const char* dataSetReference)
{
ClientDataSet self = (ClientDataSet) GLOBAL_CALLOC(1, sizeof(struct sClientDataSet));
self->dataSetReference = StringUtils_copyString(dataSetReference);
StringUtils_replace(self->dataSetReference, '.', '$');
if (self)
{
self->dataSetReference = StringUtils_copyString(dataSetReference);
if (self->dataSetReference)
StringUtils_replace(self->dataSetReference, '.', '$');
self->dataSetValues = NULL;
self->dataSetValues = NULL;
}
return self;
}
@ -362,12 +373,15 @@ ClientDataSet_create(const char* dataSetReference)
void
ClientDataSet_destroy(ClientDataSet self)
{
if (self->dataSetValues != NULL)
MmsValue_delete(self->dataSetValues);
if (self)
{
if (self->dataSetValues)
MmsValue_delete(self->dataSetValues);
GLOBAL_FREEMEM(self->dataSetReference);
GLOBAL_FREEMEM(self->dataSetReference);
GLOBAL_FREEMEM(self);
GLOBAL_FREEMEM(self);
}
}
static void
@ -391,11 +405,14 @@ ClientDataSet_getReference(ClientDataSet self)
int
ClientDataSet_getDataSetSize(ClientDataSet self)
{
if (self->dataSetValues != NULL) {
if (self->dataSetValues)
{
return MmsValue_getArraySize(self->dataSetValues);
}
else
{
return 0;
}
}
bool
@ -403,7 +420,8 @@ iedConnection_doesControlObjectMatch(const char* objRef, const char* cntrlObj)
{
int i = 0;
while (objRef[i] != '/') {
while (objRef[i] != '/')
{
if (objRef[i] != cntrlObj[i])
return false;
@ -417,7 +435,8 @@ iedConnection_doesControlObjectMatch(const char* objRef, const char* cntrlObj)
i++;
while (objRef[i] != '.') {
while (objRef[i] != '.')
{
if (objRef[i] != cntrlObj[i])
return false;
i++;
@ -441,15 +460,18 @@ iedConnection_doesControlObjectMatch(const char* objRef, const char* cntrlObj)
i++;
while (objRef[i] != 0) {
while (objRef[i] != 0)
{
if (cntrlObj[j] == 0)
return false;
if (objRef[i] == '.') {
if (objRef[i] == '.')
{
if (cntrlObj[j] != '$')
return false;
}
else {
else
{
if (objRef[i] != cntrlObj[j])
return false;
}
@ -469,7 +491,8 @@ doesReportMatchControlObject(const char* domainName, const char* itemName, const
{
int i = 0;
while (domainName[i] != 0) {
while (domainName[i] != 0)
{
if (domainName[i] != objectRef[i])
return false;
@ -484,7 +507,8 @@ doesReportMatchControlObject(const char* domainName, const char* itemName, const
i++;
int j = 0;
while (objectRef[i] != '.') {
while (objectRef[i] != '.')
{
if (objectRef[i] != itemName[j])
return false;
j++;
@ -507,15 +531,18 @@ doesReportMatchControlObject(const char* domainName, const char* itemName, const
i++;
while (objectRef[i] != 0) {
while (objectRef[i] != 0)
{
if (itemName[j] == 0)
return false;
if (objectRef[i] == '.') {
if (objectRef[i] == '.')
{
if (itemName[j] != '$')
return false;
}
else {
else
{
if (objectRef[i] != itemName[j])
return false;
}
@ -582,12 +609,14 @@ handleLastApplErrorMessage(IedConnection self, MmsValue* lastApplError)
LinkedList control = LinkedList_getNext(self->clientControls);
while (control) {
while (control)
{
ControlObjectClient object = (ControlObjectClient) control->data;
const char* objectRef = ControlObjectClient_getObjectReference(object);
if (iedConnection_doesControlObjectMatch(objectRef, MmsValue_toString(cntrlObj))) {
if (iedConnection_doesControlObjectMatch(objectRef, MmsValue_toString(cntrlObj)))
{
ControlObjectClient_setLastApplError(object, self->lastApplError);
}
@ -598,30 +627,35 @@ handleLastApplErrorMessage(IedConnection self, MmsValue* lastApplError)
}
static void
informationReportHandler(void* parameter, char* domainName,
char* variableListName, MmsValue* value, bool isVariableListName)
informationReportHandler(void* parameter, char* domainName, char* variableListName, MmsValue* value,
bool isVariableListName)
{
IedConnection self = (IedConnection) parameter;
IedConnection self = (IedConnection)parameter;
if (value) {
if (value)
{
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: received information report for %s\n", variableListName);
if (domainName == NULL) {
if (isVariableListName) {
if (domainName == NULL)
{
if (isVariableListName)
{
iedConnection_handleReport(self, value);
}
else {
else
{
if (strcmp(variableListName, "LastApplError") == 0)
handleLastApplErrorMessage(self, value);
else {
else
{
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: Received unknown variable list report for list: %s\n", variableListName);
}
}
}
else {
else
{
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: RCVD CommandTermination for %s/%s\n", domainName, variableListName);
@ -629,15 +663,16 @@ informationReportHandler(void* parameter, char* domainName,
LinkedList control = LinkedList_getNext(self->clientControls);
while (control) {
ControlObjectClient object = (ControlObjectClient) control->data;
while (control)
{
ControlObjectClient object = (ControlObjectClient)control->data;
const char* objectRef = ControlObjectClient_getObjectReference(object);
const char* objectRef = ControlObjectClient_getObjectReference(object);
if (doesReportMatchControlObject(domainName, variableListName, objectRef))
controlObjectClient_invokeCommandTerminationHandler(object);
if (doesReportMatchControlObject(domainName, variableListName, objectRef))
controlObjectClient_invokeCommandTerminationHandler(object);
control = LinkedList_getNext(control);
control = LinkedList_getNext(control);
}
Semaphore_post(self->clientControlsLock);
@ -645,9 +680,10 @@ informationReportHandler(void* parameter, char* domainName,
MmsValue_delete(value);
}
else {
else
{
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: report for %s/%s: value invalid\n", domainName, variableListName);
printf("IED_CLIENT: report for %s/%s: value invalid\n", domainName, variableListName);
}
}
@ -656,7 +692,8 @@ IedConnection_setState(IedConnection self, IedConnectionState newState)
{
Semaphore_wait(self->stateMutex);
if (self->state != newState) {
if (self->state != newState)
{
if (self->connectionStateChangedHandler)
self->connectionStateChangedHandler(self->connectionStateChangedHandlerParameter, self, newState);
}
@ -671,24 +708,28 @@ mmsConnectionStateChangedHandler(MmsConnection connection, void* parameter, MmsC
{
(void)connection;
IedConnection self = (IedConnection) parameter;
IedConnection self = (IedConnection)parameter;
if (newState == MMS_CONNECTION_STATE_CONNECTED) {
if (newState == MMS_CONNECTION_STATE_CONNECTED)
{
IedConnection_setState(self, IED_STATE_CONNECTED);
}
else if (newState == MMS_CONNECTION_STATE_CLOSED) {
else if (newState == MMS_CONNECTION_STATE_CLOSED)
{
IedConnection_setState(self, IED_STATE_CLOSED);
if (self->connectionCloseHandler != NULL)
if (self->connectionCloseHandler)
self->connectionCloseHandler(self->connectionClosedParameter, self);
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: Connection closed!\n");
}
else if (newState == MMS_CONNECTION_STATE_CLOSING) {
else if (newState == MMS_CONNECTION_STATE_CLOSING)
{
IedConnection_setState(self, IED_STATE_CLOSING);
}
else if (newState == MMS_CONNECTION_STATE_CONNECTING) {
else if (newState == MMS_CONNECTION_STATE_CONNECTING)
{
IedConnection_setState(self, IED_STATE_CONNECTING);
}
}
@ -698,7 +739,8 @@ createNewConnectionObject(TLSConfiguration tlsConfig, bool useThreads)
{
IedConnection self = (IedConnection) GLOBAL_CALLOC(1, sizeof(struct sIedConnection));
if (self) {
if (self)
{
self->enabledReports = LinkedList_create();
self->logicalDevices = NULL;
self->clientControlsLock = Semaphore_create(1);
@ -852,17 +894,19 @@ IedConnection_installConnectionClosedHandler(IedConnection self, IedConnectionCl
void
IedConnection_connect(IedConnection self, IedClientError* error, const char* hostname, int tcpPort)
{
if (IedConnection_getState(self) != IED_STATE_CONNECTED) {
if (IedConnection_getState(self) != IED_STATE_CONNECTED)
{
MmsError mmsError;
MmsConnection_setConnectTimeout(self->connection, self->connectionTimeout);
if (MmsConnection_connect(self->connection, &mmsError, hostname, tcpPort)) {
if (MmsConnection_connect(self->connection, &mmsError, hostname, tcpPort))
{
*error = IED_ERROR_OK;
IedConnection_setState(self, IED_STATE_CONNECTED);
}
else {
else
{
IedConnection_setState(self, IED_STATE_CLOSED);
*error = iedConnection_mapMmsErrorToIedError(mmsError);
}
@ -881,8 +925,8 @@ IedConnection_installStateChangedHandler(IedConnection self, IedConnection_State
void
IedConnection_connectAsync(IedConnection self, IedClientError* error, const char* hostname, int tcpPort)
{
if (IedConnection_getState(self) != IED_STATE_CONNECTED) {
if (IedConnection_getState(self) != IED_STATE_CONNECTED)
{
MmsError mmsError = MMS_ERROR_NONE;
MmsConnection_setConnectTimeout(self->connection, self->connectionTimeout);
@ -898,7 +942,8 @@ IedConnection_connectAsync(IedConnection self, IedClientError* error, const char
void
IedConnection_abort(IedConnection self, IedClientError* error)
{
if (IedConnection_getState(self) == IED_STATE_CONNECTED) {
if (IedConnection_getState(self) == IED_STATE_CONNECTED)
{
IedConnection_setState(self, IED_STATE_CLOSING);
MmsError mmsError;
@ -914,8 +959,8 @@ IedConnection_abort(IedConnection self, IedClientError* error)
void
IedConnection_abortAsync(IedConnection self, IedClientError* error)
{
if (IedConnection_getState(self) == IED_STATE_CONNECTED) {
if (IedConnection_getState(self) == IED_STATE_CONNECTED)
{
MmsError mmsError;
MmsConnection_abortAsync(self->connection, &mmsError);
@ -929,7 +974,8 @@ IedConnection_abortAsync(IedConnection self, IedClientError* error)
void
IedConnection_release(IedConnection self, IedClientError* error)
{
if (IedConnection_getState(self) == IED_STATE_CONNECTED) {
if (IedConnection_getState(self) == IED_STATE_CONNECTED)
{
MmsError mmsError;
MmsConnection_conclude(self->connection, &mmsError);
@ -943,7 +989,8 @@ IedConnection_release(IedConnection self, IedClientError* error)
void
IedConnection_releaseAsync(IedConnection self, IedClientError* error)
{
if (IedConnection_getState(self) == IED_STATE_CONNECTED) {
if (IedConnection_getState(self) == IED_STATE_CONNECTED)
{
MmsError mmsError;
MmsConnection_concludeAsync(self->connection, &mmsError, NULL, NULL);
@ -957,7 +1004,8 @@ IedConnection_releaseAsync(IedConnection self, IedClientError* error)
void
IedConnection_close(IedConnection self)
{
if (IedConnection_getState(self) == IED_STATE_CONNECTED) {
if (IedConnection_getState(self) == IED_STATE_CONNECTED)
{
IedConnection_setState(self, IED_STATE_CLOSING);
MmsConnection_close(self->connection);
}
@ -985,28 +1033,31 @@ deleteControlObjectClients(IedConnection self)
void
IedConnection_destroy(IedConnection self)
{
IedConnection_close(self);
if (self)
{
IedConnection_close(self);
MmsConnection_destroy(self->connection);
MmsConnection_destroy(self->connection);
if (self->logicalDevices != NULL)
LinkedList_destroyDeep(self->logicalDevices, (LinkedListValueDeleteFunction) ICLogicalDevice_destroy);
if (self->logicalDevices)
LinkedList_destroyDeep(self->logicalDevices, (LinkedListValueDeleteFunction) ICLogicalDevice_destroy);
if (self->enabledReports != NULL)
LinkedList_destroyDeep(self->enabledReports, (LinkedListValueDeleteFunction) ClientReport_destroy);
if (self->enabledReports)
LinkedList_destroyDeep(self->enabledReports, (LinkedListValueDeleteFunction) ClientReport_destroy);
GLOBAL_FREEMEM(self->outstandingCalls);
GLOBAL_FREEMEM(self->outstandingCalls);
deleteControlObjectClients(self);
deleteControlObjectClients(self);
LinkedList_destroyStatic(self->clientControls);
LinkedList_destroyStatic(self->clientControls);
Semaphore_destroy(self->clientControlsLock);
Semaphore_destroy(self->outstandingCallsLock);
Semaphore_destroy(self->stateMutex);
Semaphore_destroy(self->reportHandlerMutex);
Semaphore_destroy(self->clientControlsLock);
Semaphore_destroy(self->outstandingCallsLock);
Semaphore_destroy(self->stateMutex);
Semaphore_destroy(self->reportHandlerMutex);
GLOBAL_FREEMEM(self);
GLOBAL_FREEMEM(self);
}
}
LinkedList
@ -1049,7 +1100,8 @@ IedConnection_getVariableSpecification(IedConnection self, IedClientError* error
domainId = MmsMapping_getMmsDomainFromObjectReference(objectReference, domainIdBuffer);
itemId = MmsMapping_createMmsVariableNameFromObjectReference(objectReference, fc, itemIdBuffer);
if ((domainId == NULL) || (itemId == NULL)) {
if ((domainId == NULL) || (itemId == NULL))
{
*error = IED_ERROR_OBJECT_REFERENCE_INVALID;
goto cleanup_and_exit;
}
@ -1057,7 +1109,7 @@ IedConnection_getVariableSpecification(IedConnection self, IedClientError* error
varSpec =
MmsConnection_getVariableAccessAttributes(self->connection, &mmsError, domainId, itemId);
if (varSpec != NULL)
if (varSpec)
*error = IED_ERROR_OK;
else
*error = iedConnection_mapMmsErrorToIedError(mmsError);
@ -1074,15 +1126,16 @@ getAccessAttrHandler(uint32_t invokeId, void* parameter, MmsError err, MmsVariab
IedConnectionOutstandingCall call = iedConnection_lookupOutstandingCall(self, invokeId);
if (call) {
if (call)
{
IedConnection_GetVariableSpecificationHandler handler = (IedConnection_GetVariableSpecificationHandler) call->callback;
handler(invokeId, call->callbackParameter, iedConnection_mapMmsErrorToIedError(err), typeSpec);
iedConnection_releaseOutstandingCall(self, call);
}
else {
else
{
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: internal error - no matching outstanding call!\n");
}
@ -1105,14 +1158,16 @@ IedConnection_getVariableSpecificationAsync(IedConnection self, IedClientError*
domainId = MmsMapping_getMmsDomainFromObjectReference(dataAttributeReference, domainIdBuffer);
itemId = MmsMapping_createMmsVariableNameFromObjectReference(dataAttributeReference, fc, itemIdBuffer);
if ((domainId == NULL) || (itemId == NULL)) {
if ((domainId == NULL) || (itemId == NULL))
{
*error = IED_ERROR_OBJECT_REFERENCE_INVALID;
return 0;
}
IedConnectionOutstandingCall call = iedConnection_allocateOutstandingCall(self);
if (call == NULL) {
if (call == NULL)
{
*error = IED_ERROR_OUTSTANDING_CALL_LIMIT_REACHED;
return 0;
}
@ -1135,31 +1190,34 @@ IedConnection_getVariableSpecificationAsync(IedConnection self, IedClientError*
static void
getNameListHandler(uint32_t invokeId, void* parameter, MmsError mmsError, LinkedList nameList, bool moreFollows)
{
IedConnection self = (IedConnection) parameter;
IedConnection self = (IedConnection)parameter;
IedConnectionOutstandingCall call = iedConnection_lookupOutstandingCall(self, invokeId);
if (call) {
IedConnection_GetNameListHandler handler = (IedConnection_GetNameListHandler) call->callback;
if (call)
{
IedConnection_GetNameListHandler handler = (IedConnection_GetNameListHandler)call->callback;
handler(invokeId, call->callbackParameter, iedConnection_mapMmsErrorToIedError(mmsError), nameList, moreFollows);
handler(invokeId, call->callbackParameter, iedConnection_mapMmsErrorToIedError(mmsError), nameList,
moreFollows);
iedConnection_releaseOutstandingCall(self, call);
}
else {
else
{
if (DEBUG_IED_CLIENT)
printf("IED_CLIENT: internal error - no matching outstanding call!\n");
}
}
uint32_t
IedConnection_getServerDirectoryAsync(IedConnection self, IedClientError* error, const char* continueAfter, LinkedList result,
IedConnection_GetNameListHandler handler, void* parameter)
IedConnection_getServerDirectoryAsync(IedConnection self, IedClientError* error, const char* continueAfter,
LinkedList result, IedConnection_GetNameListHandler handler, void* parameter)
{
IedConnectionOutstandingCall call = iedConnection_allocateOutstandingCall(self);
if (call == NULL) {
if (call == NULL)
{
*error = IED_ERROR_OUTSTANDING_CALL_LIMIT_REACHED;
return 0;
}
@ -1169,7 +1227,8 @@ IedConnection_getServerDirectoryAsync(IedConnection self, IedClientError* error,
MmsError err = MMS_ERROR_NONE;
MmsConnection_getDomainNamesAsync(self->connection, &(call->invokeId), &err, continueAfter, result, getNameListHandler, self);
MmsConnection_getDomainNamesAsync(self->connection, &(call->invokeId), &err, continueAfter, result,
getNameListHandler, self);
if (err != MMS_ERROR_NONE)
{
@ -1179,7 +1238,8 @@ IedConnection_getServerDirectoryAsync(IedConnection self, IedClientError* error,
return 0;
}
else {
else
{
*error = IED_ERROR_OK;
}
@ -1187,12 +1247,14 @@ IedConnection_getServerDirectoryAsync(IedConnection self, IedClientError* error,
}
uint32_t
IedConnection_getLogicalDeviceVariablesAsync(IedConnection self, IedClientError* error, const char* ldName, const char* continueAfter, LinkedList result,
IedConnection_GetNameListHandler handler, void* parameter)
IedConnection_getLogicalDeviceVariablesAsync(IedConnection self, IedClientError* error, const char* ldName,
const char* continueAfter, LinkedList result,
IedConnection_GetNameListHandler handler, void* parameter)
{
IedConnectionOutstandingCall call = iedConnection_allocateOutstandingCall(self);
if (call == NULL) {
if (call == NULL)
{
*error = IED_ERROR_OUTSTANDING_CALL_LIMIT_REACHED;
return 0;
}
@ -1202,7 +1264,8 @@ IedConnection_getLogicalDeviceVariablesAsync(IedConnection self, IedClientError*
MmsError err = MMS_ERROR_NONE;
MmsConnection_getDomainVariableNamesAsync(self->connection, &(call->invokeId), &err, ldName, continueAfter, result, getNameListHandler, self);
MmsConnection_getDomainVariableNamesAsync(self->connection, &(call->invokeId), &err, ldName, continueAfter, result,
getNameListHandler, self);
if (err != MMS_ERROR_NONE)
{
@ -1212,7 +1275,8 @@ IedConnection_getLogicalDeviceVariablesAsync(IedConnection self, IedClientError*
return 0;
}
else {
else
{
*error = IED_ERROR_OK;
}
@ -1225,7 +1289,8 @@ IedConnection_getLogicalDeviceDataSetsAsync(IedConnection self, IedClientError*
{
IedConnectionOutstandingCall call = iedConnection_allocateOutstandingCall(self);
if (call == NULL) {
if (call == NULL)
{
*error = IED_ERROR_OUTSTANDING_CALL_LIMIT_REACHED;
return 0;
}
@ -1343,7 +1408,8 @@ IedConnection_readObjectAsync(IedConnection self, IedClientError* error, const c
if ((err != MMS_ERROR_NONE) || (*error != IED_ERROR_OK))
{
if (err != MMS_ERROR_NONE) {
if (err != MMS_ERROR_NONE)
{
*error = iedConnection_mapMmsErrorToIedError(err);
}
@ -1410,7 +1476,7 @@ IedConnection_readObject(IedConnection self, IedClientError* error, const char*
else
value = MmsConnection_readVariable(self->connection, &mmsError, domainId, itemId);
if (value != NULL)
if (value)
*error = IED_ERROR_OK;
else
*error = iedConnection_mapMmsErrorToIedError(mmsError);
@ -1425,7 +1491,7 @@ IedConnection_readBooleanValue(IedConnection self, IedClientError* error, const
bool retVal = false;
if (value != NULL)
if (value)
{
if (MmsValue_getType(value) == MMS_BOOLEAN)
retVal = MmsValue_getBoolean(value);
@ -1450,7 +1516,7 @@ IedConnection_readFloatValue(IedConnection self, IedClientError* error, const ch
float retVal = 0.f;
if (value != NULL)
if (value)
{
if (MmsValue_getType(value) == MMS_FLOAT)
retVal = MmsValue_toFloat(value);
@ -1475,7 +1541,7 @@ IedConnection_readStringValue(IedConnection self, IedClientError* error, const c
char* retVal = NULL;
if (value != NULL)
if (value)
{
if ((MmsValue_getType(value) == MMS_VISIBLE_STRING) || (MmsValue_getType(value) == MMS_STRING))
retVal = StringUtils_copyString(MmsValue_toString(value));
@ -1500,7 +1566,7 @@ IedConnection_readInt32Value(IedConnection self, IedClientError* error, const ch
int32_t retVal = 0;
if (value != NULL)
if (value)
{
if ((MmsValue_getType(value) == MMS_INTEGER) || (MmsValue_getType(value) == MMS_UNSIGNED))
retVal = MmsValue_toInt32(value);
@ -1525,7 +1591,7 @@ IedConnection_readUnsigned32Value(IedConnection self, IedClientError* error, con
uint32_t retVal = 0;
if (value != NULL)
if (value)
{
if ((MmsValue_getType(value) == MMS_INTEGER) || (MmsValue_getType(value) == MMS_UNSIGNED))
retVal = MmsValue_toUint32(value);
@ -1550,7 +1616,7 @@ IedConnection_readInt64Value(IedConnection self, IedClientError* error, const ch
int64_t retVal = 0;
if (value != NULL)
if (value)
{
if ((MmsValue_getType(value) == MMS_INTEGER) || (MmsValue_getType(value) == MMS_UNSIGNED))
retVal = MmsValue_toInt64(value);
@ -1576,14 +1642,15 @@ IedConnection_readTimestampValue(IedConnection self, IedClientError* error, cons
Timestamp* retVal = timeStamp;
if (value != NULL)
if (value)
{
if (MmsValue_getType(value) == MMS_UTC_TIME)
{
if (retVal == NULL)
retVal = (Timestamp*) GLOBAL_MALLOC(sizeof(Timestamp));
memcpy(retVal->val, value->value.utcTime, 8);
if (retVal)
memcpy(retVal->val, value->value.utcTime, 8);
}
else
{
@ -1607,7 +1674,7 @@ IedConnection_readQualityValue(IedConnection self, IedClientError* error, const
Quality quality = QUALITY_VALIDITY_GOOD;
if (value != NULL)
if (value)
{
if ((MmsValue_getType(value) == MMS_BIT_STRING) && (MmsValue_getBitStringSize(value) == 13)) {
quality = Quality_fromMmsValue(value);
@ -1621,7 +1688,6 @@ IedConnection_readQualityValue(IedConnection self, IedClientError* error, const
}
MmsValue_delete(value);
}
return quality;
@ -1757,7 +1823,8 @@ IedConnection_writeObjectAsync(IedConnection self, IedClientError* error, const
{
char* secondBrace = strchr(brace, ')');
if (secondBrace) {
if (secondBrace)
{
char* endPtr;
int index = (int) strtol(brace + 1, &endPtr, 10);
@ -2066,7 +2133,7 @@ IedConnection_getFileDirectoryEx(IedConnection self, IedClientError* error, cons
return NULL;
}
if (moreFollows != NULL)
if (moreFollows)
*moreFollows = moreFollowsInternal;
return fileNames;
@ -2488,7 +2555,8 @@ IedConnection_deleteFileAsync(IedConnection self, IedClientError* error, const c
IedConnectionOutstandingCall call = iedConnection_allocateOutstandingCall(self);
if (call == NULL) {
if (call == NULL)
{
*error = IED_ERROR_OUTSTANDING_CALL_LIMIT_REACHED;
return 0;
}
@ -2569,7 +2637,7 @@ addToStringSet(LinkedList set, char* string)
{
LinkedList element = set;
while (LinkedList_getNext(element) != NULL)
while (LinkedList_getNext(element))
{
if (strcmp((char*) LinkedList_getNext(element)->data, string) == 0)
return false;
@ -2592,7 +2660,7 @@ addVariablesWithFc(char* fc, char* lnName, LinkedList variables, LinkedList lnDi
char* fcPos = strchr(variableName, '$');
if (fcPos != NULL)
if (fcPos)
{
if (memcmp(fcPos + 1, fc, 2) != 0)
goto next_element;
@ -2603,7 +2671,7 @@ addVariablesWithFc(char* fc, char* lnName, LinkedList variables, LinkedList lnDi
{
char* fcEndPos = strchr(fcPos + 1, '$');
if (fcEndPos != NULL)
if (fcEndPos)
{
char* nameEndPos = strchr(fcEndPos + 1, '$');
@ -3082,7 +3150,7 @@ getDataDirectory(IedConnection self, IedClientError* error,
char* subElementNameSep = strchr(subElementName, '$');
if (subElementNameSep != NULL)
if (subElementNameSep)
goto next_variable;
char* elementName;
@ -3092,12 +3160,16 @@ getDataDirectory(IedConnection self, IedClientError* error,
int elementNameLen = (int)strlen(subElementName);
elementName = (char*) GLOBAL_MALLOC(elementNameLen + 5);
memcpy(elementName, subElementName, elementNameLen);
elementName[elementNameLen] = '[';
elementName[elementNameLen + 1] = *(fcPos + 1);
elementName[elementNameLen + 2] = *(fcPos + 2);
elementName[elementNameLen + 3] = ']';
elementName[elementNameLen + 4] = 0;
if (elementName)
{
memcpy(elementName, subElementName, elementNameLen);
elementName[elementNameLen] = '[';
elementName[elementNameLen + 1] = *(fcPos + 1);
elementName[elementNameLen + 2] = *(fcPos + 2);
elementName[elementNameLen + 3] = ']';
elementName[elementNameLen + 4] = 0;
}
}
else
elementName = StringUtils_copyString(subElementName);
@ -3260,17 +3332,21 @@ getDataDirectoryByFc(IedConnection self, IedClientError* error,
char* subElementNameSep = strchr(subElementName, '$');
if (subElementNameSep != NULL)
if (subElementNameSep)
goto next_variable;
int elementNameLen = (int)strlen(subElementName);
char* elementName = (char*) GLOBAL_MALLOC(elementNameLen + 1);
memcpy(elementName, subElementName, elementNameLen);
elementName[elementNameLen] = 0;
if (!addToStringSet(dataDirectory, elementName))
GLOBAL_FREEMEM(elementName);
if (elementName)
{
memcpy(elementName, subElementName, elementNameLen);
elementName[elementNameLen] = 0;
if (!addToStringSet(dataDirectory, elementName))
GLOBAL_FREEMEM(elementName);
}
}
}
}
@ -3806,7 +3882,7 @@ IedConnection_getDataSetDirectory(IedConnection self, IedClientError* error, con
entry = LinkedList_getNext(entry);
}
if (isDeletable != NULL)
if (isDeletable)
*isDeletable = deletable;
LinkedList_destroyDeep(entries, (LinkedListValueDeleteFunction) MmsVariableAccessSpecification_destroy);
@ -4419,7 +4495,7 @@ IedConnection_queryLogByTimeAsync(IedConnection self, IedClientError* error, con
char* logDomain = logRef;
char* logName = strchr(logRef, '/');
if (logName != NULL)
if (logName)
{
logName[0] = 0;
logName++;
@ -4598,9 +4674,12 @@ FileDirectoryEntry_create(const char* fileName, uint32_t fileSize, uint64_t last
{
FileDirectoryEntry self = (FileDirectoryEntry) GLOBAL_CALLOC(1, sizeof(struct sFileDirectoryEntry));
self->fileName = StringUtils_copyString(fileName);
self->fileSize = fileSize;
self->lastModified = lastModified;
if (self)
{
self->fileName = StringUtils_copyString(fileName);
self->fileSize = fileSize;
self->lastModified = lastModified;
}
return self;
}
@ -4608,8 +4687,11 @@ FileDirectoryEntry_create(const char* fileName, uint32_t fileSize, uint64_t last
void
FileDirectoryEntry_destroy(FileDirectoryEntry self)
{
GLOBAL_FREEMEM(self->fileName);
GLOBAL_FREEMEM(self);
if (self)
{
GLOBAL_FREEMEM(self->fileName);
GLOBAL_FREEMEM(self);
}
}
const char*

Loading…
Cancel
Save