On Sun, Sep 25 18:02, Kevin Wolf wrote: > * libc: lio_compat_read/write gibt jetzt wie das richtge lio_read/write > etwas negatives zurück, wenn ein Fehler aufgetreten ist und 0 bei EOF > > Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx> > --- > src/modules/include/lostio.h | 4 ++-- > src/modules/lib/lostio/client/file.c | 33 ++++++++++++++++++++++++++------- > 2 files changed, 28 insertions(+), 9 deletions(-) > > diff --git a/src/modules/include/lostio.h b/src/modules/include/lostio.h > index 4df497f..5aa580c 100644 > --- a/src/modules/include/lostio.h > +++ b/src/modules/include/lostio.h > @@ -196,11 +196,11 @@ io_resource_t* lio_compat_open(const char* filename, uint8_t attr); > int lio_compat_close(io_resource_t* io_res); > > /// Von einem Stream lesen > -size_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > +ssize_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > io_resource_t* io_res); > > /// In einen Stream schreiben > -size_t lio_compat_write(const void* src, size_t blocksize, size_t blockcount, > +ssize_t lio_compat_write(const void* src, size_t blocksize, size_t blockcount, > io_resource_t* io_res); > > /// Prueft, ob das Ende des Streams erreicht ist > diff --git a/src/modules/lib/lostio/client/file.c b/src/modules/lib/lostio/client/file.c > index 3b789b4..142de7d 100644 > --- a/src/modules/lib/lostio/client/file.c > +++ b/src/modules/lib/lostio/client/file.c > @@ -98,9 +98,16 @@ int lio_compat_close(io_resource_t* io_res) > return result; > } > > -size_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > +/** > + * Liest aus einer Ressource > + * > + * @return Anzahl gelesener Bytes; 0 bei Dateiende; negativ im Fehlerfall. > + */ Den Kommentar hier eventuell noch in den Header übernehmen? > +ssize_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > io_resource_t* io_res) > { > + size_t size; > + > io_read_request_t read_request = { > .id = io_res->id, > .blocksize = blocksize, > @@ -115,7 +122,7 @@ size_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > > response_t* resp = rpc_get_response(io_res->pid, "IO_READ ", > sizeof(read_request), (char*) &(read_request)); > - size_t size = *((size_t*) resp->data); > + size = *((size_t*) resp->data); > > // Wenn zuviele Daten gekommen sind, wird nur der notwendige Teil > // kopiert. > @@ -127,14 +134,12 @@ size_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > > free(resp->data); > free(resp); > - > - return size; > } else { > read_request.shared_mem_id = 0; > > response_t* resp = rpc_get_response(io_res->pid, "IO_READ ", > sizeof(read_request), (char*) &(read_request)); > - size_t size = resp->data_length; > + size = resp->data_length; > > // Wenn zuviele Daten gekommen sind, wird nur der notwendige Teil > // kopiert. > @@ -145,12 +150,21 @@ size_t lio_compat_read(void* dest, size_t blocksize, size_t blockcount, > > free(resp->data); > free(resp); > + } > > - return size; > + // EOF ist Rückgabewert 0, Fehler sind negativ > + if (size == 0 && !lio_compat_eof(io_res)) { > + return -1; > } > + return size; > } > > -size_t lio_compat_write(const void* src, size_t blocksize, size_t blockcount, > +/** > + * Schreibt in eine Ressource > + * > + * @return Anzahl geschriebener Bytes; negativ im Fehlerfall. > + */ Dito > +ssize_t lio_compat_write(const void* src, size_t blocksize, size_t blockcount, > io_resource_t* io_res) > { > size_t data_size = blockcount * blocksize; > @@ -184,6 +198,11 @@ size_t lio_compat_write(const void* src, size_t blocksize, size_t blockcount, > if (data_size >= 1024) { > close_shared_memory(write_request->shared_mem_id); > } > + > + // Rückgabewert für Fehler ist -1 > + if (resp == 0) { > + return -1; > + } > return resp; > } In fread() sollte man wohl zumindest aus kosmetischen Gründen (ich hoffe bis jemand das Userland auf amd64 laufen hat, ist lostio1 weg ;-)) den Typen der ret-Variable noch anpassen, wobei der auch jetzt schon korrekter ist, als vor dem Patch. ;-) Ansonsten: Acked-by: Antoine Kaufmann <toni@xxxxxxxxxx> -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
signature.asc
Description: Digital signature