[rtems commit] IMFS: Fix copy on write for linfiles
Sebastian Huber
sebh at rtems.org
Fri Feb 20 08:42:56 UTC 2015
Module: rtems
Branch: master
Commit: a45dfa1447300c7955328de2478d5bba7ad87608
Changeset: http://git.rtems.org/rtems/commit/?id=a45dfa1447300c7955328de2478d5bba7ad87608
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Feb 20 09:42:15 2015 +0100
IMFS: Fix copy on write for linfiles
---
cpukit/libfs/src/imfs/imfs_linfile.c | 3 ++
testsuites/libtests/tar02/init.c | 71 +++++++++++++++++++++++++++++++++---
testsuites/libtests/tar02/tar02.scn | 1 +
3 files changed, 70 insertions(+), 5 deletions(-)
diff --git a/cpukit/libfs/src/imfs/imfs_linfile.c b/cpukit/libfs/src/imfs/imfs_linfile.c
index 8a14866..5840c16 100644
--- a/cpukit/libfs/src/imfs/imfs_linfile.c
+++ b/cpukit/libfs/src/imfs/imfs_linfile.c
@@ -63,6 +63,9 @@ static int IMFS_linfile_open(
file->Memfile.indirect = 0;
file->Memfile.doubly_indirect = 0;
file->Memfile.triply_indirect = 0;
+
+ IMFS_Set_handlers( &iop->pathinfo );
+
if ((count != 0)
&& (IMFS_memfile_write(&file->Memfile, 0, buffer, count) == -1))
return -1;
diff --git a/testsuites/libtests/tar02/init.c b/testsuites/libtests/tar02/init.c
index 8d790f6..23c1187 100644
--- a/testsuites/libtests/tar02/init.c
+++ b/testsuites/libtests/tar02/init.c
@@ -22,6 +22,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include <string.h>
#include "initial_filesystem_tar.h"
@@ -34,10 +35,67 @@ void test_tarfs_load(void);
#define TARFILE_START initial_filesystem_tar
#define TARFILE_SIZE initial_filesystem_tar_size
+static const char file[] = "/home/test_file";
+
+static const char content_0[] =
+ "This is a test of loading an RTEMS filesystem from an\n"
+ "initial tar image.\n";
+
+static const char content_1[] =
+ "This is a test of loading an RTEMS filesystem from an\n"
+ "initial tar image.\n"
+ "And some other stuff.\n";
+
+static char buf[sizeof(content_1) - 1];
+
+static void check_file(
+ const char *file,
+ const char *expected_content,
+ char *buf,
+ size_t size
+)
+{
+ int fd;
+ ssize_t n;
+ int rv;
+
+ fd = open(file, O_RDONLY);
+ rtems_test_assert(fd >= 0);
+
+ n = read(fd, buf, size);
+ rtems_test_assert(n == (ssize_t) size);
+
+ rtems_test_assert(memcmp(expected_content, buf, size) == 0);
+
+ rv = close(fd);
+ rtems_test_assert(rv == 0);
+}
+
+static void write_file(
+ const char *file,
+ const char *content,
+ size_t size
+)
+{
+ int fd;
+ ssize_t n;
+ int rv;
+
+ fd = open(file, O_WRONLY);
+ rtems_test_assert(fd >= 0);
+
+ n = write(fd, content, size);
+ rtems_test_assert(n == (ssize_t) size);
+
+ rv = close(fd);
+ rtems_test_assert(rv == 0);
+}
+
+/* FIXME */
void test_cat(
- char *file,
- int offset_arg,
- int length
+ const char *file,
+ int offset_arg,
+ int length
);
void test_tarfs_load(void)
@@ -54,8 +112,11 @@ void test_tarfs_load(void)
/******************/
printf( "========= /home/test_file =========\n" );
- test_cat( "/home/test_file", 0, 0 );
-
+ test_cat(&file[0], 0, 0);
+ check_file(&file[0], &content_0[0], &buf[0], sizeof(content_0) - 1);
+ write_file(&file[0], &content_1[0], sizeof(content_1) - 1);
+ check_file(&file[0], &content_1[0], &buf[0], sizeof(content_1) - 1);
+
/******************/
printf( "========= /symlink =========\n" );
test_cat( "/symlink", 0, 0 );
diff --git a/testsuites/libtests/tar02/tar02.scn b/testsuites/libtests/tar02/tar02.scn
index e7a9165..d1e4c81 100644
--- a/testsuites/libtests/tar02/tar02.scn
+++ b/testsuites/libtests/tar02/tar02.scn
@@ -7,5 +7,6 @@ initial tar image.
========= /symlink =========
(0)This is a test of loading an RTEMS filesystem from an
initial tar image.
+And some other stuff.
*** END OF TEST TAR 2 ***
More information about the vc
mailing list