From: Vladimir Sementsov-Ogievskiy Date: Thu, 15 Jan 2026 14:46:01 +0000 (+0300) Subject: chardev/char-pty: store pty_name into PtyChardev state X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1116f5176e7a2f501f43d725757fa0181266862f;p=thirdparty%2Fqemu.git chardev/char-pty: store pty_name into PtyChardev state We'll use it in following commit. Note the bonus: stop use blind strcpy(). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Marc-André Lureau Message-Id: <20260115144606.233252-8-vsementsov@yandex-team.ru> --- 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");