summaryrefslogtreecommitdiffstats
path: root/src/providers/data_provider_opts.c
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2014-02-24 15:42:51 +0100
committerJakub Hrozek <jhrozek@redhat.com>2014-02-26 15:24:40 +0100
commit90afedb00608547ae1f32aa7aafd552c4b306909 (patch)
treee63503b5de51afe22bb3599189ca2bdf37c963e9 /src/providers/data_provider_opts.c
parentddd21d5dc3c89712d9286d1f66f4b2af73651cf2 (diff)
downloadsssd-90afedb00608547ae1f32aa7aafd552c4b306909.tar.gz
sssd-90afedb00608547ae1f32aa7aafd552c4b306909.tar.xz
sssd-90afedb00608547ae1f32aa7aafd552c4b306909.zip
DP: Provide separate dp_copy_defaults function
https://fedorahosted.org/sssd/ticket/2257 Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/providers/data_provider_opts.c')
-rw-r--r--src/providers/data_provider_opts.c42
1 files changed, 29 insertions, 13 deletions
diff --git a/src/providers/data_provider_opts.c b/src/providers/data_provider_opts.c
index add6dd5b1..8ad84560b 100644
--- a/src/providers/data_provider_opts.c
+++ b/src/providers/data_provider_opts.c
@@ -131,11 +131,11 @@ done:
}
/* =Basic-Option-Helpers================================================== */
-
-int dp_copy_options(TALLOC_CTX *memctx,
- struct dp_option *src_opts,
- int num_opts,
- struct dp_option **_opts)
+static int dp_copy_options_ex(TALLOC_CTX *memctx,
+ bool copy_values,
+ struct dp_option *src_opts,
+ int num_opts,
+ struct dp_option **_opts)
{
struct dp_option *opts;
int i, ret = EOK;
@@ -151,9 +151,9 @@ int dp_copy_options(TALLOC_CTX *memctx,
switch (src_opts[i].type) {
case DP_OPT_STRING:
- if (src_opts[i].val.string) {
+ if (copy_values) {
ret = dp_opt_set_string(opts, i, src_opts[i].val.string);
- } else if (src_opts[i].def_val.string) {
+ } else {
ret = dp_opt_set_string(opts, i, src_opts[i].def_val.string);
}
if (ret != EOK) {
@@ -169,9 +169,9 @@ int dp_copy_options(TALLOC_CTX *memctx,
break;
case DP_OPT_BLOB:
- if (src_opts[i].val.blob.data) {
+ if (copy_values) {
ret = dp_opt_set_blob(opts, i, src_opts[i].val.blob);
- } else if (src_opts[i].def_val.blob.data) {
+ } else {
ret = dp_opt_set_blob(opts, i, src_opts[i].def_val.blob);
}
if (ret != EOK) {
@@ -185,9 +185,9 @@ int dp_copy_options(TALLOC_CTX *memctx,
break;
case DP_OPT_NUMBER:
- if (src_opts[i].val.number) {
+ if (copy_values) {
ret = dp_opt_set_int(opts, i, src_opts[i].val.number);
- } else if (src_opts[i].def_val.number) {
+ } else {
ret = dp_opt_set_int(opts, i, src_opts[i].def_val.number);
}
if (ret != EOK) {
@@ -201,9 +201,9 @@ int dp_copy_options(TALLOC_CTX *memctx,
break;
case DP_OPT_BOOL:
- if (src_opts[i].val.boolean) {
+ if (copy_values) {
ret = dp_opt_set_bool(opts, i, src_opts[i].val.boolean);
- } else if (src_opts[i].def_val.boolean) {
+ } else {
ret = dp_opt_set_bool(opts, i, src_opts[i].def_val.boolean);
}
if (ret != EOK) {
@@ -225,6 +225,22 @@ done:
return ret;
}
+int dp_copy_options(TALLOC_CTX *memctx,
+ struct dp_option *src_opts,
+ int num_opts,
+ struct dp_option **_opts)
+{
+ return dp_copy_options_ex(memctx, true, src_opts, num_opts, _opts);
+}
+
+int dp_copy_defaults(TALLOC_CTX *memctx,
+ struct dp_option *src_opts,
+ int num_opts,
+ struct dp_option **_opts)
+{
+ return dp_copy_options_ex(memctx, false, src_opts, num_opts, _opts);
+}
+
static const char *dp_opt_type_to_string(enum dp_opt_type type)
{
switch (type) {