+ make_test_dir_name(dname, sizeof(dname), root_path, test_path);
+
+ recursively_delete(dname);
+
+ ret = access(dname, F_OK);
+ printf("access of non-existing expects -1 returned %d\n", ret);
+
+ if (ret != -1) {
+ printf("access should have been -1, was %d\n", ret);
+ ret = -1;
+ goto err;
+ }
+
+ ret = mkdir(dname, 0777);
+
+ if (ret < 0) {
+ perror("mkdir");
+ goto err;
+ }
+
+ ret = access(dname, F_OK);
+ printf("access of existing returned %d\n", ret);
+
+ if (ret < 0) {
+ perror("access of existing directory");
+ goto err;
+ }
+
+ for (i = 0; i < n_files; i++) {
+
+ make_test_file_name(fname, sizeof(fname), root_path, test_path, "file-", i);
+ make_test_file_name(lname, sizeof(lname), root_path, test_path, "link-", i);
+
+ ret = symlink(fname, lname);
+
+ if (ret < 0) {
+ perror("creating symlink");
+ goto err;
+ }
+
+ fds[i] = open(fname, O_RDWR | O_CREAT | O_TRUNC, 0777);
+ printf("open %s = %d\n", fname, fds[i]);
+
+ if (fds[i] < 0) {
+ perror("opening test file");
+ ret = fds[i];
+ goto err;
+ }
+ }
+
+ set_uint8_t_buffer(buf, sizeof(buf), 0xAA, 1);
+
+ for(i = 0; i < n_files; i++) {
+ ret = write(fds[i], buf, sizeof(buf));
+ printf("write returned %d\n", ret);
+ if (ret < 0) {
+ perror("writing file");
+ goto err;
+ }
+ }
+
+ for(i = 0; i < n_files; i++) {
+ int trunc_size = sizeof(buf2)/2;
+
+ ret = lseek(fds[i], 0, SEEK_END);
+
+ printf("lseek end ret = %d\n", ret);
+
+ ret = lseek(fds[i], 0, SEEK_SET);
+ printf("lseek start ret = %d\n", ret);
+
+ ret = read(fds[i], buf2, sizeof(buf2));
+
+ printf("reading file ret = %d\n", ret);
+ if (ret < 0) {
+ perror("reading file");
+ goto err;
+ }
+ ret = ftruncate(fds[i], trunc_size);
+
+ if (ret < 0) {
+ perror("ftruncate");
+ goto err;
+ }
+
+ ret = lseek(fds[i], 0, SEEK_END);
+ if (ret != trunc_size) {
+ printf("truncated size is %d but lseek returned %d\n",
+ trunc_size, ret);
+ ret = -1;
+ goto err;
+ }
+
+
+ }
+
+ for(i = 0; i < n_files; i++) {
+ ret = close(fds[i]);
+ if (ret < 0) {
+ perror("closing file");
+ goto err;
+ }
+ }
+
+ dump_directory_tree(root_path);
+
+ if (memcmp(buf, buf2, sizeof(buf)) == 0) {
+ printf("buffers match\n");
+ ret = 0;
+ } else {
+ printf("buffers do not match\n");
+ ret = -1;
+ }
+
+ if (del_when_done)
+ recursively_delete(dname);
+err:
+ free(fds);
+
+ return ret;
+}
+
+int create_delete_files(char *root_path, char *test_path, int n_files, int n_passes)
+{
+ int i;
+ int ret;
+ for (i = 0; i < n_passes; i++) {
+ printf("\nCreate and Delete Files Pass %d\n", i);
+ ret = create_delete_files_pass(root_path, test_path, n_files, 1);
+ if (ret < 0)
+ return ret;
+ }
+ return 0;
+}
+
+#define YPATH "/yaffs_mount_pt"
+#define FNAME YPATH"/test"
+#define DIRNAME YPATH"/dirtest"
+
+void check_fail(int ret)
+{
+ if (ret < 0)
+ printf("Test failed\n");