}
s = qemu_mallocz(sizeof(QEMUFilePopen));
- if (!s) {
- fprintf(stderr, "qemu_popen: malloc failed\n");
- return NULL;
- }
s->popen_file = popen_file;
{
QEMUFileSocket *s = qemu_mallocz(sizeof(QEMUFileSocket));
- if (s == NULL)
- return NULL;
-
s->fd = fd;
s->file = qemu_fopen_ops(s, NULL, socket_get_buffer, socket_close, NULL);
return s->file;
QEMUFileStdio *s;
s = qemu_mallocz(sizeof(QEMUFileStdio));
- if (!s)
- return NULL;
s->outfile = fopen(filename, mode);
if (!s->outfile)
QEMUFileBdrv *s;
s = qemu_mallocz(sizeof(QEMUFileBdrv));
- if (!s)
- return NULL;
s->bs = bs;
s->base_offset = offset;
QEMUFile *f;
f = qemu_mallocz(sizeof(QEMUFile));
- if (!f)
- return NULL;
f->opaque = opaque;
f->put_buffer = put_buffer;
static int global_section_id;
se = qemu_malloc(sizeof(SaveStateEntry));
- if (!se)
- return -1;
pstrcpy(se->idstr, sizeof(se->idstr), idstr);
se->instance_id = (instance_id == -1) ? 0 : instance_id;
se->version_id = version_id;
/* Add entry */
le = qemu_mallocz(sizeof(*le));
- if (le == NULL) {
- ret = -ENOMEM;
- goto out;
- }
le->se = se;
le->section_id = section_id;
BlockDriverInfo bdi1, *bdi = &bdi1;
QEMUFile *f;
int saved_vm_running;
+ uint32_t vm_state_size;
#ifdef _WIN32
struct _timeb tb;
#else
goto the_end;
}
ret = qemu_savevm_state(f);
- sn->vm_state_size = qemu_ftell(f);
+ vm_state_size = qemu_ftell(f);
qemu_fclose(f);
if (ret < 0) {
term_printf("Error %d while writing VM\n", ret);
bdrv_get_device_name(bs1));
}
}
+ /* Write VM state size only to the image that contains the state */
+ sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
ret = bdrv_snapshot_create(bs1, sn);
if (ret < 0) {
term_printf("Error while creating snapshot on '%s'\n",
{
BlockDriverState *bs, *bs1;
BlockDriverInfo bdi1, *bdi = &bdi1;
+ QEMUSnapshotInfo sn;
QEMUFile *f;
int i, ret;
int saved_vm_running;
return;
}
+ /* Don't even try to load empty VM states */
+ ret = bdrv_snapshot_find(bs, &sn, name);
+ if ((ret >= 0) && (sn.vm_state_size == 0))
+ goto the_end;
+
/* restore the VM state */
f = qemu_fopen_bdrv(bs, bdi->vm_state_offset, 0);
if (!f) {