static int mount_local_read (const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { char *r; size_t rsize; const size_t limit = 2 * 1024 * 1024; DECL_G (); DEBUG_CALL ("%s, %p, %zu, %ld", path, buf, size, (long) offset); /* The guestfs protocol limits size to somewhere over 2MB. We just * reduce the requested size here accordingly and push the problem * up to every user. http://www.jwz.org/doc/worse-is-better.html */ if (size > limit) size = limit; r = guestfs_pread (g, path, size, offset, &rsize); if (r == NULL) RETURN_ERRNO; /* This should never happen, but at least it stops us overflowing * the output buffer if it does happen. */ if (rsize > size) rsize = size; memcpy (buf, r, rsize); free (r); return rsize; }
static int fg_read (const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, (long) offset); char *r; size_t rsize; if (verbose) fprintf (stderr, "fg_read: %s: size %zu offset %ju\n", path, size, offset); /* The guestfs protocol limits size to somewhere over 2MB. We just * reduce the requested size here accordingly and push the problem * up to every user. http://www.jwz.org/doc/worse-is-better.html */ const size_t limit = 2 * 1024 * 1024; if (size > limit) size = limit; r = guestfs_pread (g, path, size, offset, &rsize); if (r == NULL) return error (); /* This should never happen, but at least it stops us overflowing * the output buffer if it does happen. */ if (rsize > size) rsize = size; memcpy (buf, r, rsize); free (r); return rsize; }