projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add timer support for ATMega 1280 (contributed by Fabio Bizzi)
[bertos.git]
/
bertos
/
io
/
kblock_file.c
diff --git
a/bertos/io/kblock_file.c
b/bertos/io/kblock_file.c
index ae680815ade31890bcd18693a2f3bf405819e18a..cd18431d101c6b141804d0651a721d2f05efa7b2 100644
(file)
--- a/
bertos/io/kblock_file.c
+++ b/
bertos/io/kblock_file.c
@@
-79,13
+79,13
@@
static size_t kblockfile_writeBuf(struct KBlock *b, const void *buf, size_t offs
return size;
}
return size;
}
-static
int kblockfile_writeBlock(struct KBlock *b, block_idx_t index, const void *buf
)
+static
size_t kblockfile_writeDirect(struct KBlock *b, block_idx_t index, const void *buf, size_t offset, size_t size
)
{
KBlockFile *f = KBLOCKFILE_CAST(b);
ASSERT(buf);
ASSERT(index < b->blk_cnt);
{
KBlockFile *f = KBLOCKFILE_CAST(b);
ASSERT(buf);
ASSERT(index < b->blk_cnt);
- fseek(f->fp, index * b->blk_size, SEEK_SET);
- return
(fwrite(f->b.priv.buf, 1, b->blk_size, f->fp) == b->blk_size) ? 0 : EOF
;
+ fseek(f->fp, index * b->blk_size
+ offset
, SEEK_SET);
+ return
fwrite(buf, 1, size, f->fp)
;
}
static int kblockfile_error(struct KBlock *b)
}
static int kblockfile_error(struct KBlock *b)
@@
-119,7
+119,7
@@
static const KBlockVTable kblockfile_hwbuffered_vt =
.writeBuf = kblockfile_writeBuf,
.load = kblockfile_load,
.store = kblockfile_store,
.writeBuf = kblockfile_writeBuf,
.load = kblockfile_load,
.store = kblockfile_store,
-
+
.error = kblockfile_error,
.clearerr = kblockfile_claererr,
.close = kblockfile_close,
.error = kblockfile_error,
.clearerr = kblockfile_claererr,
.close = kblockfile_close,
@@
-128,13
+128,13
@@
static const KBlockVTable kblockfile_hwbuffered_vt =
static const KBlockVTable kblockfile_swbuffered_vt =
{
.readDirect = kblockfile_readDirect,
static const KBlockVTable kblockfile_swbuffered_vt =
{
.readDirect = kblockfile_readDirect,
- .write
Block =kblockfile_writeBlock
,
-
+ .write
Direct =kblockfile_writeDirect
,
+
.readBuf = kblock_swReadBuf,
.writeBuf = kblock_swWriteBuf,
.load = kblock_swLoad,
.store = kblock_swStore,
.readBuf = kblock_swReadBuf,
.writeBuf = kblock_swWriteBuf,
.load = kblock_swLoad,
.store = kblock_swStore,
-
+
.error = kblockfile_error,
.clearerr = kblockfile_claererr,
.close = kblockfile_close,
.error = kblockfile_error,
.clearerr = kblockfile_claererr,
.close = kblockfile_close,
@@
-143,7
+143,7
@@
static const KBlockVTable kblockfile_swbuffered_vt =
static const KBlockVTable kblockfile_unbuffered_vt =
{
.readDirect = kblockfile_readDirect,
static const KBlockVTable kblockfile_unbuffered_vt =
{
.readDirect = kblockfile_readDirect,
- .write
Block =kblockfile_writeBlock
,
+ .write
Direct =kblockfile_writeDirect
,
.error = kblockfile_error,
.clearerr = kblockfile_claererr,
.error = kblockfile_error,
.clearerr = kblockfile_claererr,
@@
-165,7
+165,8
@@
void kblockfile_init(KBlockFile *f, FILE *fp, bool hwbuf, void *buf, size_t bloc
f->fp = fp;
f->b.blk_size = block_size;
f->b.blk_cnt = block_count;
f->fp = fp;
f->b.blk_size = block_size;
f->b.blk_cnt = block_count;
-
+
+ f->b.priv.flags |= KB_PARTIAL_WRITE;
if (buf)
{
f->b.priv.flags |= KB_BUFFERED;
if (buf)
{
f->b.priv.flags |= KB_BUFFERED;