cons: disable dangerous conswrites()
[akaros.git] / tests / file_test.c
index 8b01cb2..b0f3738 100644 (file)
@@ -1,16 +1,21 @@
+#define _LARGEFILE64_SOURCE /* needed to use lseek64 */
+
 #include <stdio.h> 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
-#include <arch/arch.h>
+#include <parlib/arch/arch.h>
 #include <unistd.h>
 #include <errno.h>
 #include <dirent.h>
 #include <stdlib.h>
+#include <string.h>
 
+#define DUMMY_STR "AAAaaaBBBbbb"
 int main() 
 { 
        FILE *file; 
+
        file = fopen("/dir1/f1.txt","w+b");
        if (file == NULL)
                printf ("Failed to open file \n");
@@ -20,15 +25,29 @@ int main()
        int fd = open("../../..//////dir1/test.txt", O_RDWR | O_CREAT );
        char rbuf[256] = {0}, wbuf[256] = {0};
        int retval;
+
        retval = read(fd, rbuf, 16);
        printf("Tried to read, got %d bytes of buf: %s\n", retval, rbuf);
-       strcpy(wbuf, "paul <3's the new 61c");
-       retval = write(fd, wbuf, 22);
+       strcpy(wbuf, DUMMY_STR);
+       retval = write(fd, wbuf, strlen(DUMMY_STR));
        printf("Tried to write, wrote %d bytes\n", retval);
+
        printf("Trying to seek to 0\n");
        lseek(fd, 0, SEEK_SET);
        retval = read(fd, rbuf, 64);
        printf("Tried to read again, got %d bytes of buf: %s\n", retval, rbuf);
+       if (strcmp(DUMMY_STR, rbuf)) {
+               printf("Failed to read back our dummy string!\n");
+               return -1;
+       }
+       printf("Trying to lseek64 to 0\n");
+       lseek64(fd, 0, SEEK_SET);
+       retval = read(fd, rbuf, 64);
+       printf("Tried to read again, got %d bytes of buf: %s\n", retval, rbuf);
+       if (strcmp(DUMMY_STR, rbuf)) {
+               printf("Failed to read back our dummy string!\n");
+               return -1;
+       }
 
        retval = access("/bin/laden", X_OK);
        if (errno != ENOENT)
@@ -38,6 +57,7 @@ int main()
                printf("WARNING! Access error for f1.txt!\n");
 
        struct stat st = {0};
+       //
        //retval = stat("/bin/mhello", &st);
        retval = fstat(fd, &st);
        printf("Tried to stat, was told %d\n", retval);
@@ -96,6 +116,7 @@ int main()
                printf("End of the directory\n");
        else
                printf("Dirent name: %s\n", result->d_name);
+       closedir(dir);
        
        /* Hardlink tests */
        printf("Linking to /bin/hello at /dir1/hardhello\n");
@@ -128,9 +149,14 @@ int main()
        retval = access("dir1/f1.txt", R_OK);
        if (retval < 0)
                printf("WARNING! Access error for dir1/f1.txt!\n");
-       retval = chdir("/dir1");
+       fd = open("/dir1", O_RDONLY);
+       printf("OPENED DIR1, got fd %d\n", fd);
+       if (fd < 1)
+               printf("WARNING!, failed to open /dir1!\n");
+       retval = fchdir(fd);
        if (retval < 0)
-               printf("WARNING! Chdir failed for /dir1!\n");
+               printf("WARNING! fchdir failed for /dir1!\n");
+       close(fd);
        retval = access("f1.txt", R_OK);
        if (retval < 0)
                printf("WARNING! Access error for f1.txt!\n");
@@ -150,6 +176,14 @@ int main()
        else
                printf("Got CWD (/dir1/dir1-1/): %s\n", cwd);
        free(cwd);
+       fd = open("/hello.txt", O_RDONLY);
+       if (fd < 1)
+               printf("WARNING! failed to open hello.txt!\n");
+       retval = fchdir(fd);
+       if (!retval || errno != ENOTDIR)
+               printf("WARNING! didn't fail to fchdir to hello.txt %d %d\n",
+                      retval, errno);
+       close(fd);
 
        /* Try a chmod() */
        printf("Trying a chmod\n");
@@ -169,5 +203,6 @@ int main()
        if (retval < 0)
                printf("WARNING! rmdir failed with %d!\n", errno);
        breakpoint();
+       return 0;
 
 }