_PUBLIC_ char *lpcfg_ ## fn_name(struct loadparm_context *lp_ctx, TALLOC_CTX *ctx) {\
if (lp_ctx == NULL) return NULL; \
if (lp_ctx->s3_fns) { \
- SMB_ASSERT(lp_ctx->s3_fns->fn_name); \
- return lp_ctx->s3_fns->fn_name(ctx); \
+ return lp_ctx->globals->var_name ? lp_ctx->s3_fns->lp_string(ctx, lp_ctx->globals->var_name) : talloc_strdup(ctx, ""); \
} \
return lp_ctx->globals->var_name ? talloc_strdup(ctx, lpcfg_string(lp_ctx->globals->var_name)) : talloc_strdup(ctx, ""); \
}
#define FN_GLOBAL_CONST_STRING(fn_name,var_name) \
_PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) { \
if (lp_ctx == NULL) return NULL; \
- if (lp_ctx->s3_fns) { \
- SMB_ASSERT(lp_ctx->s3_fns->fn_name); \
- return lp_ctx->s3_fns->fn_name(); \
- } \
return lp_ctx->globals->var_name ? lpcfg_string(lp_ctx->globals->var_name) : ""; \
}
#define FN_GLOBAL_LIST(fn_name,var_name) \
_PUBLIC_ const char **lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) { \
if (lp_ctx == NULL) return NULL; \
- if (lp_ctx->s3_fns) { \
- SMB_ASSERT(lp_ctx->s3_fns->fn_name); \
- return lp_ctx->s3_fns->fn_name(); \
- } \
return lp_ctx->globals->var_name; \
}
#define FN_GLOBAL_BOOL(fn_name,var_name) \
_PUBLIC_ bool lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {\
if (lp_ctx == NULL) return false; \
- if (lp_ctx->s3_fns) { \
- SMB_ASSERT(lp_ctx->s3_fns->fn_name); \
- return lp_ctx->s3_fns->fn_name(); \
- } \
return lp_ctx->globals->var_name; \
}
#define FN_GLOBAL_INTEGER(fn_name,var_name) \
_PUBLIC_ int lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) { \
- if (lp_ctx->s3_fns) { \
- SMB_ASSERT(lp_ctx->s3_fns->fn_name); \
- return lp_ctx->s3_fns->fn_name(); \
- } \
return lp_ctx->globals->var_name; \
}
return NULL;
}
loadparm_context->s3_fns = s3_fns;
+ loadparm_context->globals = s3_fns->globals;
return loadparm_context;
}
int lp_find_security(int server_role, int security);
bool lp_is_security_and_server_role_valid(int server_role, int security);
+struct loadparm_global * get_globals(void);
+char * lp_string(TALLOC_CTX *, const char *);
+
/**
* Check if two parameters are equal.
*/
file_out.write("\tbool (*set_cmdline)(const char *pszParmName, const char *pszParmValue);\n")
file_out.write("\tvoid (*dump)(FILE *f, bool show_defaults, int maxtoprint);\n")
file_out.write("\tconst char * (*dnsdomain)(void);\n")
-
- for parameter in iterate_all(path_in):
- # filter out parameteric options
- if ':' in parameter['name']:
- continue
- if parameter['context'] != 'G':
- continue
- output_string = "\t"
- if parameter['constant'] or parameter['type'] == 'string':
- output_string += 'const '
- param_type = mapping.get(parameter['type'])
- if param_type is None:
- raise Exception(parameter['name'] + " has an invalid context " + parameter['context'])
- output_string += param_type
-
- if parameter['type'] == 'string' and not parameter['constant']:
- output_string += " (*%s)(TALLOC_CTX *);\n" % parameter['function']
- else:
- output_string += " (*%s)(void);\n" % parameter['function']
- file_out.write(output_string)
-
+ file_out.write("\tchar * (*lp_string)(TALLOC_CTX *ctx, const char *in);\n")
+ file_out.write("\tstruct loadparm_global *globals;\n")
file_out.write("};\n")
file_out.write("\n#endif /* %s */\n\n" % header)
finally:
file_out = open(path_out, 'w')
try:
file_out.write('/* This file was automatically generated by generate_param.py. DO NOT EDIT */\n\n')
- file_out.write("static const struct loadparm_s3_helpers s3_fns =\n")
+ file_out.write("static struct loadparm_s3_helpers s3_fns =\n")
file_out.write("{\n")
file_out.write("\t.get_parametric = lp_parm_const_string_service,\n")
file_out.write("\t.get_parm_struct = lp_get_parameter,\n")
file_out.write("\t.set_cmdline = lp_set_cmdline,\n")
file_out.write("\t.dump = lp_dump,\n")
file_out.write("\t.dnsdomain = lp_dnsdomain,\n")
- header = get_header(path_out)
-
- for parameter in iterate_all(path_in):
- # filter out parameteric options
- if ':' in parameter['name']:
- continue
- if parameter['context'] != 'G':
- continue
- output_string = "\t.%s" % parameter['function']
- output_string += " = lp_%s,\n" % parameter['function']
- file_out.write(output_string)
-
file_out.write("};")
finally:
file_out.close()
callers without affecting the source string.
********************************************************************/
-static char *lp_string(TALLOC_CTX *ctx, const char *s)
+char *lp_string(TALLOC_CTX *ctx, const char *s)
{
char *ret;
return lp_find_security(lp__server_role(),
lp__security());
}
+
+struct loadparm_global * get_globals(void)
+{
+ return &Globals;
+}
const struct loadparm_s3_helpers *loadparm_s3_helpers(void)
{
- return &s3_fns;
+ struct loadparm_s3_helpers *helpers;
+ helpers = &s3_fns;
+ helpers->globals = get_globals();
+ helpers->lp_string = lp_string;
+ return helpers;
}