Revision 666daa68 monitor.c

b/monitor.c
38 38
#include "monitor.h"
39 39
#include "readline.h"
40 40
#include "console.h"
41
#include "block.h"
41
#include "blockdev.h"
42 42
#include "audio/audio.h"
43 43
#include "disas.h"
44 44
#include "balloon.h"
......
530 530
    help_cmd(mon, qdict_get_try_str(qdict, "name"));
531 531
}
532 532

  
533
static void do_commit(Monitor *mon, const QDict *qdict)
534
{
535
    int all_devices;
536
    DriveInfo *dinfo;
537
    const char *device = qdict_get_str(qdict, "device");
538

  
539
    all_devices = !strcmp(device, "all");
540
    QTAILQ_FOREACH(dinfo, &drives, next) {
541
        if (!all_devices)
542
            if (strcmp(bdrv_get_device_name(dinfo->bdrv), device))
543
                continue;
544
        bdrv_commit(dinfo->bdrv);
545
    }
546
}
547

  
548 533
static void user_monitor_complete(void *opaque, QObject *ret_data)
549 534
{
550 535
    MonitorCompletionData *data = (MonitorCompletionData *)opaque; 
......
949 934
    return 0;
950 935
}
951 936

  
952
static int eject_device(Monitor *mon, BlockDriverState *bs, int force)
953
{
954
    if (bdrv_is_inserted(bs)) {
955
        if (!force) {
956
            if (!bdrv_is_removable(bs)) {
957
                qerror_report(QERR_DEVICE_NOT_REMOVABLE,
958
                               bdrv_get_device_name(bs));
959
                return -1;
960
            }
961
            if (bdrv_is_locked(bs)) {
962
                qerror_report(QERR_DEVICE_LOCKED, bdrv_get_device_name(bs));
963
                return -1;
964
            }
965
        }
966
        bdrv_close(bs);
967
    }
968
    return 0;
969
}
970

  
971
static int do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data)
972
{
973
    BlockDriverState *bs;
974
    int force = qdict_get_int(qdict, "force");
975
    const char *filename = qdict_get_str(qdict, "device");
976

  
977
    bs = bdrv_find(filename);
978
    if (!bs) {
979
        qerror_report(QERR_DEVICE_NOT_FOUND, filename);
980
        return -1;
981
    }
982
    return eject_device(mon, bs, force);
983
}
984

  
985
static int do_block_set_passwd(Monitor *mon, const QDict *qdict,
986
                                QObject **ret_data)
987
{
988
    BlockDriverState *bs;
989
    int err;
990

  
991
    bs = bdrv_find(qdict_get_str(qdict, "device"));
992
    if (!bs) {
993
        qerror_report(QERR_DEVICE_NOT_FOUND, qdict_get_str(qdict, "device"));
994
        return -1;
995
    }
996

  
997
    err = bdrv_set_key(bs, qdict_get_str(qdict, "password"));
998
    if (err == -EINVAL) {
999
        qerror_report(QERR_DEVICE_NOT_ENCRYPTED, bdrv_get_device_name(bs));
1000
        return -1;
1001
    } else if (err < 0) {
1002
        qerror_report(QERR_INVALID_PASSWORD);
1003
        return -1;
1004
    }
1005

  
1006
    return 0;
1007
}
1008

  
1009
static int do_change_block(Monitor *mon, const char *device,
1010
                           const char *filename, const char *fmt)
1011
{
1012
    BlockDriverState *bs;
1013
    BlockDriver *drv = NULL;
1014
    int bdrv_flags;
1015

  
1016
    bs = bdrv_find(device);
1017
    if (!bs) {
1018
        qerror_report(QERR_DEVICE_NOT_FOUND, device);
1019
        return -1;
1020
    }
1021
    if (fmt) {
1022
        drv = bdrv_find_whitelisted_format(fmt);
1023
        if (!drv) {
1024
            qerror_report(QERR_INVALID_BLOCK_FORMAT, fmt);
1025
            return -1;
1026
        }
1027
    }
1028
    if (eject_device(mon, bs, 0) < 0) {
1029
        return -1;
1030
    }
1031
    bdrv_flags = bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM ? 0 : BDRV_O_RDWR;
1032
    if (bdrv_open(bs, filename, bdrv_flags, drv) < 0) {
1033
        qerror_report(QERR_OPEN_FILE_FAILED, filename);
1034
        return -1;
1035
    }
1036
    return monitor_read_bdrv_key_start(mon, bs, NULL, NULL);
1037
}
1038

  
1039 937
static int change_vnc_password(const char *password)
1040 938
{
1041 939
    if (vnc_display_password(NULL, password) < 0) {

Also available in: Unified diff