[Spice-devel] [PATCH 11/14] Replace inefficient C-style initialization with C++-style

Frediano Ziglio fziglio at redhat.com
Thu Feb 15 06:05:47 UTC 2018


> 
> From: Christophe de Dinechin <dinechin at redhat.com>
> 
> Signed-off-by: Christophe de Dinechin <dinechin at redhat.com>
> ---
>  src/spice-streaming-agent.cpp | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
> index e9ef310..9a5c4fa 100644
> --- a/src/spice-streaming-agent.cpp
> +++ b/src/spice-streaming-agent.cpp
> @@ -280,10 +280,7 @@ static void handle_interrupt(int intr)
>  
>  static void register_interrupts(void)
>  {
> -    struct sigaction sa;
> -
> -    memset(&sa, 0, sizeof(sa));
> -    sa.sa_handler = handle_interrupt;
> +    struct sigaction sa = { .sa_handler = handle_interrupt };
>      if ((sigaction(SIGINT, &sa, NULL) != 0) &&
>          (sigaction(SIGTERM, &sa, NULL) != 0)) {
>          syslog(LOG_WARNING, "failed to register signal handler %m");

This syntax is C++20, we decided to limit to C++11, this is supported
by some gcc/clang version for C compatibility.
This specifically is also not even C++20, sa_handler is not a direct sigaction
field in different cases (this is a case where config.h flags can change
APIs but not ABIs) but is a nested field into an union and there's something
like:
  #define sa_handler union_field_name.sa_handler
(nested field are not supported by aggregated initializer in C++).
This patch does not compile for me.

I think also that with RHEL 7 compiler these initializations are a bit
different with compiler throwing warning about missing field initialization.

Frediano


More information about the Spice-devel mailing list