int connected;
GSource *timer_src;
char *path;
+ char *pty_name;
};
typedef struct PtyChardev PtyChardev;
#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;
cfmakeraw(&tty);
tcsetattr(*aslave, TCSAFLUSH, &tty);
- if (pty_name) {
- strcpy(pty_name, q_ptsname(amaster));
- }
+ *pty_name = g_strdup(q_ptsname(amaster));
return amaster;
}
{
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;
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);
/* 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");