Fixed sparc compiling
[akaros.git] / tests / file_test.c
1 #include <stdio.h> 
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5 #include <arch/arch.h>
6 #include <unistd.h>
7 #include <errno.h>
8 #include <dirent.h>
9 #include <stdlib.h>
10 #include <string.h>
11
12 int main() 
13
14         FILE *file; 
15         file = fopen("/dir1/f1.txt","w+b");
16         if (file == NULL)
17                 printf ("Failed to open file \n");
18         fprintf(file,"%s","hello, world\n"); 
19         fclose(file); 
20
21         int fd = open("../../..//////dir1/test.txt", O_RDWR | O_CREAT );
22         char rbuf[256] = {0}, wbuf[256] = {0};
23         int retval;
24         retval = read(fd, rbuf, 16);
25         printf("Tried to read, got %d bytes of buf: %s\n", retval, rbuf);
26         strcpy(wbuf, "paul <3's the new 61c");
27         retval = write(fd, wbuf, 22);
28         printf("Tried to write, wrote %d bytes\n", retval);
29         printf("Trying to seek to 0\n");
30         lseek(fd, 0, SEEK_SET);
31         retval = read(fd, rbuf, 64);
32         printf("Tried to read again, got %d bytes of buf: %s\n", retval, rbuf);
33
34         retval = access("/bin/laden", X_OK);
35         if (errno != ENOENT)
36                 printf("WARNING! Access error for Osama!\n");
37         retval = access("////../../////dir1/f1.txt", R_OK);
38         if (retval < 0)
39                 printf("WARNING! Access error for f1.txt!\n");
40
41         struct stat st = {0};
42         //retval = stat("/bin/mhello", &st);
43         retval = fstat(fd, &st);
44         printf("Tried to stat, was told %d\n", retval);
45         #if 0
46         printf("STAT RESULTS\n---------------------\n");
47         printf("dev       : %d\n", st.st_dev);
48         printf("ino       : %d\n", st.st_ino);
49         printf("mode      : %d\n", st.st_mode);
50         printf("nlink     : %d\n", st.st_nlink);
51         printf("uid       : %d\n", st.st_uid);
52         printf("gid       : %d\n", st.st_gid);
53         printf("rdev      : %d\n", st.st_rdev);
54         printf("size      : %d\n", st.st_size);
55         printf("blksize   : %d\n", st.st_blksize);
56         printf("blocks    : %d\n", st.st_blocks);
57         printf("atime     : %d\n", st.st_atime);
58         printf("mtime     : %d\n", st.st_mtime);
59         printf("ctime     : %d\n", st.st_ctime);
60         #endif
61
62         retval = symlink("/dir1/random.txt", "/dir2/sym-test");
63         if (retval < 0)
64                 printf("WARNING! Symlink creation failed!\n");
65         retval = readlink("/dir2/sym-test", rbuf, 256);
66         if (retval < 0)
67                 printf("WARNING! Readlink failed!\n");
68         else
69                 printf("Readlink read %d bytes\n", retval);
70         
71         /* Readdir tests: two ways to do it: */
72         DIR *dir = opendir("/dir1/");
73         struct dirent dirent_r, *dirent, *result = 0;
74         #if 0
75         dirent = readdir(dir);
76         printf("Readdir: d_ino %lld, d_off: %lld, d_reclen: %d, d_name: %s\n",
77                dirent->d_ino, dirent->d_off, dirent->d_reclen, dirent->d_name);
78         printf("TAKE TWO:\n-----------\n");
79         dirent = readdir(dir);
80         printf("Readdir: d_ino %lld, d_off: %lld, d_reclen: %d, d_name: %s\n",
81                dirent->d_ino, dirent->d_off, dirent->d_reclen, dirent->d_name);
82         #endif
83
84         retval = readdir_r(dir, &dirent_r, &result);
85         if (retval > 0)
86                 printf("WARNING! Readdir_r failed!, retval %d\n", retval);
87         if (!result)
88                 printf("End of the directory\n");
89         else
90                 printf("Dirent name: %s\n", result->d_name);
91         printf("TAKE TWO:\n-----------\n");
92         memset(&dirent_r, 0, sizeof(struct dirent));
93         retval = readdir_r(dir, &dirent_r, &result);
94         if (retval > 0)
95                 printf("WARNING! Readdir_r failed!, retval %d\n", retval);
96         if (!result)
97                 printf("End of the directory\n");
98         else
99                 printf("Dirent name: %s\n", result->d_name);
100         
101         /* Hardlink tests */
102         printf("Linking to /bin/hello at /dir1/hardhello\n");
103         retval = link("/bin/hello", "/dir1/hardhello");
104         if (retval < 0)
105                 printf("WARNING! Link failed!\n");
106         //breakpoint();
107         printf("Now unlinking /dir1/hardhello\n");
108         retval = unlink("/dir1/hardhello");
109         if (retval < 0)
110                 printf("WARNING! Unlink failed!\n");
111         printf("Linking to /bin/hello at /bin/hardhello2\n");
112         retval = link("/bin/hello", "/bin/hardhello2");
113         if (retval < 0)
114                 printf("WARNING! Link failed!\n");
115         printf("Now unlinking symlink /dir2/sym-test\n");
116         retval = unlink("/dir2/sym-test");
117         if (retval < 0)
118                 printf("WARNING! Unlink failed!\n");
119
120         /* getcwd, on the root dir */
121         char *cwd = getcwd(0, 0);
122         if (!cwd)
123                 printf("WARNING! Couldn't get a CWD!\n");
124         else
125                 printf("Got CWD (/): %s\n", cwd);
126         free(cwd);
127         /* chdir() tests */
128         printf("Testing basic chdir\n");
129         retval = access("dir1/f1.txt", R_OK);
130         if (retval < 0)
131                 printf("WARNING! Access error for dir1/f1.txt!\n");
132         retval = chdir("/dir1");
133         if (retval < 0)
134                 printf("WARNING! Chdir failed for /dir1!\n");
135         retval = access("f1.txt", R_OK);
136         if (retval < 0)
137                 printf("WARNING! Access error for f1.txt!\n");
138         cwd = getcwd(0, 0);
139         if (!cwd)
140                 printf("WARNING! Couldn't get a CWD!\n");
141         else
142                 printf("Got CWD (/dir1/): %s\n", cwd);
143         free(cwd);
144         /* change to a weird directory, see if we can still getcwd() */
145         retval = chdir("../dir2/../dir1/dir1-1");
146         if (retval < 0)
147                 printf("WARNING! Chdir failed for dir1-1!\n");
148         cwd = getcwd(0, 0);
149         if (!cwd)
150                 printf("WARNING! Couldn't get a CWD!\n");
151         else
152                 printf("Got CWD (/dir1/dir1-1/): %s\n", cwd);
153         free(cwd);
154
155         /* Try a chmod() */
156         printf("Trying a chmod\n");
157         retval = chmod("/dir1/dir1-1/f1-1.txt", S_IRWXO);
158         if (retval < 0)
159                 printf("WARNING! chmod failed with %d!\n", errno);
160
161         /* Try adding a directory or two! */
162         printf("Add dir3 and dir4, then remove dir4\n");
163         retval = mkdir("/dir3", S_IRWXU | S_IRWXG | S_IRWXO);
164         if (retval < 0)
165                 printf("WARNING! mkdir failed with %d!\n", errno);
166         retval = mkdir("/dir4", S_IRWXU | S_IRWXG | S_IRWXO);
167         if (retval < 0)
168                 printf("WARNING! mkdir failed with %d!\n", errno);
169         retval = rmdir("/dir4");
170         if (retval < 0)
171                 printf("WARNING! rmdir failed with %d!\n", errno);
172         breakpoint();
173
174 }