On Wed, May 10, 2023 at 01:48:08PM +0200, Laszlo Ersek wrote: > This is the last wave (wave 5). Line length maxima: > > file before after > ---------------- ------ ----- > lib/states-run.c 102 98 > lib/states.c 116 80 > lib/states.h 123 86 > > The longest line in "lib/states.h" becomes: > > > extern int > > nbd_internal_enter_STATE_NEWSTYLE_OPT_STRUCTURED_REPLY_RECV_REPLY_PAYLOAD ( > > struct nbd_handle *h, bool *blocked > > ); > > The one in "lib/states-run.c": > > > case STATE_NEWSTYLE_OPT_STRUCTURED_REPLY_RECV_REPLY_PAYLOAD: > > r = > > nbd_internal_enter_STATE_NEWSTYLE_OPT_STRUCTURED_REPLY_RECV_REPLY_PAYLOAD > > (h, &blocked); > > break; > > We couldn't find a "scalable" approach for shortening these (the state > machine can be nested indefinitely deeply), so we decided to live with > them.
For public reference, we considered approaches such as shortening specific state names: s/NEWSTYLE/NEW/ s/OPT_STRUCTURED_REPLY/OPT_SR/ s/RECV_REPLY_PAYLOAD/RECV_PAYLOAD/ but the more names we change, the more places we have to touch, and it doesn't alleviate the possibility of future state names being long. We also considered a different way of writing state names, by introducing a series of glue macros, where you can then wrap macro parameters but still generate a long C identifier, something like: extern int NBD_GLUE4(nbd_internal_enter_STATE, NEWSTYLE, OPT_STRUCTURED_REPLY, RECV_REPLY_PAYLOAD) { ... case NBD_GLUE4(STATE, NEWSTYLE, OPT_STRUCTURED_REPLY, RECV_REPLY_PAYLOAD): with variations such as writing a variadic macro NBD_GLUE(...) using __VA_ARGS__ that then dispatches to the correct NBD_GLUE<n> rather than having to be explicit about it at callsites. But that hurts grep'ability when stepping through the state machine in gdb. > > Thanks > Laszlo > Laszlo Ersek (6): > state_machine_generator: wrap debug() calls in nbd_internal_run() > generator/utils: add "pr_wrap_c_comment" > state_machine_generator: wrap state comments in lib/states.{h,c} > state_machine_generator: wrap nbd_internal_enter_* prototypes > state_machine_generator: wrap enter_*() calls and prototypes > state_machine_generator: rename, and break up the init. of, > "next_state" For those without explicit comments, Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs