From 6baf3d19cfb593359d951c4353a48910802f73a2 Mon Sep 17 00:00:00 2001
From: Jonathan Aillet <jonathan.aillet@iot.bzh>
Date: Fri, 11 Oct 2019 15:21:50 +0200
Subject: Add a function to delete all hal api

BUG-AGL: SPEC-2893

Change-Id: I577565ac2134f87151491644c74c057e3634ed52
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
---
 src/4a-internals-hal/4a-internals-hal-api-loader.c | 39 ++++++++++++++++++++++
 src/4a-internals-hal/4a-internals-hal-api-loader.h |  1 +
 2 files changed, 40 insertions(+)

diff --git a/src/4a-internals-hal/4a-internals-hal-api-loader.c b/src/4a-internals-hal/4a-internals-hal-api-loader.c
index a8b62c6..b41c7b2 100644
--- a/src/4a-internals-hal/4a-internals-hal-api-loader.c
+++ b/src/4a-internals-hal/4a-internals-hal-api-loader.c
@@ -290,5 +290,44 @@ int InternalHalCreateAllApi(afb_api_t apiHandle, struct HalMgrData *halMgrData)
 			return -3;
 	}
 
+	return 0;
+}
+
+int InternalHalDeleteAllApi(afb_api_t apiHandle, struct HalMgrData *halMgrData)
+{
+	int err;
+
+	char *toDeleteApiName;
+
+	struct HalData *currentHalData;
+
+	if(! apiHandle || ! halMgrData) {
+		AFB_API_ERROR(apiHandle, "Invalid argument(s)");
+		return -1;
+	}
+
+	cds_list_for_each_entry(currentHalData, &halMgrData->halDataListHead, node) {
+		if(! currentHalData->apiName)
+			return -2;
+
+		toDeleteApiName = strdup(currentHalData->apiName);
+		if(! toDeleteApiName) {
+			AFB_API_ERROR(apiHandle, "Didn't succeed to store (allocate) 'apiName' string");
+			return -3;
+		}
+
+		err = InternalHalDeleteApi(apiHandle, &halMgrData->halDataListHead, currentHalData);
+		if(err) {
+			AFB_API_ERROR(apiHandle,
+				      "Error %i happened when tried to delete %s api",
+				      err,
+				      toDeleteApiName);
+			free(toDeleteApiName);
+			return -4;
+		}
+
+		free(toDeleteApiName);
+	}
+
 	return 0;
 }
\ No newline at end of file
diff --git a/src/4a-internals-hal/4a-internals-hal-api-loader.h b/src/4a-internals-hal/4a-internals-hal-api-loader.h
index 1628e8a..2a47555 100644
--- a/src/4a-internals-hal/4a-internals-hal-api-loader.h
+++ b/src/4a-internals-hal/4a-internals-hal-api-loader.h
@@ -28,5 +28,6 @@
 int InternalHalCreateApi(afb_api_t apiHandle, char *path, struct HalMgrData *halMgrData);
 int InternalHalDeleteApi(afb_api_t apiHandle, struct cds_list_head *halDataListHead, struct HalData *toDeleteHalData);
 int InternalHalCreateAllApi(afb_api_t apiHandle, struct HalMgrData *halMgrData);
+int InternalHalDeleteAllApi(afb_api_t apiHandle, struct HalMgrData *halMgrData);
 
 #endif /* _INTERNALS_HAL_API_LOADER_INCLUDE_ */
\ No newline at end of file
-- 
cgit