Arnaud,

If memory serves, you're the one that 'invented' the upsdrv_info_t subdriver description structure. We seem to have an issue with this on Solaris. I suspect that we're introducing GCC specific behavior here.

Technically the typedef here isn't possible in C89, since this suggests that sizeof(upsdrv_info_t) can be determined. This obvious is not the case, since we can (and will) have variable number of subdrv_info elements and therefor the size is variable.

Can you elaborate on what your intended use for this was at the time you added this? It looks like currently this is only used for printing some info in the upsdrv_banner() call. For the time being, I think we could fix this by hardcoding the number of elements (we never use more than 2, but could always increase this number if needed):

/* subdriver description structure */
struct upsdrv_info_s {
        const char      *name;          /* driver full name, for banner 
printing, ... */
        const char      *version;       /* driver version */
        const char      *authors;       /* authors name */
        const int       status;         /* driver development status */
        struct upsdrv_info_s    *subdrv_info[2];        /* sub driver 
information */
};

typedef struct upsdrv_info_s    upsdrv_info_t;

Can't we just use something like

static upsdrv_info_t    driver_info = {
        DRIVER_NAME,
        DRIVER_VERSION,
        "Ex Ample <[email protected]>",
        DRV_EXPERIMENTAL
};

upsdrv_info_t   *upsdrv_info[] = {
        &driver_info,
        &subdriver_info,
        NULL
};

In this example, subdriver_info is exported by an external module and that is linked in the main driver.

Best regards, Arjen
--
Please keep list traffic on the list


_______________________________________________
Nut-upsdev mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev

Reply via email to