|
@@ -461,29 +461,14 @@ void qmp_guest_file_close(int64_t handle, Error **errp)
|
|
g_free(gfh);
|
|
g_free(gfh);
|
|
}
|
|
}
|
|
|
|
|
|
-struct GuestFileRead *qmp_guest_file_read(int64_t handle, bool has_count,
|
|
|
|
- int64_t count, Error **errp)
|
|
|
|
|
|
+GuestFileRead *guest_file_read_unsafe(GuestFileHandle *gfh,
|
|
|
|
+ int64_t count, Error **errp)
|
|
{
|
|
{
|
|
- GuestFileHandle *gfh = guest_file_handle_find(handle, errp);
|
|
|
|
GuestFileRead *read_data = NULL;
|
|
GuestFileRead *read_data = NULL;
|
|
guchar *buf;
|
|
guchar *buf;
|
|
- FILE *fh;
|
|
|
|
|
|
+ FILE *fh = gfh->fh;
|
|
size_t read_count;
|
|
size_t read_count;
|
|
|
|
|
|
- if (!gfh) {
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!has_count) {
|
|
|
|
- count = QGA_READ_COUNT_DEFAULT;
|
|
|
|
- } else if (count < 0 || count >= UINT32_MAX) {
|
|
|
|
- error_setg(errp, "value '%" PRId64 "' is invalid for argument count",
|
|
|
|
- count);
|
|
|
|
- return NULL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- fh = gfh->fh;
|
|
|
|
-
|
|
|
|
/* explicitly flush when switching from writing to reading */
|
|
/* explicitly flush when switching from writing to reading */
|
|
if (gfh->state == RW_STATE_WRITING) {
|
|
if (gfh->state == RW_STATE_WRITING) {
|
|
int ret = fflush(fh);
|
|
int ret = fflush(fh);
|
|
@@ -498,7 +483,6 @@ struct GuestFileRead *qmp_guest_file_read(int64_t handle, bool has_count,
|
|
read_count = fread(buf, 1, count, fh);
|
|
read_count = fread(buf, 1, count, fh);
|
|
if (ferror(fh)) {
|
|
if (ferror(fh)) {
|
|
error_setg_errno(errp, errno, "failed to read file");
|
|
error_setg_errno(errp, errno, "failed to read file");
|
|
- slog("guest-file-read failed, handle: %" PRId64, handle);
|
|
|
|
} else {
|
|
} else {
|
|
buf[read_count] = 0;
|
|
buf[read_count] = 0;
|
|
read_data = g_new0(GuestFileRead, 1);
|
|
read_data = g_new0(GuestFileRead, 1);
|