diff options
author | Oliver Smith <osmith@sysmocom.de> | 2023-07-06 13:40:15 +0200 |
---|---|---|
committer | osmith <osmith@sysmocom.de> | 2023-07-10 07:03:29 +0000 |
commit | fa006b8a368f6ae406c11bfdb560fffd67110510 (patch) | |
tree | 49228f62635aefee9344dae43ba355e9ad96c022 | |
parent | f543548505202aa2d676dd3b4246e07b97f2afc3 (diff) |
csd_bs_list_remove: fix removal logic
Related: OS#4394
Change-Id: I638d4e063fee6bad45ab14d8ad6b9ad847a7127a
-rw-r--r-- | src/libmsc/csd_bs.c | 12 | ||||
-rw-r--r-- | tests/csd/csd_test.ok | 6 |
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) |