Hi, when reading past the end of a storeio provided file, you get EIO because offset is equal to the size of the underlying store, but the only offset check is in dev_rw:
if (offs < 0 || offs > dev->store->size) return EINVAL; else if (offs + len > dev->store->size) len = dev->store->size - offs; First, it is strange that offs = dev->store->size is explicitely allowed. Note that in this case, len will be 0, and storeio is doing a lot of unnecessary work. It will eventually fail in store_read because it can not find a store run for suhc large an offset: addr = store_find_first_run (store, addr, &run, &runs_end, &base, &index); if (addr < 0 || run->start < 0) return EIO; /* Reading from a hole. */ Now, I have looked into it a bit, but I am unsure where the guard should be put. All those layers confuse me a bit. BTW, I have fixed a couple of bugs in the concat store. It has never worked! Now it does, and encoding/decoding, too. Other stores that don't have an open function (mvol, ileave) can not work anymore, too, because the argp parser checks that the store has an open function. Should we add open functions for all the stores lacking them? Thanks, Marcus -- `Rhubarb is no Egyptian god.' Debian http://www.debian.org [EMAIL PROTECTED] Marcus Brinkmann GNU http://www.gnu.org [EMAIL PROTECTED] [EMAIL PROTECTED] http://www.marcus-brinkmann.de _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd