[Spice-devel] [spice-gtk 2/2] mingw: Fix compilation breakage because of memmem use

Frediano Ziglio fziglio at redhat.com
Mon Oct 1 09:32:04 UTC 2018


> 
> mingw does not provide memmem. Since the qmp data we get should not have
> embedded nul characters, we can use g_strstr_len instead of memmem.

See https://stackoverflow.com/questions/43969649/null-character-within-json,
you can remove the should.

> Should that be a problem, gnulib provides a lgplv2+ implementation of
> memmem we could fallback on.
> 
> https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob;f=modules/memmem;h=63bd3efce10abff6ab4421650eb9df1c6bdfb2c7;hb=HEAD
> 

Also you can remove this.

> Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> ---
>  src/qmp-port.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/qmp-port.c b/src/qmp-port.c
> index c91f967a..90527135 100644
> --- a/src/qmp-port.c
> +++ b/src/qmp-port.c
> @@ -160,7 +160,7 @@ spice_qmp_handle_port_data(SpiceQmpPort *self, gpointer
> data,
>      }
>  
>      str = qmp->str;
> -    while ((crlf = memmem(str, qmp->len - (str - qmp->str), "\r\n", 2))) {
> +    while ((crlf = g_strstr_len(str, qmp->len - (str - qmp->str), "\r\n")))
> {

At this point I as NUL are not allowed I would use strstr/g_strstr using normal
C string functions (that require NUL terminator). So:

    while ((crlf = strstr(str, "\r\n")))

is enough. To be style coherent is

    while ((crlf = strstr(str, "\r\n")) != NULL)

>          GError *err = NULL;
>  
>          *crlf = '\0';

Frediano


More information about the Spice-devel mailing list