Revision e68c5958 qemu-char.c
b/qemu-char.c | ||
---|---|---|
1157 | 1157 |
qemu_chr_be_event(chr, CHR_EVENT_CLOSED); |
1158 | 1158 |
} |
1159 | 1159 |
|
1160 |
static CharDriverState *qemu_chr_open_pty(QemuOpts *opts) |
|
1160 |
static CharDriverState *qemu_chr_open_pty(const char *id, |
|
1161 |
ChardevReturn *ret) |
|
1161 | 1162 |
{ |
1162 | 1163 |
CharDriverState *chr; |
1163 | 1164 |
PtyCharDriver *s; |
1164 | 1165 |
struct termios tty; |
1165 |
const char *label; |
|
1166 |
int master_fd, slave_fd, len; |
|
1166 |
int master_fd, slave_fd; |
|
1167 | 1167 |
#if defined(__OpenBSD__) || defined(__DragonFly__) |
1168 | 1168 |
char pty_name[PATH_MAX]; |
1169 | 1169 |
#define q_ptsname(x) pty_name |
... | ... | |
1184 | 1184 |
|
1185 | 1185 |
chr = g_malloc0(sizeof(CharDriverState)); |
1186 | 1186 |
|
1187 |
len = strlen(q_ptsname(master_fd)) + 5; |
|
1188 |
chr->filename = g_malloc(len); |
|
1189 |
snprintf(chr->filename, len, "pty:%s", q_ptsname(master_fd)); |
|
1190 |
qemu_opt_set(opts, "path", q_ptsname(master_fd)); |
|
1187 |
chr->filename = g_strdup_printf("pty:%s", q_ptsname(master_fd)); |
|
1188 |
ret->pty = g_strdup(q_ptsname(master_fd)); |
|
1189 |
ret->has_pty = true; |
|
1191 | 1190 |
|
1192 |
label = qemu_opts_id(opts); |
|
1193 |
fprintf(stderr, "char device redirected to %s%s%s%s\n", |
|
1194 |
q_ptsname(master_fd), |
|
1195 |
label ? " (label " : "", |
|
1196 |
label ? label : "", |
|
1197 |
label ? ")" : ""); |
|
1191 |
fprintf(stderr, "char device redirected to %s (label %s)\n", |
|
1192 |
q_ptsname(master_fd), id); |
|
1198 | 1193 |
|
1199 | 1194 |
s = g_malloc0(sizeof(PtyCharDriver)); |
1200 | 1195 |
chr->opaque = s; |
... | ... | |
3687 | 3682 |
break; |
3688 | 3683 |
#ifdef HAVE_CHARDEV_TTY |
3689 | 3684 |
case CHARDEV_BACKEND_KIND_PTY: |
3690 |
{ |
|
3691 |
/* qemu_chr_open_pty sets "path" in opts */ |
|
3692 |
QemuOpts *opts; |
|
3693 |
opts = qemu_opts_create_nofail(qemu_find_opts("chardev")); |
|
3694 |
chr = qemu_chr_open_pty(opts); |
|
3695 |
ret->pty = g_strdup(qemu_opt_get(opts, "path")); |
|
3696 |
ret->has_pty = true; |
|
3697 |
qemu_opts_del(opts); |
|
3685 |
chr = qemu_chr_open_pty(id, ret); |
|
3698 | 3686 |
break; |
3699 |
} |
|
3700 | 3687 |
#endif |
3701 | 3688 |
case CHARDEV_BACKEND_KIND_NULL: |
3702 | 3689 |
chr = qemu_chr_open_null(); |
... | ... | |
3776 | 3763 |
qemu_chr_parse_parallel); |
3777 | 3764 |
register_char_driver_qapi("parport", CHARDEV_BACKEND_KIND_PARALLEL, |
3778 | 3765 |
qemu_chr_parse_parallel); |
3766 |
register_char_driver_qapi("pty", CHARDEV_BACKEND_KIND_PTY, NULL); |
|
3779 | 3767 |
#ifdef _WIN32 |
3780 | 3768 |
register_char_driver("pipe", qemu_chr_open_win_pipe); |
3781 | 3769 |
register_char_driver("console", qemu_chr_open_win_con); |
3782 | 3770 |
#else |
3783 | 3771 |
register_char_driver("pipe", qemu_chr_open_pipe); |
3784 | 3772 |
#endif |
3785 |
#ifdef HAVE_CHARDEV_TTY |
|
3786 |
register_char_driver("pty", qemu_chr_open_pty); |
|
3787 |
#endif |
|
3788 | 3773 |
} |
3789 | 3774 |
|
3790 | 3775 |
type_init(register_types); |
Also available in: Unified diff