On Tue 30 Jan 2018 05:17:47 PM CET, Eric Blake wrote: >>>> - virtual_size = align_offset(qemu_opt_get_size_del(opts, >>>> BLOCK_OPT_SIZE, 0), >>>> + virtual_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, >>>> 0), >>>> cluster_size); >> >> I just realized that the first parameter here is a function call with >> side effects, it it safe to use ROUND_UP() in this case? >> >> #define ROUND_UP(n, d) (((n) + (d) - 1) & -(0 ? (n) : (d))) > > Oh, good catch. No, we need a temporary variable to hold the result > of the function call (or we could rewrite ROUND_UP to have > evaluate-once semantics using gcc/clang extensions).
It was actually not a problem since C guarantees that the (n) in the conditional expression is only evaluated if the first operand is != 0. So (n) is only evaluated once. Anyway, I rewrote it in the new patch as you suggested since it looks a bit more readable. Berto