Hi,

+#define VMSTATE_BOOL_ARRAY(_f, _s, _n)                               \
+    VMSTATE_BOOL_ARRAY_V(_f, _s, _n, 0)
+

Why don't we pack the bits?

Point being? As long as we don't save *big* arrays of bools it simply isn't worth the effort IMHO. And for big arrays we'll probably wouldn't use bool in the first place ...

+/* bool */
+
+static int get_bool(QEMUFile *f, void *pv, size_t size)
+{
+    bool *v = pv;
+    *v = qemu_get_byte(f);
+    return 0;

We must really validate that the value is 0 or 1.
If it's not, we will get undefined behaviour.

I disagree.

You indeed have a bug in case your bool ends up with a value being neither 0 nor 1. That is completely independant from savevm/loadvm though, it can trip you up even in case you don't save/load the VM at all.

+}
+
+static void put_bool(QEMUFile *f, void *pv, size_t size)
+{
+    bool *v = pv;
+    qemu_put_byte(f, *v);

Is there a guarantee that bool is a single byte, BTW?

No. bool must be 0 or 1 though, and a single byte is big enough to keep that information.

cheers,
  Gerd


Reply via email to