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