Add fsx file test and split up basic tests.
[yaffs2.git] / rtems / rtems-y-test / basic-test / yaffs-rtems-basic-test.c
diff --git a/rtems/rtems-y-test/basic-test/yaffs-rtems-basic-test.c b/rtems/rtems-y-test/basic-test/yaffs-rtems-basic-test.c
new file mode 100644 (file)
index 0000000..27448f2
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ *  Simple test program -- demonstrating use of IMFS
+ */
+
+#include <bsp.h>
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <dirent.h>
+
+#include <rtems/libio.h>
+#include <yaffs/rtems_yaffs.h>
+
+
+#define YPATH "/yaffs_mount_pt"
+
+
+
+
+
+void set_uint8_t_buffer(uint8_t *buf, uint32_t n, uint8_t start, uint8_t inc)
+{
+       while (n) {
+               *buf = start;
+               buf++;
+               start += inc;
+               n--;
+       }
+}
+
+
+#define FNAME YPATH"/test"
+#define DIRNAME YPATH"/dirtest"
+
+void dump_directory_tree_worker(const char *dname,int recursive)
+{
+       DIR *d;
+       struct dirent *de;
+       struct stat s;
+       char str[1000];
+
+       d = opendir(dname);
+
+       if(!d)
+       {
+               printf("opendir failed\n");
+       }
+       else
+       {
+               while((de = readdir(d)) != NULL)
+               {
+                       sprintf(str,"%s/%s",dname,de->d_name);
+
+                       lstat(str,&s);
+
+                       printf("%s inode %d length %d mode %X ",
+                               str, (int)s.st_ino, (int)s.st_size, s.st_mode);
+                       switch(s.st_mode & S_IFMT)
+                       {
+                               case S_IFREG: printf("data file"); break;
+                               case S_IFDIR: printf("directory"); break;
+                               case S_IFLNK: printf("symlink -->");
+                                                         if(readlink(str,str,100) < 0)
+                                                               printf("no alias");
+                                                         else
+                                                               printf("\"%s\"",str);
+                                                         break;
+                               default: printf("unknown"); break;
+                       }
+
+                       printf("\n");
+
+                       if((s.st_mode & S_IFMT) == S_IFDIR && recursive)
+                               dump_directory_tree_worker(str,1);
+
+               }
+
+               closedir(d);
+       }
+
+}
+
+static void dump_directory_tree(const char *dname)
+{
+       dump_directory_tree_worker(dname,1);
+}
+
+
+void dumpDir(const char *dname)
+{      dump_directory_tree_worker(dname,0);
+}
+
+int run_the_test(void)
+{
+       int fd;
+       int ret;
+       uint8_t buf[100];
+       uint8_t buf2[100];
+
+
+       dump_directory_tree(YPATH);
+
+       ret = mkdir(DIRNAME, 0777);
+       if (ret < 0)
+               perror("mkdir "DIRNAME);
+
+       fd = open(FNAME, O_RDWR | O_CREAT | O_TRUNC, 0666);
+       printf("open %s  = %d\n", FNAME, fd);
+       if (fd < 0)
+               perror("opening " FNAME);
+
+       set_uint8_t_buffer(buf, sizeof(buf), 0xAA, 1);
+
+       ret = write(fd, buf, sizeof(buf));
+
+       printf("write returned %d\n", ret);
+
+       if (ret == -1)
+               perror("writing file");
+
+       ret = lseek(fd, 0, SEEK_END);
+
+       printf("lseek end ret = %d\n", ret);
+
+       ret = lseek(fd, 0, SEEK_SET);
+       printf("lseek start ret = %d\n", ret);
+
+       ret = read(fd, buf2, sizeof(buf2));
+
+       printf("reading file ret = %d\n", ret);
+
+       if (ret == -1)
+               perror("reading file");
+
+
+       return ret;
+
+#if 0
+
+
+   fd = open("test1", O_CREAT);
+   printf( "fcntl flags =0x%x\n", fcntl( fd, F_GETFL ) );
+   close(fd);
+
+   fd = open("test", O_RDONLY);
+   if (fd == -1) {
+     printf("Starting on the wrong foot....\n");
+     exit(-1);
+   }
+
+   printf( "fcntl flags =0x%x\n", fcntl( fd, F_GETFL ) );
+
+   fp = fdopen(fd, "r");
+   if (fp == NULL) {
+      printf("Nothing ever goes my way!\n");
+      close(fd);
+      exit(-1);
+   } else {
+      printf("Soon, I will be able to take over the world!\n");
+      fgets(str, 200, fp);
+      printf("%s\n", str);
+      fclose(fp);
+   }
+#endif
+}
+