aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2023-07-06 13:40:15 +0200
committerosmith <osmith@sysmocom.de>2023-07-10 07:03:29 +0000
commitfa006b8a368f6ae406c11bfdb560fffd67110510 (patch)
tree49228f62635aefee9344dae43ba355e9ad96c022
parentf543548505202aa2d676dd3b4246e07b97f2afc3 (diff)
csd_bs_list_remove: fix removal logic
-rw-r--r--src/libmsc/csd_bs.c12
-rw-r--r--tests/csd/csd_test.ok6
2 files changed, 9 insertions, 9 deletions
diff --git a/src/libmsc/csd_bs.c b/src/libmsc/csd_bs.c
index 2322f2094..967bd6dce 100644
--- a/src/libmsc/csd_bs.c
+++ b/src/libmsc/csd_bs.c
@@ -340,14 +340,14 @@ void csd_bs_list_remove(struct csd_bs_list *list, enum csd_bs bs)
bool found = false;
for (i = 0; i < list->count; i++) {
- if (list->bs[i] == bs) {
+ if (list->bs[i] == bs)
found = true;
- list->count--;
- continue;
- }
- if (i && found)
- list->bs[i-1] = list->bs[i];
+ if (found && i + 1 < list->count)
+ list->bs[i] = list->bs[i + 1];
}
+
+ if (found)
+ list->count--;
}
void csd_bs_list_intersection(struct csd_bs_list *dest, const struct csd_bs_list *other)
diff --git a/tests/csd/csd_test.ok b/tests/csd/csd_test.ok
index 8ba59b3db..0beac462a 100644
--- a/tests/csd/csd_test.ok
+++ b/tests/csd/csd_test.ok
@@ -4,8 +4,8 @@ initial:
removing BS25T (not in the list):
BS21T,BS22T,BS24T
removing BS22T:
- BS21T,BS22T
+ BS21T,BS24T
removing BS24T:
- BS21T,BS22T
-removing BS21T:
BS21T
+removing BS21T:
+ (no-bearer-services)