struct param_section *section;
struct param_opt *p;
+ SMB_ASSERT(section_name != NULL);
+ SMB_ASSERT(name != NULL);
+
section = param_get_section(ctx, section_name);
if (section == NULL) {
return NULL;
section->name = talloc_strdup(section, section_name);
- DLIST_ADD(ctx->sections, section);
+ DLIST_ADD_END(ctx->sections, section, struct param_section *);
}
p = param_section_get(section, name);
return NULL;
p->key = talloc_strdup(p, name);
- DLIST_ADD(section->parameters, p);
+ DLIST_ADD_END(section->parameters, p, struct param_opt *);
}
return p;
section->name = talloc_strdup(section, name);
- DLIST_ADD(ctx->sections, section);
+ DLIST_ADD_END(ctx->sections, section, struct param_section *);
}
/* Make sure this section is on top of the list for param_pfunc */
return 0;
}
+int param_use(struct loadparm_context *lp_ctx, struct param_context *ctx)
+{
+ struct param_section *section;
+
+ for (section = ctx->sections; section; section = section->next) {
+ struct param_opt *param;
+ bool isglobal = strcmp(section->name, "global") == 0;
+ for (param = section->parameters; param; param = param->next) {
+ if (isglobal)
+ lp_do_global_parameter(lp_ctx, param->key,
+ param->value);
+ else {
+ struct loadparm_service *service =
+ lp_service(lp_ctx, section->name);
+ if (service == NULL)
+ service = lp_add_service(lp_ctx, &sDefault, section->name);
+ lp_do_service_parameter(lp_ctx,
+ service,
+ param->key,
+ param->value);
+ }
+ }
+ }
+ return 0;
+}
+
int param_write(struct param_context *ctx, const char *fn)
{
int file;
/* This is a default service used to prime a services structure */
-static struct loadparm_service sDefault = {
+struct loadparm_service sDefault = {
.szService = NULL,
.szPath = NULL,
.szCopy = NULL,
service.
***************************************************************************/
-static struct loadparm_service *add_a_service(struct loadparm_context *lp_ctx,
+struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
const struct loadparm_service *pservice,
const char *name)
{
num_to_alloc);
if (!tsp) {
- DEBUG(0,("add_a_service: failed to enlarge ServicePtrs!\n"));
+ DEBUG(0,("lp_add_service: failed to enlarge ServicePtrs!\n"));
return NULL;
}
else {
lp_ctx->ServicePtrs[i] = init_service(talloc_autofree_context());
if (lp_ctx->ServicePtrs[i] == NULL) {
- DEBUG(0,("add_a_service: out of memory!\n"));
+ DEBUG(0,("lp_add_service: out of memory!\n"));
return NULL;
}
copy_service(lp_ctx->ServicePtrs[i], &tservice, NULL);
{
struct loadparm_service *service;
- service = add_a_service(lp_ctx, default_service, pszHomename);
+ service = lp_add_service(lp_ctx, default_service, pszHomename);
if (service == NULL)
return false;
return true;
}
-/***************************************************************************
- Add a new service, based on an old one.
-***************************************************************************/
-
-struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
- const char *pszService,
- struct loadparm_service *default_service)
-{
- return add_a_service(lp_ctx, default_service, pszService);
-}
-
/***************************************************************************
Add the IPC service.
***************************************************************************/
static bool lp_add_hidden(struct loadparm_context *lp_ctx, const char *name,
const char *fstype)
{
- struct loadparm_service *service = add_a_service(lp_ctx, &sDefault, name);
+ struct loadparm_service *service = lp_add_service(lp_ctx, &sDefault, name);
if (service == NULL)
return false;
{
const char *comment = "From Printcap";
struct loadparm_service *service;
- service = add_a_service(lp_ctx, default_service, pszPrintername);
+ service = lp_add_service(lp_ctx, default_service, pszPrintername);
if (service == NULL)
return false;
/* issued by the post-processing of a previous section. */
DEBUG(2, ("Processing section \"[%s]\"\n", pszSectionName));
- if ((lp_ctx->currentService = add_a_service(lp_ctx, &sDefault,
+ if ((lp_ctx->currentService = lp_add_service(lp_ctx, &sDefault,
pszSectionName))
== NULL) {
DEBUG(0, ("Failed to add a new service\n"));