[Libguestfs] [libnbd PATCH] maint: pick consistent spacing style for casts

Laszlo Ersek lersek at redhat.com
Wed May 24 05:39:20 UTC 2023


On 5/24/23 04:12, Eric Blake wrote:
> We are inconsistent on whether a cast operator should be separated
> from its argument by a space.  As a unary prefix operator, casts bind
> with relatively tight precedence, where only postfix operations
> (including function calls) come higher.  We generally don't use a
> space after other prefix operators (*, &, ~, and unary - tend to not
> be followed by space; we are less consistent on !, but that would be a
> separate patch).
> 
> Furthermore, we've already decided (in commit b5101fbc) that we prefer
> spaces before function invocations.  At the time, discussion on the
> list[1] pointed out that thanks to the complexity of C with its
> context-sensitive parsing needing to know whether an identifier is a
> type name, you would be able to tell the difference between a
> 2-argument function call with two parameters through a function
> pointer (or intentional function-like macro suppression):
> 
>   (foo) (bar, baz)
> 
> from the (admittedly rare) application of a cast operator to the
> results of a comma operator:
> 
>   (foo)(bar, baz)
> 
> if we consistently avoid spaces after casts.
> 
> Determining cast operators is not always trivial, but the regex used
> below seems to have a pretty low false positive rate (lines it selects
> usually are casts and not in a comment line), and can be modified by
> removing the space to see where we already had casts without a
> space. (Obviously, I can't tell how many false negatives there are of
> casts I missed out on).  While this changes more lines than would be
> done by instead always using a space in a cast, it is still manageable
> to do a bulk change.
> 
> $ git grep '\(_t\|int\|long\|signed\|char\|\*\)) [a-zA-Z0-9&"]' -- \
>   '**/*.[hc]' '**/*.ml' | grep -v '^ */\?\*'
> 
> 'git show -w' shows that this change is whitespace only.
> 
> [1] https://listman.redhat.com/archives/libguestfs/2023-February/030771.html
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  configure.ac                                 |  6 ++--
>  common/utils/vector.h                        |  4 +--
>  generator/OCaml.ml                           |  4 +--
>  generator/Python.ml                          |  4 +--
>  generator/states-connect-socket-activation.c |  4 +--
>  generator/states-connect.c                   |  2 +-
>  generator/states-issue-command.c             |  2 +-
>  generator/states-newstyle.c                  |  2 +-
>  generator/states-oldstyle.c                  |  2 +-
>  generator/states-reply-structured.c          | 14 ++++----
>  generator/states-reply.c                     |  2 +-
>  generator/states.c                           |  4 +--
>  lib/crypto.c                                 |  6 ++--
>  lib/rw.c                                     |  2 +-
>  lib/uri.c                                    | 10 +++---
>  lib/utils.c                                  |  4 +--
>  common/utils/test-vector.c                   |  4 +--
>  python/handle.c                              |  4 +--
>  python/utils.c                               |  2 +-
>  ocaml/nbd-c.h                                |  6 ++--
>  tests/aio-connect-port.c                     |  2 +-
>  tests/aio-connect.c                          |  2 +-
>  tests/errors-bad-cookie.c                    |  2 +-
>  tests/errors-client-oversize.c               |  2 +-
>  tests/errors-client-unadvertised-cmd.c       |  2 +-
>  tests/errors-client-unaligned.c              |  2 +-
>  tests/errors-client-unknown-flags.c          |  2 +-
>  tests/errors-client-zerosize.c               |  2 +-
>  tests/errors-connect-null.c                  |  2 +-
>  tests/errors-connect-twice.c                 |  4 +--
>  tests/errors-multiple-disconnects.c          |  2 +-
>  tests/errors-not-negotiating.c               |  2 +-
>  tests/errors-notify-not-blocked.c            |  2 +-
>  tests/errors-pread-structured.c              |  2 +-
>  tests/errors-server-invalid-offset.c         |  2 +-
>  tests/errors-server-oversize.c               |  2 +-
>  tests/errors-server-unadvertised-cmd.c       |  2 +-
>  tests/errors-server-unaligned.c              |  2 +-
>  tests/errors-server-unknown-flags.c          |  2 +-
>  tests/errors-server-zerosize.c               |  2 +-
>  tests/opt-set-meta.c                         |  2 +-
>  tests/opt-starttls.c                         |  4 +--
>  tests/opt-structured-twice.c                 |  2 +-
>  tests/pread-initialize.c                     |  2 +-
>  tests/private-data.c                         |  4 +--
>  tests/server-death.c                         |  2 +-
>  tests/shutdown-flags.c                       |  2 +-
>  examples/glib-main-loop.c                    | 36 ++++++++++----------
>  examples/open-qcow2.c                        |  2 +-
>  interop/list-exports.c                       |  2 +-
>  copy/file-ops.c                              |  6 ++--
>  copy/main.c                                  | 10 +++---
>  copy/nbd-ops.c                               | 36 ++++++++++----------
>  copy/pipe-ops.c                              |  8 ++---
>  dump/dump.c                                  |  2 +-
>  fuse/nbdfuse.c                               |  8 ++---
>  fuse/operations.c                            | 10 +++---
>  ublk/nbdublk.c                               |  4 +--
>  ublk/tgt.c                                   |  4 +--
>  59 files changed, 138 insertions(+), 138 deletions(-)

Going through the changes individually, it seems like we could eliminate
a handful of the casts altogether; for examle (char *)"string literal"
ones. (The C standard effectively says that a (non-wide) string literal
has type "static char[n]", not "static const char[n]".) But that would
be a different patch, plus I can imagine we have those casts in the
first place because gcc complained or whatever. :)

Reviewed-by: Laszlo Ersek <lersek at redhat.com>




More information about the Libguestfs mailing list