Hello.
I'm trying to create bacula component.
However, while testing it I found out an interesting problem. As always, not sure, who is right.

Bacula has the following code in shared library libbaccfg.so:

if (items[i].handler == store_pint32 ||
                    items[i].handler == store_int32 ||
                    items[i].handler == store_size32) {
            *(uint32_t *)(items[i].value) = items[i].default_value;

where store_pint32 is defined as

void store_pint32(LEX *lc, RES_ITEM *item, int index, int pass);

in lib/parse_conf.h.

In bacula director code (src/dird/dird_conf.c), which is linked to this library and which also includes lib/parse_conf.h
there is an array of structures (items):

struct RES_ITEM {
const char *name; /* Resource name i.e. Director, ... */ MSG_RES_HANDLER *handler; /* Routine storing the resource item */
   union {
      char **value;                   /* Where to store the item */
      char **charvalue;
      uint32_t ui32value;
      int32_t i32value;
      uint64_t ui64value;
      int64_t i64value;
      bool boolvalue;
      utime_t utimevalue;
      RES *resvalue;
      RES **presvalue;
   };
   int32_t  code;                     /* item code/additional info */
uint32_t flags; /* flags: default, required, ... */
   int32_t  default_value;            /* default value */
};
....

static RES_ITEM dir_items[] = {
...
{"maximumconsoleconnections", store_pint32, ITEM(res_dir.MaxConsoleConnect), 0, ITEM_DEFAULT, 20},
...
   {NULL, NULL, {0}, 0, 0, 0}
};

But when I check store_pint32 addresses in bacula director code and in libbaccfg.so they are different:
item.handler=80636f4
store_pint32=feda730b

I just don't understand... Are pointers for store_pint32 in library and in code which uses it supposed to be the same? And why on earth they are not?...
--
System Administrator of Southern Federal University Computer Center

_______________________________________________
oi-dev mailing list
[email protected]
http://openindiana.org/mailman/listinfo/oi-dev

Reply via email to