From 21756b7c7d3048ce3396ab63aebc80babf4819e9 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 29 Jun 2011 10:49:35 +1000 Subject: s3-param Use .offset rather than .ptr when defining parameters This change has a number of purposes: * It removes the fancy logic around pointers into sDefault for all per-share parameters. Instead, this is always expressed as an offset, rather than implicitly via PTR_DIFF macros. * It makes struct parm_struct almost identical to that as used in source4/param. This will very shortly allow the loadparm tables and most of the 'special' helper functions to be placed in common. Andrew Bartlett Autobuild-User: Andrew Bartlett Autobuild-Date: Wed Jun 29 05:50:46 CEST 2011 on sn-devel-104 --- source3/include/smb.h | 2 +- source3/param/loadparm.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'source3') diff --git a/source3/include/smb.h b/source3/include/smb.h index f46a58ef11..25e3bacc72 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -731,7 +731,7 @@ struct parm_struct { const char *label; parm_type type; parm_class p_class; - void *ptr; + offset_t offset; bool (*special)(int snum, const char *, char **); const struct enum_list *enum_list; unsigned flags; diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 7da3de393a..430c2de5ac 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -930,9 +930,8 @@ static const struct enum_list enum_kerberos_method[] = { * name first, and all synonyms must follow it with the FLAG_HIDE attribute. */ -#define GLOBAL_VAR(name) &Globals.name -#define LOCAL_VAR(name) &sDefault.name -#define offset ptr +#define GLOBAL_VAR(name) offsetof(struct loadparm_global, name) +#define LOCAL_VAR(name) offsetof(struct loadparm_service, name) static struct parm_struct parm_table[] = { {N_("Base Options"), P_SEP, P_SEPARATOR}, @@ -7755,12 +7754,12 @@ void *lp_parm_ptr(struct loadparm_service *service, struct parm_struct *parm) { if (service == NULL) { if (parm->p_class == P_LOCAL) - return parm->ptr; + return (void *)(((char *)&sDefault)+parm->offset); else if (parm->p_class == P_GLOBAL) - return parm->ptr; + return (void *)(((char *)&Globals)+parm->offset); else return NULL; } else { - return (void *)(((char *)service) + PTR_DIFF(parm->ptr, &sDefault)); + return (void *)(((char *)service) + parm->offset); } } -- cgit