+ 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++) {
+ int link_fd;
+
+ 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;
+ }
+
+
+ link_fd = open(lname, O_RDWR, 0777);
+ printf("opening link %s = %d\n", lname, link_fd);
+
+ if (link_fd < 0) {
+ perror("opening symlink file");
+ ret = link_fd;
+ goto err;
+ }
+ close(link_fd);
+
+ }
+
+ 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);