git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git]
/
lunaix-os
/
kernel
/
fs
/
twimap.c
diff --git
a/lunaix-os/kernel/fs/twimap.c
b/lunaix-os/kernel/fs/twimap.c
index 6b74ad33686661f0bf805cbbd03d3766e016ebc9..dff2de3f769569b0c6582e0193dc05d1ea148a90 100644
(file)
--- a/
lunaix-os/kernel/fs/twimap.c
+++ b/
lunaix-os/kernel/fs/twimap.c
@@
-6,9
+6,9
@@
#include <klibc/strfmt.h>
#include <klibc/string.h>
#include <klibc/strfmt.h>
#include <klibc/string.h>
-#include <sys/mm/
mempart
.h>
+#include <sys/mm/
pagetable
.h>
-#define TWIMAP_BUFFER_SIZE
MEM_PAG
E
+#define TWIMAP_BUFFER_SIZE
PAGE_SIZ
E
void
__twimap_default_reset(struct twimap* map)
void
__twimap_default_reset(struct twimap* map)
@@
-32,23
+32,29
@@
__twimap_file_read(struct v_inode* inode, void* buf, size_t len, size_t fpos)
static int
__twimap_file_read_page(struct v_inode* inode, void* buf, size_t fpos)
{
static int
__twimap_file_read_page(struct v_inode* inode, void* buf, size_t fpos)
{
- return __twimap_file_read(inode, buf,
MEM_PAG
E, fpos);
+ return __twimap_file_read(inode, buf,
PAGE_SIZ
E, fpos);
}
int
twimap_read(struct twimap* map, void* buffer, size_t len, size_t fpos)
{
map->buffer = valloc(TWIMAP_BUFFER_SIZE);
}
int
twimap_read(struct twimap* map, void* buffer, size_t len, size_t fpos)
{
map->buffer = valloc(TWIMAP_BUFFER_SIZE);
+ map->size_acc = 0;
+
map->reset(map);
// FIXME what if TWIMAP_BUFFER_SIZE is not big enough?
map->reset(map);
// FIXME what if TWIMAP_BUFFER_SIZE is not big enough?
- size_t pos =
0
;
-
do
{
+ size_t pos =
map->size_acc
;
+
while (pos <= fpos)
{
map->size_acc = 0;
map->read(map);
pos += map->size_acc;
map->size_acc = 0;
map->read(map);
pos += map->size_acc;
- } while (pos <= fpos && map->go_next(map));
+
+ if (!map->go_next(map)) {
+ break;
+ }
+ }
if (pos <= fpos) {
vfree(map->buffer);
if (pos <= fpos) {
vfree(map->buffer);