We'll use it in following commit. Note the bonus: stop use blind strcpy().
Signed-off-by: Vladimir Sementsov-Ogievskiy <[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
