poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Code simplification in pk_hserver_make_hyperlink


From: Dan Čermák
Subject: Re: [PATCH] Code simplification in pk_hserver_make_hyperlink
Date: Thu, 02 Apr 2020 18:15:32 +0200

Tim Rühsen <address@hidden> writes:

> 2020-04-02 Tim Rühsen  <address@hidden>
>
>         * src/pk-hserver.c (pk_hserver_make_hyperlink):
>         Simplify malloc/strlen/strcpy/strcat with asprintf.
>         (pk_hserver_init): Remove writing to hserver_port_str.
>         (hserver_port_str): Remove variable.
> ---
>  ChangeLog        |  7 +++++++
>  src/pk-hserver.c | 47 +++++++++++++++--------------------------------
>  2 files changed, 22 insertions(+), 32 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 5e9d0f7c..e44125a3 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,10 @@
> +2020-04-02 Tim Rühsen  <address@hidden>
> +
> +     * src/pk-hserver.c (pk_hserver_make_hyperlink):
> +     Simplify malloc/strlen/strcpy/strcat with asprintf.
> +     (pk_hserver_init): Remove writing to hserver_port_str.
> +     (hserver_port_str): Remove variable.
> +
>  2020-04-02 Tim Rühsen  <address@hidden>
>
>       * bootstrap.conf: Add gnulib module stdbool.
> diff --git a/src/pk-hserver.c b/src/pk-hserver.c
> index d65eb0f2..941c01dd 100644
> --- a/src/pk-hserver.c
> +++ b/src/pk-hserver.c
> @@ -50,7 +50,6 @@ static int hserver_socket;
>
>  /* Port where the server listens for connections.  */
>  static int hserver_port = 0;
> -static char hserver_port_str[128];
>
>  /* hserver_finish is used to tell the server threads to terminate.  It
>     is protected with a mutex.  */
> @@ -291,7 +290,6 @@ pk_hserver_init ()
>        exit (EXIT_FAILURE);
>      }
>    hserver_port = ntohs (clientname.sin_port);
> -  sprintf (hserver_port_str, "%d", hserver_port);
>
>    hserver_finish = 0;
>    ret = pthread_create (&hserver_thread,
> @@ -331,45 +329,30 @@ pk_hserver_make_hyperlink (char type,
>                             const char *cmd)
>  {
>    int token;
> -  char *str, token_str[128], type_str[2];
> +  char *str;
>    char hostname[128];
>
> +  if (gethostname (hostname, sizeof (hostname)) != 0)
> +    {
> +      perror ("gethostname");
> +      exit (EXIT_FAILURE);
> +    }
> +
>    assert (type == 'i' || type == 'e');
> -  type_str[0] = type;
> -  type_str[1] = '\0';
>
> -  /* XXX: check for maximum length 2048.  */
>    token = pk_hserver_get_token ();
> -  sprintf (token_str, "%d", token);
>
> -  if (gethostname (hostname, 128) != 0)
> +  if (asprintf(&str, "app://%s:%d/%d/%c/%s",
> +               hostname,
> +               hserver_port,
> +               token,
> +               type,
> +               cmd
> +               ) == -1)

Isn't asprintf a GNU extension that will make poke no longer portable to
other libc implementations beside glibc?

>      {
> -      perror ("gethostname");
> -      exit (EXIT_FAILURE);
> +      return NULL;
>      }
>
> -  str = xmalloc (strlen ("app://")
> -                 + strlen (hostname)
> -                 + 1 /* ':' */
> -                 + strlen (hserver_port_str)
> -                 + 1 /* '/' */
> -                 + strlen (token_str)
> -                 + 1 /* '/' */
> -                 + 1 /* type */
> -                 + 1 /* '/' */
> -                 + strlen (cmd)
> -                 + 1 /* '0' */);
> -  strcpy (str, "app://");
> -  strcat (str, hostname);
> -  strcat (str, ":");
> -  strcat (str, hserver_port_str);
> -  strcat (str, "/");
> -  strcat (str, token_str);
> -  strcat (str, "/");
> -  strcat (str, type_str);
> -  strcat (str, "/");
> -  strcat (str, cmd);
> -
>    return str;
>  }
>
> --
> 2.26.0

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]