summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs')
-rw-r--r--cpukit/libfs/src/dosfs/msdos_file.c7
-rw-r--r--cpukit/libfs/src/imfs/memfile.c11
-rw-r--r--cpukit/libfs/src/nfsclient/src/nfs.c6
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c7
4 files changed, 27 insertions, 4 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos_file.c b/cpukit/libfs/src/dosfs/msdos_file.c
index ac09e0fbbb..e20b71b8e6 100644
--- a/cpukit/libfs/src/dosfs/msdos_file.c
+++ b/cpukit/libfs/src/dosfs/msdos_file.c
@@ -117,6 +117,8 @@ msdos_file_read(rtems_libio_t *iop, void *buffer, size_t count)
ret = fat_file_read(iop->pathinfo.mt_entry, fat_fd, iop->offset, count,
buffer);
+ if (ret > 0)
+ iop->offset += ret;
rtems_semaphore_release(fs_info->vol_sema);
return ret;
@@ -163,8 +165,9 @@ msdos_file_write(rtems_libio_t *iop,const void *buffer, size_t count)
* update file size in both fat-file descriptor and file control block if
* file was extended
*/
- if (iop->offset + ret > fat_fd->fat_file_size)
- fat_fd->fat_file_size = iop->offset + ret;
+ iop->offset += ret;
+ if (iop->offset > fat_fd->fat_file_size)
+ fat_fd->fat_file_size = iop->offset;
rtems_semaphore_release(fs_info->vol_sema);
return ret;
diff --git a/cpukit/libfs/src/imfs/memfile.c b/cpukit/libfs/src/imfs/memfile.c
index fcbeed96b3..2eb7949275 100644
--- a/cpukit/libfs/src/imfs/memfile.c
+++ b/cpukit/libfs/src/imfs/memfile.c
@@ -121,10 +121,16 @@ ssize_t memfile_read(
)
{
IMFS_jnode_t *the_jnode;
+ ssize_t status;
the_jnode = iop->pathinfo.node_access;
- return IMFS_memfile_read( the_jnode, iop->offset, buffer, count );
+ status = IMFS_memfile_read( the_jnode, iop->offset, buffer, count );
+
+ if ( status > 0 )
+ iop->offset += status;
+
+ return status;
}
/*
@@ -148,6 +154,9 @@ ssize_t memfile_write(
status = IMFS_memfile_write( the_jnode, iop->offset, buffer, count );
+ if ( status > 0 )
+ iop->offset += status;
+
return status;
}
diff --git a/cpukit/libfs/src/nfsclient/src/nfs.c b/cpukit/libfs/src/nfsclient/src/nfs.c
index 1e25165bfc..95613c0222 100644
--- a/cpukit/libfs/src/nfsclient/src/nfs.c
+++ b/cpukit/libfs/src/nfsclient/src/nfs.c
@@ -2311,6 +2311,10 @@ static ssize_t nfs_file_read(
}
} while (count > 0);
+ if (rv > 0) {
+ iop->offset = offset;
+ }
+
return rv;
}
@@ -2419,6 +2423,8 @@ int e;
node->age = nowSeconds();
+ iop->offset += count;
+
return count;
}
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
index 525dceec1d..7de04038e7 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
@@ -163,6 +163,9 @@ rtems_rfs_rtems_file_read (rtems_libio_t* iop,
}
}
+ if (read >= 0)
+ iop->offset = pos + read;
+
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return read;
@@ -220,7 +223,6 @@ rtems_rfs_rtems_file_write (rtems_libio_t* iop,
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return rtems_rfs_rtems_error ("file-write: write append seek", rc);
}
- iop->offset = pos;
}
while (count)
@@ -251,6 +253,9 @@ rtems_rfs_rtems_file_write (rtems_libio_t* iop,
}
}
+ if (write >= 0)
+ iop->offset = pos + write;
+
rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
return write;