Revision b412eb61 net/slirp.c

b/net/slirp.c
626 626

  
627 627
    fwd = g_malloc(sizeof(struct GuestFwd));
628 628
    snprintf(buf, sizeof(buf), "guestfwd.tcp.%d", port);
629
    fwd->hd = qemu_chr_new(buf, p, NULL);
630
    if (!fwd->hd) {
631
        error_report("could not open guest forwarding device '%s'", buf);
632
        g_free(fwd);
633
        return -1;
634
    }
635 629

  
636
    if (slirp_add_exec(s->slirp, 3, fwd->hd, &server, port) < 0) {
637
        error_report("conflicting/invalid host:port in guest forwarding "
638
                     "rule '%s'", config_str);
639
        g_free(fwd);
640
        return -1;
641
    }
642
    fwd->server = server;
643
    fwd->port = port;
644
    fwd->slirp = s->slirp;
630
    if ((strlen(p) > 4) && !strncmp(p, "cmd:", 4)) {
631
        if (slirp_add_exec(s->slirp, 0, &p[4], &server, port) < 0) {
632
            error_report("conflicting/invalid host:port in guest forwarding "
633
                         "rule '%s'", config_str);
634
            g_free(fwd);
635
            return -1;
636
        }
637
    } else {
638
        fwd->hd = qemu_chr_new(buf, p, NULL);
639
        if (!fwd->hd) {
640
            error_report("could not open guest forwarding device '%s'", buf);
641
            g_free(fwd);
642
            return -1;
643
        }
644

  
645
        if (slirp_add_exec(s->slirp, 3, fwd->hd, &server, port) < 0) {
646
            error_report("conflicting/invalid host:port in guest forwarding "
647
                         "rule '%s'", config_str);
648
            g_free(fwd);
649
            return -1;
650
        }
651
        fwd->server = server;
652
        fwd->port = port;
653
        fwd->slirp = s->slirp;
645 654

  
646
    qemu_chr_add_handlers(fwd->hd, guestfwd_can_read, guestfwd_read,
647
                          NULL, fwd);
655
        qemu_chr_add_handlers(fwd->hd, guestfwd_can_read, guestfwd_read,
656
                              NULL, fwd);
657
    }
648 658
    return 0;
649 659

  
650 660
 fail_syntax:

Also available in: Unified diff