Does this look about right?
QDict *qdict;
Error *errp;
QObject **ret_data;
static int counter;
char *idString, *fileName;
// The file variable is objective-c, left that code out
fileName = g_strdup_printf("%s",
[file cStringUsingEncoding: NSASCIIStringEncoding]);
/* Create an unique id */
idString = g_strdup_printf("USB%d", counter++);
/* Create the QDICT object */
qdict = qdict_new();
qdict_put_obj(qdict, "id", qstring_from_str(idString));
qdict_put_obj(qdict, "device", qstring_from_str(idString));
qdict_put_obj(qdict, "if", qstring_from_str("none"));
qdict_put_obj(qdict, "file", qstring_from_str(fileName));
qdict_put_obj(qdict, "driver", qstring_from_str("usb-storage"));
drive_add(IF_DEFAULT, 0, fileName, "none");
qmp_device_add(qdict, ret_data, &errp);
handleAnyDeviceErrors(errp);
g_free(fileName);
g_free(idString);
This is a sample of what I am working on. For some reason, it crashes QEMU. Any
clues why? I think it might be because of qdict_put_obj().