X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=misc%2Fnetwork_servers%2Fv3_nbd%2Fiso.cc;h=b3542a6bf042a10e3620e7c6128ba4087bb2164a;hb=2fc55bdc014038e625b3628fdaf0b60d7ebede77;hp=2ca53faf6a21d43e2bc558257e30e23b317a3468;hpb=2693dbc32a15e21af5e648f6a3d98ecd962ac029;p=palacios.git diff --git a/misc/network_servers/v3_nbd/iso.cc b/misc/network_servers/v3_nbd/iso.cc index 2ca53fa..b3542a6 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,28 @@ 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 - bytes_read, 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) { - - return -1; +unsigned int iso_image::write(unsigned char * buf, off_t offset, int length) { + return 0; } void iso_image::attach() {