summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2023-01-04 11:43:59 +0100
committerJeremy Allison <jra@samba.org>2023-01-10 00:28:37 +0000
commit43f041de6567bcb40a8e4564fce66ee08af6cc0b (patch)
tree53ec60ff28ceffe7895b578aba62a522835d6f8b /lib/util
parenta71288e86bda43caf6feaff22a36942e6595a971 (diff)
downloadsamba-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.c16
-rw-r--r--lib/util/idtree_random.h5
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_ */