X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=misc%2Fnetwork_servers%2Fv3_nbd%2Fiso.cc;h=31faa85d1b28066efc56023808a5f2c73bd1ef9a;hp=2ca53faf6a21d43e2bc558257e30e23b317a3468;hb=2b1dfc3d1281140e4bcc1ea963ae34e5eef9c8b8;hpb=c0a5974089157e1a5ea18ea443fab587c577296a diff --git a/misc/network_servers/v3_nbd/iso.cc b/misc/network_servers/v3_nbd/iso.cc index 2ca53fa..31faa85 100644 --- a/misc/network_servers/v3_nbd/iso.cc +++ b/misc/network_servers/v3_nbd/iso.cc @@ -26,7 +26,9 @@ iso_image::iso_image(string & filename) : v3_disk(filename){ - this->f = fopen(filename.c_str(), "w+"); + this->f = fopen(filename.c_str(), "r"); + + this->get_capacity(); } iso_image::~iso_image() { @@ -42,16 +44,29 @@ off_t iso_image::get_capacity() { -int iso_image::read(unsigned char * buf, unsigned long long offset, int length) { - - return -1; +unsigned int iso_image::read(unsigned char * buf, off_t offset, int length) { + int total_bytes = length; + int bytes_read = 0; + + fseeko(this->f, offset, SEEK_SET); + + while (bytes_read < total_bytes) { + int tmp_bytes = fread(buf, 1, length, this->f); + + if (tmp_bytes == 0) { + break; + } + bytes_read += tmp_bytes; + } + + return bytes_read; } -int iso_image::write(unsigned char * buf, unsigned long long offset, int length) { +unsigned int iso_image::write(unsigned char * buf, off_t offset, int length) { - return -1; + return 0; } void iso_image::attach() {