summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/param/loadparm.c31
-rw-r--r--source4/param/wscript_build2
2 files changed, 17 insertions, 16 deletions
diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c
index 41fee6fde9..47ee05bcd2 100644
--- a/source4/param/loadparm.c
+++ b/source4/param/loadparm.c
@@ -69,6 +69,7 @@
#include "lib/socket/socket.h"
#include "auth/gensec/gensec.h"
#include "s3_param.h"
+#include "../lib/util/bitmap.h"
#define standard_sub_basic talloc_strdup
@@ -96,7 +97,7 @@ static bool defaults_saved = false;
int bAvailable; \
int iMaxPrintJobs; \
char *volume; \
- int *copymap; \
+ struct bitmap *copymap; \
char dummy[3]; /* for alignment */
#include "param_global.h"
@@ -1569,7 +1570,7 @@ static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx
const char *pszServiceName);
static void copy_service(struct loadparm_service *pserviceDest,
struct loadparm_service *pserviceSource,
- int *pcopymapDest);
+ struct bitmap *pcopymapDest);
static bool service_ok(struct loadparm_service *service);
static bool do_section(const char *pszSectionName, void *);
static void init_copymap(struct loadparm_service *pservice);
@@ -2097,7 +2098,7 @@ static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx
static void copy_service(struct loadparm_service *pserviceDest,
struct loadparm_service *pserviceSource,
- int *pcopymapDest)
+ struct bitmap *pcopymapDest)
{
int i;
bool bcopyall = (pcopymapDest == NULL);
@@ -2106,7 +2107,7 @@ static void copy_service(struct loadparm_service *pserviceDest,
for (i = 0; parm_table[i].label; i++)
if (parm_table[i].offset != -1 && parm_table[i].p_class == P_LOCAL &&
- (bcopyall || pcopymapDest[i])) {
+ (bcopyall || bitmap_query(pcopymapDest, i))) {
void *src_ptr =
((char *)pserviceSource) + parm_table[i].offset;
void *dest_ptr =
@@ -2146,9 +2147,8 @@ static void copy_service(struct loadparm_service *pserviceDest,
if (bcopyall) {
init_copymap(pserviceDest);
if (pserviceSource->copymap)
- memcpy((void *)pserviceDest->copymap,
- (void *)pserviceSource->copymap,
- sizeof(int) * NUMPARAMETERS);
+ bitmap_copy(pserviceDest->copymap,
+ pserviceSource->copymap);
}
data = pserviceSource->param_opt;
@@ -2388,16 +2388,17 @@ static bool handle_logfile(struct loadparm_context *lp_ctx, int unused,
static void init_copymap(struct loadparm_service *pservice)
{
int i;
- talloc_free(pservice->copymap);
- pservice->copymap = talloc_array(pservice, int, NUMPARAMETERS);
- if (pservice->copymap == NULL) {
+
+ TALLOC_FREE(pservice->copymap);
+
+ pservice->copymap = bitmap_talloc(NULL, NUMPARAMETERS);
+ if (!pservice->copymap)
DEBUG(0,
("Couldn't allocate copymap!! (size %d)\n",
(int)NUMPARAMETERS));
- return;
- }
- for (i = 0; i < NUMPARAMETERS; i++)
- pservice->copymap[i] = true;
+ else
+ for (i = 0; i < NUMPARAMETERS; i++)
+ bitmap_set(pservice->copymap, i);
}
/**
@@ -2671,7 +2672,7 @@ bool lpcfg_do_service_parameter(struct loadparm_context *lp_ctx,
for (i = 0; parm_table[i].label; i++)
if (parm_table[i].offset == parm_table[parmnum].offset &&
parm_table[i].p_class == parm_table[parmnum].p_class)
- service->copymap[i] = false;
+ bitmap_clear(service->copymap, i);
return set_variable(service, parmnum, parm_ptr, pszParmName,
pszParmValue, lp_ctx, false);
diff --git a/source4/param/wscript_build b/source4/param/wscript_build
index 7f45402017..8cd9955737 100644
--- a/source4/param/wscript_build
+++ b/source4/param/wscript_build
@@ -20,7 +20,7 @@ bld.SAMBA_LIBRARY('samba-hostconfig',
pc_files='samba-hostconfig.pc',
vnum='0.0.1',
deps='DYNCONFIG',
- public_deps='samba-util',
+ public_deps='samba-util bitmap',
public_headers='param.h',
autoproto='param_proto.h',
)