Il 15/10/2012 21:34, Anthony Liguori ha scritto: > +static char *chardev_file_get_path(Object *obj, Error **errp) > +{ > + CharDriverState *chr = CHARDEV(obj); > + FDCharDriver *s = chr->opaque; > + > + return s->path ? g_strdup(s->path) : g_strdup(""); > +} > + > +static void chardev_file_set_path(Object *obj, const char *value, Error > **errp) > +{ > + CharDriverState *chr = CHARDEV(obj); > + FDCharDriver *s = chr->opaque; > + > + if (chr->realized) { > + error_set(errp, QERR_PERMISSION_DENIED); > + return; > + } > + > + if (s->path) { > + g_free(s->path); > + } > + > + s->path = g_strdup(value); > +} > + > +static void chardev_file_initfn(Object *obj) > +{ > + CharDriverState *chr = CHARDEV(obj); > + > + object_property_add_str(obj, "path", chardev_file_get_path, > chardev_file_set_path, NULL); > +#ifndef _WIN32 > + chr->opaque = CHARDEV_FILE(obj); > +#endif > +} > +
IMHO this really really calls for pushing static properties and realized up to Object... Paolo