#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
int bAvailable; \
int iMaxPrintJobs; \
char *volume; \
- int *copymap; \
+ struct bitmap *copymap; \
char dummy[3]; /* for alignment */
#include "param_global.h"
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);
static void copy_service(struct loadparm_service *pserviceDest,
struct loadparm_service *pserviceSource,
- int *pcopymapDest)
+ struct bitmap *pcopymapDest)
{
int i;
bool bcopyall = (pcopymapDest == NULL);
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 =
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;
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);
}
/**
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);