diff options
author | Volker Lendecke <vl@samba.org> | 2023-01-04 11:43:59 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2023-01-10 00:28:37 +0000 |
commit | 43f041de6567bcb40a8e4564fce66ee08af6cc0b (patch) | |
tree | 53ec60ff28ceffe7895b578aba62a522835d6f8b /lib/util | |
parent | a71288e86bda43caf6feaff22a36942e6595a971 (diff) | |
download | samba-43f041de6567bcb40a8e4564fce66ee08af6cc0b.tar.gz |
lib: Add "starting_id" to idr_get_new_random()
To be used in smbXsrv_open.c, for this we need a lower bound.
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'lib/util')
-rw-r--r-- | lib/util/idtree_random.c | 16 | ||||
-rw-r--r-- | lib/util/idtree_random.h | 5 |
2 files changed, 16 insertions, 5 deletions
diff --git a/lib/util/idtree_random.c b/lib/util/idtree_random.c index 80758e74d6d..d22245a7734 100644 --- a/lib/util/idtree_random.c +++ b/lib/util/idtree_random.c @@ -40,7 +40,10 @@ /** allocate a new id randomly in the given range */ -_PUBLIC_ int idr_get_new_random(struct idr_context *idp, void *ptr, int limit) +_PUBLIC_ int idr_get_new_random(struct idr_context *idp, + void *ptr, + int starting_id, + int limit) { int id; @@ -48,12 +51,17 @@ _PUBLIC_ int idr_get_new_random(struct idr_context *idp, void *ptr, int limit) then start randomly in the bottom half of the range. This can only fail if the range is over half full, and finally fallback to any free id */ - id = idr_get_new_above(idp, ptr, 1+(generate_random() % limit), limit); + id = idr_get_new_above( + idp, ptr, starting_id+(generate_random() % limit), limit); if (id == -1) { - id = idr_get_new_above(idp, ptr, 1+(generate_random()%(limit/2)), limit); + id = idr_get_new_above( + idp, + ptr, + starting_id+(generate_random()%(limit/2)), + limit); } if (id == -1) { - id = idr_get_new_above(idp, ptr, 1, limit); + id = idr_get_new_above(idp, ptr, starting_id, limit); } return id; diff --git a/lib/util/idtree_random.h b/lib/util/idtree_random.h index 4d3b61c33d5..623147c48a7 100644 --- a/lib/util/idtree_random.h +++ b/lib/util/idtree_random.h @@ -33,6 +33,9 @@ /** allocate a new id randomly in the given range */ -int idr_get_new_random(struct idr_context *idp, void *ptr, int limit); +int idr_get_new_random(struct idr_context *idp, + void *ptr, + int starting_id, + int limit); #endif /* _SAMBA_IDTREE_RANDOM_H_ */ |