Revision 0bbc47bb monitor.c

b/monitor.c
1027 1027
    return 0;
1028 1028
}
1029 1029

  
1030
static void do_change_block(Monitor *mon, const char *device,
1031
                            const char *filename, const char *fmt)
1030
static int do_change_block(Monitor *mon, const char *device,
1031
                           const char *filename, const char *fmt)
1032 1032
{
1033 1033
    BlockDriverState *bs;
1034 1034
    BlockDriver *drv = NULL;
......
1036 1036
    bs = bdrv_find(device);
1037 1037
    if (!bs) {
1038 1038
        qemu_error_new(QERR_DEVICE_NOT_FOUND, device);
1039
        return;
1039
        return -1;
1040 1040
    }
1041 1041
    if (fmt) {
1042 1042
        drv = bdrv_find_whitelisted_format(fmt);
1043 1043
        if (!drv) {
1044 1044
            qemu_error_new(QERR_INVALID_BLOCK_FORMAT, fmt);
1045
            return;
1045
            return -1;
1046 1046
        }
1047 1047
    }
1048
    if (eject_device(mon, bs, 0) < 0)
1049
        return;
1050
    bdrv_open2(bs, filename, BDRV_O_RDWR, drv);
1051
    monitor_read_bdrv_key_start(mon, bs, NULL, NULL);
1048
    if (eject_device(mon, bs, 0) < 0) {
1049
        return -1;
1050
    }
1051
    if (bdrv_open2(bs, filename, BDRV_O_RDWR, drv) < 0) {
1052
        return -1;
1053
    }
1054
    return monitor_read_bdrv_key_start(mon, bs, NULL, NULL);
1052 1055
}
1053 1056

  
1054
static void change_vnc_password(const char *password)
1057
static int change_vnc_password(const char *password)
1055 1058
{
1056
    if (vnc_display_password(NULL, password) < 0)
1059
    if (vnc_display_password(NULL, password) < 0) {
1057 1060
        qemu_error_new(QERR_SET_PASSWD_FAILED);
1061
        return -1;
1062
    }
1058 1063

  
1064
    return 0;
1059 1065
}
1060 1066

  
1061 1067
static void change_vnc_password_cb(Monitor *mon, const char *password,
......
1065 1071
    monitor_read_command(mon, 1);
1066 1072
}
1067 1073

  
1068
static void do_change_vnc(Monitor *mon, const char *target, const char *arg)
1074
static int do_change_vnc(Monitor *mon, const char *target, const char *arg)
1069 1075
{
1070 1076
    if (strcmp(target, "passwd") == 0 ||
1071 1077
        strcmp(target, "password") == 0) {
......
1073 1079
            char password[9];
1074 1080
            strncpy(password, arg, sizeof(password));
1075 1081
            password[sizeof(password) - 1] = '\0';
1076
            change_vnc_password(password);
1082
            return change_vnc_password(password);
1077 1083
        } else {
1078
            monitor_read_password(mon, change_vnc_password_cb, NULL);
1084
            return monitor_read_password(mon, change_vnc_password_cb, NULL);
1079 1085
        }
1080 1086
    } else {
1081
        if (vnc_display_open(NULL, target) < 0)
1087
        if (vnc_display_open(NULL, target) < 0) {
1082 1088
            qemu_error_new(QERR_VNC_SERVER_FAILED, target);
1089
            return -1;
1090
        }
1083 1091
    }
1092

  
1093
    return 0;
1084 1094
}
1085 1095

  
1086 1096
/**
1087 1097
 * do_change(): Change a removable medium, or VNC configuration
1088 1098
 */
1089
static void do_change(Monitor *mon, const QDict *qdict, QObject **ret_data)
1099
static int do_change(Monitor *mon, const QDict *qdict, QObject **ret_data)
1090 1100
{
1091 1101
    const char *device = qdict_get_str(qdict, "device");
1092 1102
    const char *target = qdict_get_str(qdict, "target");
1093 1103
    const char *arg = qdict_get_try_str(qdict, "arg");
1104
    int ret;
1105

  
1094 1106
    if (strcmp(device, "vnc") == 0) {
1095
        do_change_vnc(mon, target, arg);
1107
        ret = do_change_vnc(mon, target, arg);
1096 1108
    } else {
1097
        do_change_block(mon, device, target, arg);
1109
        ret = do_change_block(mon, device, target, arg);
1098 1110
    }
1111

  
1112
    return ret;
1099 1113
}
1100 1114

  
1101 1115
static void do_screen_dump(Monitor *mon, const QDict *qdict)
......
4554 4568
    monitor_read_command(mon, 1);
4555 4569
}
4556 4570

  
4557
void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
4558
                                 BlockDriverCompletionFunc *completion_cb,
4559
                                 void *opaque)
4571
int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
4572
                                BlockDriverCompletionFunc *completion_cb,
4573
                                void *opaque)
4560 4574
{
4561 4575
    int err;
4562 4576

  
4563 4577
    if (!bdrv_key_required(bs)) {
4564 4578
        if (completion_cb)
4565 4579
            completion_cb(opaque, 0);
4566
        return;
4580
        return 0;
4567 4581
    }
4568 4582

  
4569 4583
    if (monitor_ctrl_mode(mon)) {
4570 4584
        qemu_error_new(QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs));
4571
        return;
4585
        return -1;
4572 4586
    }
4573 4587

  
4574 4588
    monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs),
......
4581 4595

  
4582 4596
    if (err && completion_cb)
4583 4597
        completion_cb(opaque, err);
4598

  
4599
    return err;
4584 4600
}
4585 4601

  
4586 4602
typedef struct QemuErrorSink QemuErrorSink;

Also available in: Unified diff