diff options
author | Volker Lendecke <vlendec@samba.org> | 2006-07-21 14:13:30 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:38:17 -0500 |
commit | f97f6cedffdc4d10afcac90a163b93a801acf514 (patch) | |
tree | 1aa2b6f77745c6263481c47a1666acbdd508e694 /source/locking/locking.c | |
parent | 421cb6f728be7821b537d00cdd05d05f1490eb3f (diff) | |
download | samba-f97f6cedffdc4d10afcac90a163b93a801acf514.tar.gz samba-f97f6cedffdc4d10afcac90a163b93a801acf514.tar.xz samba-f97f6cedffdc4d10afcac90a163b93a801acf514.zip |
r17177: Get rid of a global variable by adding a private data pointer to
share_mode_forall().
Volker
Diffstat (limited to 'source/locking/locking.c')
-rw-r--r-- | source/locking/locking.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/source/locking/locking.c b/source/locking/locking.c index a7cadd3a400..3cbf318007a 100644 --- a/source/locking/locking.c +++ b/source/locking/locking.c @@ -1249,15 +1249,23 @@ BOOL set_delete_on_close(files_struct *fsp, BOOL delete_on_close, UNIX_USER_TOKE return True; } +struct forall_state { + void (*fn)(const struct share_mode_entry *entry, + const char *sharepath, + const char *fname, + void *private_data); + void *private_data; +}; + static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, - void *state) + void *_state) { + struct forall_state *state = (struct forall_state *)_state; struct locking_data *data; struct share_mode_entry *shares; const char *sharepath; const char *fname; int i; - LOCKING_FN(traverse_callback) = (LOCKING_FN_CAST())state; /* Ensure this is a locking_key record. */ if (kbuf.dsize != sizeof(struct locking_key)) @@ -1274,7 +1282,8 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, strlen(sharepath) + 1; for (i=0;i<data->u.s.num_share_mode_entries;i++) { - traverse_callback(&shares[i], sharepath, fname); + state->fn(&shares[i], sharepath, fname, + state->private_data); } return 0; } @@ -1284,9 +1293,17 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, share mode system. ********************************************************************/ -int share_mode_forall(void (*fn)(const struct share_mode_entry *, const char *, const char *)) +int share_mode_forall(void (*fn)(const struct share_mode_entry *, const char *, + const char *, void *), + void *private_data) { + struct forall_state state; + if (tdb == NULL) return 0; - return tdb_traverse(tdb, traverse_fn, (void *)fn); + + state.fn = fn; + state.private_data = private_data; + + return tdb_traverse(tdb, traverse_fn, (void *)&state); } |