return true;
}
-bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
+static bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
const char *pszParmName, const char *pszParmValue)
{
int i;
}
-static bool set_variable(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
+bool set_variable(TALLOC_CTX *mem_ctx, int snum, int parmnum, void *parm_ptr,
const char *pszParmName, const char *pszParmValue,
struct loadparm_context *lp_ctx, bool on_globals)
{
/* if it is a special case then go ahead */
if (parm_table[parmnum].special) {
- ok = parm_table[parmnum].special(lp_ctx, -1, pszParmValue,
+ ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue,
(char **)parm_ptr);
if (!ok) {
return false;
parm_ptr = lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[parmnum]);
- return set_variable(lp_ctx->globals->ctx, parmnum, parm_ptr,
+ return set_variable(lp_ctx->globals->ctx, -1, parmnum, parm_ptr,
pszParmName, pszParmValue, lp_ctx, true);
}
parm_table[i].p_class == parm_table[parmnum].p_class)
bitmap_clear(service->copymap, i);
- return set_variable(service, parmnum, parm_ptr, pszParmName,
+ return set_variable(service, -1, parmnum, parm_ptr, pszParmName,
pszParmValue, lp_ctx, false);
}
TALLOC_CTX *mem_ctx;
TALLOC_CTX *frame = talloc_stackframe();
bool ok;
+ struct loadparm_context *lp_ctx;
parmnum = lpcfg_map_parameter(pszParmName);
mem_ctx = ServicePtrs[snum];
}
- /* if it is a special case then go ahead */
- if (parm_table[parmnum].special) {
- struct loadparm_context *lp_ctx = loadparm_init_s3(frame,
- loadparm_s3_helpers());
- if (lp_ctx == NULL) {
- DEBUG(0, ("loadparm_init_s3 failed\n"));
- TALLOC_FREE(frame);
- return false;
- }
-
- lp_ctx->sDefault = &sDefault;
- lp_ctx->services = ServicePtrs;
- lp_ctx->bInGlobalSection = bInGlobalSection;
- lp_ctx->flags = flags_list;
- ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue,
- (char **)parm_ptr);
+ lp_ctx = loadparm_init_s3(frame,
+ loadparm_s3_helpers());
+ if (lp_ctx == NULL) {
+ DEBUG(0, ("loadparm_init_s3 failed\n"));
TALLOC_FREE(frame);
-
- if (!ok) {
- return false;
- }
- goto mark_non_default;
+ return false;
}
- TALLOC_FREE(frame);
-
- ok = set_variable_helper(mem_ctx, parmnum, parm_ptr, pszParmName, pszParmValue);
+ lp_ctx->sDefault = &sDefault;
+ lp_ctx->services = ServicePtrs;
+ lp_ctx->bInGlobalSection = bInGlobalSection;
+ lp_ctx->flags = flags_list;
- if (!ok) {
- return false;
- }
+ ok = set_variable(mem_ctx, snum, parmnum, parm_ptr, pszParmName, pszParmValue,
+ lp_ctx, (snum < 0));
+ TALLOC_FREE(frame);
-mark_non_default:
- if (snum < 0 && (flags_list[parmnum] & FLAG_DEFAULT)) {
- flags_list[parmnum] &= ~FLAG_DEFAULT;
- /* we have to also unset FLAG_DEFAULT on aliases */
- for (i=parmnum-1;i>=0 && parm_table[i].offset == parm_table[parmnum].offset;i--) {
- flags_list[i] &= ~FLAG_DEFAULT;
- }
- for (i=parmnum+1;i<num_parameters() && parm_table[i].offset == parm_table[parmnum].offset;i++) {
- flags_list[i] &= ~FLAG_DEFAULT;
- }
- }
- return true;
+ return ok;
}
/***************************************************************************