On 12/01/2011 01:35 PM, Stefan Hajnoczi wrote:
+static void qdev_get_link_property(DeviceState *dev, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ DeviceState **child = opaque;
+ gchar *path;
+
+ if (*child) {
+ path = qdev_get_canonical_path(*child);
+ visit_type_str(v,&path, name, errp);
+ g_free(path);
+ } else {
+ path = (gchar *)"";
If gchar != char, this is wrong. Also, you're converting a const
pointer into a non-const pointer, discarding type safety.
This looked weird to me too but the cast has to do with the fact that
the visitor function works both for input and output visitors. The
output visitor needs to write to gchar** while the input visitor does
not.
So you need to pass a non-const pointer to an array of const char, or
const gchar **. You don't modify the string in place, you allocate a
new string and free the old one.
When this function is called with the correct visitor type we are
guaranteed that path will not be modified.
What if it's called with the output visitor? (warning: confusing
convention).