1 #define _LARGEFILE64_SOURCE /* needed to use lseek64 */
7 #include <parlib/arch/arch.h>
14 #define DUMMY_STR "AAAaaaBBBbbb"
18 file = fopen("/dir1/f1.txt","w+b");
20 printf ("Failed to open file \n");
21 fprintf(file,"%s","hello, world\n");
24 int fd = open("../../..//////dir1/test.txt", O_RDWR | O_CREAT );
25 char rbuf[256] = {0}, wbuf[256] = {0};
27 retval = read(fd, rbuf, 16);
28 printf("Tried to read, got %d bytes of buf: %s\n", retval, rbuf);
29 strcpy(wbuf, DUMMY_STR);
30 retval = write(fd, wbuf, strlen(DUMMY_STR));
31 printf("Tried to write, wrote %d bytes\n", retval);
33 printf("Trying to seek to 0\n");
34 lseek(fd, 0, SEEK_SET);
35 retval = read(fd, rbuf, 64);
36 printf("Tried to read again, got %d bytes of buf: %s\n", retval, rbuf);
37 if (strcmp(DUMMY_STR, rbuf)) {
38 printf("Failed to read back our dummy string!\n");
41 printf("Trying to lseek64 to 0\n");
42 lseek64(fd, 0, SEEK_SET);
43 retval = read(fd, rbuf, 64);
44 printf("Tried to read again, got %d bytes of buf: %s\n", retval, rbuf);
45 if (strcmp(DUMMY_STR, rbuf)) {
46 printf("Failed to read back our dummy string!\n");
50 retval = access("/bin/laden", X_OK);
52 printf("WARNING! Access error for Osama!\n");
53 retval = access("////../../////dir1/f1.txt", R_OK);
55 printf("WARNING! Access error for f1.txt!\n");
58 //retval = stat("/bin/mhello", &st);
59 retval = fstat(fd, &st);
60 printf("Tried to stat, was told %d\n", retval);
62 printf("STAT RESULTS\n---------------------\n");
63 printf("dev : %d\n", st.st_dev);
64 printf("ino : %d\n", st.st_ino);
65 printf("mode : %d\n", st.st_mode);
66 printf("nlink : %d\n", st.st_nlink);
67 printf("uid : %d\n", st.st_uid);
68 printf("gid : %d\n", st.st_gid);
69 printf("rdev : %d\n", st.st_rdev);
70 printf("size : %d\n", st.st_size);
71 printf("blksize : %d\n", st.st_blksize);
72 printf("blocks : %d\n", st.st_blocks);
73 printf("atime : %d\n", st.st_atime);
74 printf("mtime : %d\n", st.st_mtime);
75 printf("ctime : %d\n", st.st_ctime);
78 retval = symlink("/dir1/random.txt", "/dir2/sym-test");
80 printf("WARNING! Symlink creation failed!\n");
81 retval = readlink("/dir2/sym-test", rbuf, 256);
83 printf("WARNING! Readlink failed!\n");
85 printf("Readlink read %d bytes\n", retval);
87 /* Readdir tests: two ways to do it: */
88 DIR *dir = opendir("/dir1/");
89 struct dirent dirent_r, *dirent, *result = 0;
91 dirent = readdir(dir);
92 printf("Readdir: d_ino %lld, d_off: %lld, d_reclen: %d, d_name: %s\n",
93 dirent->d_ino, dirent->d_off, dirent->d_reclen, dirent->d_name);
94 printf("TAKE TWO:\n-----------\n");
95 dirent = readdir(dir);
96 printf("Readdir: d_ino %lld, d_off: %lld, d_reclen: %d, d_name: %s\n",
97 dirent->d_ino, dirent->d_off, dirent->d_reclen, dirent->d_name);
100 retval = readdir_r(dir, &dirent_r, &result);
102 printf("WARNING! Readdir_r failed!, retval %d\n", retval);
104 printf("End of the directory\n");
106 printf("Dirent name: %s\n", result->d_name);
107 printf("TAKE TWO:\n-----------\n");
108 memset(&dirent_r, 0, sizeof(struct dirent));
109 retval = readdir_r(dir, &dirent_r, &result);
111 printf("WARNING! Readdir_r failed!, retval %d\n", retval);
113 printf("End of the directory\n");
115 printf("Dirent name: %s\n", result->d_name);
119 printf("Linking to /bin/hello at /dir1/hardhello\n");
120 retval = link("/bin/hello", "/dir1/hardhello");
122 printf("WARNING! Link failed!\n");
124 printf("Now unlinking /dir1/hardhello\n");
125 retval = unlink("/dir1/hardhello");
127 printf("WARNING! Unlink failed!\n");
128 printf("Linking to /bin/hello at /bin/hardhello2\n");
129 retval = link("/bin/hello", "/bin/hardhello2");
131 printf("WARNING! Link failed!\n");
132 printf("Now unlinking symlink /dir2/sym-test\n");
133 retval = unlink("/dir2/sym-test");
135 printf("WARNING! Unlink failed!\n");
137 /* getcwd, on the root dir */
138 char *cwd = getcwd(0, 0);
140 printf("WARNING! Couldn't get a CWD!\n");
142 printf("Got CWD (/): %s\n", cwd);
145 printf("Testing basic chdir\n");
146 retval = access("dir1/f1.txt", R_OK);
148 printf("WARNING! Access error for dir1/f1.txt!\n");
149 fd = open("/dir1", O_RDONLY);
150 printf("OPENED DIR1, got fd %d\n", fd);
152 printf("WARNING!, failed to open /dir1!\n");
155 printf("WARNING! fchdir failed for /dir1!\n");
157 retval = access("f1.txt", R_OK);
159 printf("WARNING! Access error for f1.txt!\n");
162 printf("WARNING! Couldn't get a CWD!\n");
164 printf("Got CWD (/dir1/): %s\n", cwd);
166 /* change to a weird directory, see if we can still getcwd() */
167 retval = chdir("../dir2/../dir1/dir1-1");
169 printf("WARNING! Chdir failed for dir1-1!\n");
172 printf("WARNING! Couldn't get a CWD!\n");
174 printf("Got CWD (/dir1/dir1-1/): %s\n", cwd);
176 fd = open("/hello.txt", O_RDONLY);
178 printf("WARNING! failed to open hello.txt!\n");
180 if (!retval || errno != ENOTDIR)
181 printf("WARNING! didn't fail to fchdir to hello.txt %d %d\n", retval,
186 printf("Trying a chmod\n");
187 retval = chmod("/dir1/dir1-1/f1-1.txt", S_IRWXO);
189 printf("WARNING! chmod failed with %d!\n", errno);
191 /* Try adding a directory or two! */
192 printf("Add dir3 and dir4, then remove dir4\n");
193 retval = mkdir("/dir3", S_IRWXU | S_IRWXG | S_IRWXO);
195 printf("WARNING! mkdir failed with %d!\n", errno);
196 retval = mkdir("/dir4", S_IRWXU | S_IRWXG | S_IRWXO);
198 printf("WARNING! mkdir failed with %d!\n", errno);
199 retval = rmdir("/dir4");
201 printf("WARNING! rmdir failed with %d!\n", errno);