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