make changes configurable through io_semantics()

master-31012017
Frank Freihube 2016-04-29 07:56:35 +02:00
parent 7ba5b0d150
commit 5bd7fc86c3
2 changed files with 22 additions and 2 deletions

View File

@ -1098,9 +1098,20 @@ cfs_read(int fd, void *buf, unsigned size)
fdp = &coffee_fd_set[fd];
file = fdp->file;
while(fdp->offset + size > file->end) {
((char*)buf)[--size] = 0;
#if COFFEE_IO_SEMANTICS
if(fdp->io_flags & CFS_COFFEE_IO_FIRM_SIZE) {
while(fdp->offset + size > file->end) {
((char*)buf)[--size] = 0;
}
} else {
#endif
if(fdp->offset + size > file->end) {
size = file->end - fdp->offset;
}
#if COFFEE_IO_SEMANTICS
}
#endif
/* If the file is not modified, read directly from the file extent. */
if(!FILE_MODIFIED(file)) {

View File

@ -63,6 +63,15 @@
*/
#define CFS_COFFEE_IO_FIRM_SIZE 0x2
/**
* Instruct Coffee to set unused bytes in the destination buffer to zero.
* Trailing zeros may cause a wrong file size, this option ensures that
* the corresponding bytes get set, so Coffee does not read unexpected data.
*
* \sa cfs_coffee_set_io_semantics()
*/
#define CFS_COFFEE_IO_ENSURE_READ_LENGTH 0x4
/**
* \file
* Header for the Coffee file system.