diff options
Diffstat (limited to 'source3/locking/share_mode_lock.c')
-rw-r--r-- | source3/locking/share_mode_lock.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c index c2f34022ae..da16d1acf0 100644 --- a/source3/locking/share_mode_lock.c +++ b/source3/locking/share_mode_lock.c @@ -522,9 +522,9 @@ int share_mode_forall(int (*fn)(struct file_id fid, } struct share_entry_forall_state { - void (*fn)(const struct share_mode_entry *e, - const char *service_path, const char *base_name, - void *private_data); + int (*fn)(const struct share_mode_entry *e, + const char *service_path, const char *base_name, + void *private_data); void *private_data; }; @@ -536,9 +536,14 @@ static int share_entry_traverse_fn(struct file_id fid, uint32_t i; for (i=0; i<data->num_share_modes; i++) { - state->fn(&data->share_modes[i], - data->servicepath, data->base_name, - state->private_data); + int ret; + + ret = state->fn(&data->share_modes[i], + data->servicepath, data->base_name, + state->private_data); + if (ret != 0) { + return ret; + } } return 0; @@ -549,9 +554,9 @@ static int share_entry_traverse_fn(struct file_id fid, share mode system. ********************************************************************/ -int share_entry_forall(void (*fn)(const struct share_mode_entry *, - const char *, const char *, void *), - void *private_data) +int share_entry_forall(int (*fn)(const struct share_mode_entry *, + const char *, const char *, void *), + void *private_data) { struct share_entry_forall_state state = { .fn = fn, .private_data = private_data }; |