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 <vsementsov@yandex-team.ru>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20260115144606.233252-8-vsementsov@yandex-team.ru>
This commit is contained in:
Vladimir Sementsov-Ogievskiy authored and Marc-André Lureau committed 2026-02-13 10:00:01 +01:00
1 parent 8c84f31ace
commit 1116f5176e
1 file changed
+9 -10
+9 -10
View File
@@ -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");