summaryrefslogtreecommitdiff
path: root/source3/lib/smbconf/smbconf_reg.c
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-04-22 16:31:16 +0200
committerMichael Adam <obnox@samba.org>2008-04-23 01:43:31 +0200
commitfb9232c0a98d9ce600e379dd03ee6fa3cd73cba5 (patch)
tree611aebbcadfb490cb37bcb70fd22f942be888ea7 /source3/lib/smbconf/smbconf_reg.c
parent5dd54c58b4d65b28751fda3ba2acbfe71ea7a75f (diff)
downloadsamba-fb9232c0a98d9ce600e379dd03ee6fa3cd73cba5.tar.gz
samba-fb9232c0a98d9ce600e379dd03ee6fa3cd73cba5.tar.bz2
samba-fb9232c0a98d9ce600e379dd03ee6fa3cd73cba5.zip
libsmbconf: rewrite API to use smbconf_service struct
instead of lists of strings and counters directly... Michael (This used to be commit 17415e2dc457ce41793a7e28e71f72c538c19c61)
Diffstat (limited to 'source3/lib/smbconf/smbconf_reg.c')
-rw-r--r--source3/lib/smbconf/smbconf_reg.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index 930999cc3f..5f5724c406 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -875,23 +875,44 @@ static WERROR smbconf_reg_create_share(struct smbconf_ctx *ctx,
static WERROR smbconf_reg_get_share(struct smbconf_ctx *ctx,
TALLOC_CTX *mem_ctx,
const char *servicename,
- uint32_t *num_params,
- char ***param_names, char ***param_values)
+ struct smbconf_service **service)
{
WERROR werr = WERR_OK;
struct registry_key *key = NULL;
+ struct smbconf_service *tmp_service = NULL;
+ TALLOC_CTX *tmp_ctx = talloc_stackframe();
- werr = smbconf_reg_open_service_key(mem_ctx, ctx, servicename,
+ werr = smbconf_reg_open_service_key(tmp_ctx, ctx, servicename,
REG_KEY_READ, &key);
if (!W_ERROR_IS_OK(werr)) {
goto done;
}
- werr = smbconf_reg_get_values(mem_ctx, key, num_params,
- param_names, param_values);
+ tmp_service = TALLOC_ZERO_P(tmp_ctx, struct smbconf_service);
+ if (tmp_service == NULL) {
+ werr = WERR_NOMEM;
+ goto done;
+ }
+
+ if (servicename != NULL) {
+ tmp_service->name = talloc_strdup(tmp_service, servicename);
+ if (tmp_service->name == NULL) {
+ werr = WERR_NOMEM;
+ goto done;
+ }
+ }
+
+ werr = smbconf_reg_get_values(tmp_service, key,
+ &(tmp_service->num_params),
+ &(tmp_service->param_names),
+ &(tmp_service->param_values));
+
+ if (W_ERROR_IS_OK(werr)) {
+ *service = talloc_move(mem_ctx, &tmp_service);
+ }
done:
- TALLOC_FREE(key);
+ TALLOC_FREE(tmp_ctx);
return werr;
}