From 7621b4c3d80f411aac6e40ea5cce787cec108af5 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Tue, 18 Mar 2008 23:29:11 +0100 Subject: libsmbconf: change smbconf_get_seqnum() to smbconf_changed(). The former seqnum is hidden inside a struct smbconf_csn. And the get_seqnum is united with a changed function that stores the seqnum inside the given csn. Michael (This used to be commit 5b6b90900a1a3eab24cb5612d78f9678a363cf73) --- source3/lib/smbconf/smbconf.c | 38 ++++++++++++++++++++++++++++++-------- source3/lib/smbconf/smbconf.h | 9 +++++++-- 2 files changed, 37 insertions(+), 10 deletions(-) (limited to 'source3/lib/smbconf') diff --git a/source3/lib/smbconf/smbconf.c b/source3/lib/smbconf/smbconf.c index dc45a16c48..454056167e 100644 --- a/source3/lib/smbconf/smbconf.c +++ b/source3/lib/smbconf/smbconf.c @@ -417,6 +417,20 @@ static int smbconf_destroy_ctx(struct smbconf_ctx *ctx) return regdb_close(); } +/** + * Get the change sequence number of the given service/parameter. + * service and parameter strings may be NULL. + */ +static void smbconf_reg_get_csn(struct smbconf_ctx *ctx, + struct smbconf_csn *csn, + const char *service, const char *param) +{ + if (csn == NULL) { + return; + } + csn->csn = (uint64_t)regdb_get_seqnum(); +} + /********************************************************************** * * The actual net conf api functions, that are exported. @@ -475,16 +489,24 @@ void smbconf_close(struct smbconf_ctx *ctx) } /** - * Get the change sequence number of the given service/parameter. - * - * NOTE: Currently, for registry configuration, this is independent - * of the service and parameter, it returns the registry-sequence - * number. + * Detect changes in the configuration. + * The given csn struct is filled with the current csn. + * smbconf_changed() can also be used for initial retrieval + * of the csn. */ -uint64_t smbconf_get_seqnum(struct smbconf_ctx *ctx, - const char *service, const char *param) +bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn, + const char *service, const char *param) { - return (uint64_t)regdb_get_seqnum(); + struct smbconf_csn old_csn; + + if (csn == NULL) { + return false; + } + + old_csn = *csn; + + smbconf_reg_get_csn(ctx, csn, service, param); + return (csn->csn != old_csn.csn); } /** diff --git a/source3/lib/smbconf/smbconf.h b/source3/lib/smbconf/smbconf.h index d2e05045f7..134dc29c09 100644 --- a/source3/lib/smbconf/smbconf.h +++ b/source3/lib/smbconf/smbconf.h @@ -24,6 +24,11 @@ struct smbconf_ctx { NT_USER_TOKEN *token; }; +/* the change sequence number */ +struct smbconf_csn { + uint64_t csn; +}; + /* * WARNING: * Of this API, at least the open function is still subject to change. @@ -32,8 +37,8 @@ struct smbconf_ctx { WERROR smbconf_open(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx); void smbconf_close(struct smbconf_ctx *ctx); -uint64_t smbconf_get_seqnum(struct smbconf_ctx *ctx, - const char *service, const char *param); +bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn, + const char *service, const char *param); WERROR smbconf_drop(struct smbconf_ctx *ctx); WERROR smbconf_get_config(TALLOC_CTX *mem_ctx, struct smbconf_ctx *ctx, uint32_t *num_shares, -- cgit