projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sam3: add register definitions for RSTC and EMAC
[bertos.git]
/
bertos
/
emul
/
kfile_posix.c
diff --git
a/bertos/emul/kfile_posix.c
b/bertos/emul/kfile_posix.c
index 1f09aaff7062dd461856aee0ecaa6a7e21ed70cf..d196c6aa7eadb5b23fb4d0b42c5a0341eae416b7 100644
(file)
--- a/
bertos/emul/kfile_posix.c
+++ b/
bertos/emul/kfile_posix.c
@@
-32,7
+32,6
@@
*
* \brief KFile interface implementation in Posix systems.
*
*
* \brief KFile interface implementation in Posix systems.
*
- * \version $Id$
* \author Luca Ottaviano <lottaviano@develer.com>
*/
* \author Luca Ottaviano <lottaviano@develer.com>
*/
@@
-42,13
+41,18
@@
static size_t kfile_posix_read(struct KFile *_fd, void *buf, size_t size)
{
KFilePosix *fd = KFILEPOSIX_CAST(_fd);
static size_t kfile_posix_read(struct KFile *_fd, void *buf, size_t size)
{
KFilePosix *fd = KFILEPOSIX_CAST(_fd);
- return fread(buf, sizeof(uint8_t), size, fd->fp);
+ size_t len = fread(buf, sizeof(uint8_t), size, fd->fp);
+ fd->fd.seek_pos += len;
+ return len;
}
static size_t kfile_posix_write(struct KFile *_fd, const void *buf, size_t size)
{
KFilePosix *fd = KFILEPOSIX_CAST(_fd);
}
static size_t kfile_posix_write(struct KFile *_fd, const void *buf, size_t size)
{
KFilePosix *fd = KFILEPOSIX_CAST(_fd);
- return fwrite(buf, sizeof(uint8_t), size, fd->fp);
+ size_t len = fwrite(buf, sizeof(uint8_t), size, fd->fp);
+ fd->fd.seek_pos += len;
+ fd->fd.size = MAX(fd->fd.size, fd->fd.seek_pos);
+ return len;
}
static kfile_off_t kfile_posix_seek(struct KFile *_fd, kfile_off_t offset, KSeekMode whence)
}
static kfile_off_t kfile_posix_seek(struct KFile *_fd, kfile_off_t offset, KSeekMode whence)
@@
-74,7
+78,8
@@
static kfile_off_t kfile_posix_seek(struct KFile *_fd, kfile_off_t offset, KSeek
if (err)
return err;
if (err)
return err;
- return ftell(fd->fp);
+ fd->fd.seek_pos = ftell(fd->fp);
+ return fd->fd.seek_pos;
}
static int kfile_posix_close(struct KFile *_fd)
}
static int kfile_posix_close(struct KFile *_fd)
@@
-100,5
+105,8
@@
FILE *kfile_posix_init(KFilePosix *file, const char *filename, const char *mode)
file->fd.flush = kfile_posix_flush;
file->fp = fopen(filename, mode);
file->fd.flush = kfile_posix_flush;
file->fp = fopen(filename, mode);
+ fseek(file->fp, 0, SEEK_END);
+ file->fd.size = ftell(file->fp);
+ fseek(file->fp, 0, SEEK_SET);
return file->fp;
}
return file->fp;
}