On Thu, Dec 4, 2025 at 7:42 PM Vladimir Sementsov-Ogievskiy <
vsementsov@yandex-team.ru> wrote:
> We'll use it in following commit.
>
> Note the bonus: stop use blind strcpy().
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> 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
>
>