On Thu, Dec 4, 2025 at 7:42 PM Vladimir Sementsov-Ogievskiy <
[email protected]> wrote:

> We'll use it in following commit.
>
> Note the bonus: stop use blind strcpy().
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
>

Reviewed-by: Marc-André Lureau <[email protected]>


> ---
>  chardev/char-pty.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/chardev/char-pty.c b/chardev/char-pty.c
> index 9e26e97baf..a582aa7bc7 100644
> --- a/chardev/char-pty.c
> +++ b/chardev/char-pty.c
> @@ -43,6 +43,7 @@ struct PtyChardev {
>      int connected;
>      GSource *timer_src;
>      char *path;
> +    char *pty_name;
>  };
>  typedef struct PtyChardev PtyChardev;
>
> @@ -303,7 +304,7 @@ static void cfmakeraw (struct termios *termios_p)
>  #endif
>
>  /* like openpty() but also makes it raw; return master fd */
> -static int qemu_openpty_raw(int *aslave, char *pty_name)
> +static int qemu_openpty_raw(int *aslave, char **pty_name)
>  {
>      int amaster;
>      struct termios tty;
> @@ -324,9 +325,7 @@ static int qemu_openpty_raw(int *aslave, char
> *pty_name)
>      cfmakeraw(&tty);
>      tcsetattr(*aslave, TCSAFLUSH, &tty);
>
> -    if (pty_name) {
> -        strcpy(pty_name, q_ptsname(amaster));
> -    }
> +    *pty_name = g_strdup(q_ptsname(amaster));
>
>      return amaster;
>  }
> @@ -335,11 +334,12 @@ static bool pty_chr_open(Chardev *chr,
> ChardevBackend *backend, Error **errp)
>  {
>      PtyChardev *s;
>      int master_fd, slave_fd;
> -    char pty_name[PATH_MAX];
>      char *name;
>      char *path = backend->u.pty.data->path;
>
> -    master_fd = qemu_openpty_raw(&slave_fd, pty_name);
> +    s = PTY_CHARDEV(chr);
> +
> +    master_fd = qemu_openpty_raw(&slave_fd, &s->pty_name);
>      if (master_fd < 0) {
>          error_setg_errno(errp, errno, "Failed to create PTY");
>          return false;
> @@ -351,11 +351,10 @@ static bool pty_chr_open(Chardev *chr,
> ChardevBackend *backend, Error **errp)
>          return false;
>      }
>
> -    chr->filename = g_strdup_printf("pty:%s", pty_name);
> +    chr->filename = g_strdup_printf("pty:%s", s->pty_name);
>      qemu_printf("char device redirected to %s (label %s)\n",
> -                pty_name, chr->label);
> +                s->pty_name, chr->label);
>
> -    s = PTY_CHARDEV(chr);
>      s->ioc = QIO_CHANNEL(qio_channel_file_new_fd(master_fd));
>      name = g_strdup_printf("chardev-pty-%s", chr->label);
>      qio_channel_set_name(s->ioc, name);
> @@ -364,7 +363,7 @@ static bool pty_chr_open(Chardev *chr, ChardevBackend
> *backend, Error **errp)
>
>      /* create symbolic link */
>      if (path) {
> -        int res = symlink(pty_name, path);
> +        int res = symlink(s->pty_name, path);
>
>          if (res != 0) {
>              error_setg_errno(errp, errno, "Failed to create PTY symlink");
> --
> 2.48.1
>
>

Reply via email to