Re: INVALID vs. NULL values



> BTW, I'd be interested in seeing the code for your stripped-down
> version. It probably isn't that appropriate for desktop use but I have
> been investigating some improvements along the lines of changing the
> protocol.

I'll make it part of PicoGUI (www.picogui.org) : it is not part of
this project itself, but the community there might find it useful...

About the protocol, I dropped the assumption of networked access to
the server, so I use unix sockets and transmit structures with no
great care for marshalling. I've a small description language for the
structures being passed that generate data structures sufficient to
handle the dynamic fields. For instance:

ValueString
        gchar   value [len]
        guint16 len

...generates:

typedef struct {
  gchar * value;
  guint16 len;
} GConfRqValueString;

...plus information that the length of the value field is stored in
the len field:

static IPCLibContent _gconf_rq_value_string [] = {
  {IPCLIB_PROTOCOL_BODY, 0, sizeof (GConfRqValueString)},
  {IPCLIB_PROTOCOL_CHAR | IPCLIB_PROTOCOL_REFERENCE, offsetof (GConfRqValueString, value), 2},
  {IPCLIB_PROTOCOL_UINT16, offsetof (GConfRqValueString, len), sizeof (guint16)},
  {IPCLIB_PROTOCOL_FINISHED, 0, 0}
};

This makes it easy to write a generic library to send and receive
these structures. This code does not allow for nested structures. So
I've manually broken down the complex structures, and I reassemble
them by hand. Maybe less elegant than having an IDL compiler, but this
solves 80% of the problems easily...

The core functionnality is working, but the client library is not as
thin as expected, mainly due to the use of the glib: I don't have
dynamic libraries, and using a single function of the glib causes
almost the complete library to be linked in a program. I'll also try
to improve this situation by splitting the glib files, so that only
the requested functions are linked in.

Now that my PicoGConf works, I will have to implement a sort of
graphical preference editor on top of it. One shortcoming of the
current model is the automatic enforcement of additional constraints
on the values (min/max values for integers, general constraints on
strings,...). Is this something that will be addressed in a future
version (extended schemas for instance) or is it a design choice ?  I
can think of using GConf itself to store these constraints as special
keys, but I don't know if this is a good idea (applications still have
to check if the values are correct, as the preference editor could be
easily bypassed).

Frédéric

Attachment: pgpjO82jX34gQ.pgp
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]