mirror of
https://gitlab.com/qemu-project/qemu.git
synced 2026-10-28 16:14:47 +08:00
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:
1 parent
8c84f31ace
commit
1116f5176e
1 file changed
+9
-10
+9
-10
@@ -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");
|
||||
|
||||
Reference in new issue
Block a user