Usermode/libposix - Added stat(2) [stubbed]
authorJohn Hodge <[email protected]>
Fri, 7 Dec 2012 05:37:28 +0000 (13:37 +0800)
committerJohn Hodge <[email protected]>
Fri, 7 Dec 2012 05:37:28 +0000 (13:37 +0800)
Usermode/Libraries/libposix.so_src/Makefile
Usermode/Libraries/libposix.so_src/include_exp/sys/stat.h
Usermode/Libraries/libposix.so_src/stat.c [new file with mode: 0644]

index 73a0622..737e4d6 100644 (file)
@@ -8,7 +8,7 @@ CFLAGS   += -Werror -Wextra
 ASFLAGS  +=\r
 LDFLAGS  += -soname libposix.so -Map map.txt\r
 \r
-OBJ  = main.o unistd.o dirent.o\r
+OBJ  = main.o unistd.o dirent.o stat.o\r
 DEPFILES := $(OBJ:%.o=%.d)\r
 BIN = libposix.so\r
 \r
index 99c526b..3e9f430 100644 (file)
@@ -1,12 +1,13 @@
 /*
- * Acess2 C Library
+ * Acess2 POSIX Emulation Lib
  * - By John Hodge (thePowersGang)
+ *
+ * sys/stat.h
+ * - stat(2)
  */
 #ifndef _SYS_STAT_H_
 #define _SYS_STAT_H_
 
-//#include "../acess/intdefs.h"        /* Evil */
-//#include "../stddef.h"
 #include <stdint.h>
 #include "sys/types.h" // off_t
 
@@ -48,6 +49,7 @@ struct stat
 };
 
 extern int stat(const char *path, struct stat *buf);
+extern int lstat(const char *path, struct stat *buf);
 extern int fstat(int fd, struct stat *buf);
 
 #endif
diff --git a/Usermode/Libraries/libposix.so_src/stat.c b/Usermode/Libraries/libposix.so_src/stat.c
new file mode 100644 (file)
index 0000000..198f7d5
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Acess2 POSIX Emulation Lib
+ * - By John Hodge (thePowersGang)
+ *
+ * sys/stat.h
+ * - stat(2)
+ */
+#include <sys/stat.h>
+#include <acess/sys.h>
+
+// === CODE ===
+int stat(const char *path, struct stat *buf)
+{
+       int fd = _SysOpen(path, 0);
+       if( !fd ) {
+               // errno is set by _SysOpen
+               return -1;
+       }
+       
+       int rv = fstat(fd, buf);
+       _SysClose(fd);
+       return rv;
+}
+
+int lstat(const char *path, struct stat *buf)
+{
+       int fd = _SysOpen(path, OPENFLAG_NOLINK);
+       if( !fd ) {
+               // errno is set by _SysOpen
+               return -1;
+       }
+       
+       int rv = fstat(fd, buf);
+       _SysClose(fd);
+       return rv;
+}
+
+int fstat(int fd, struct stat *buf)
+{
+       t_sysFInfo      info;
+       
+       int rv = _SysFInfo(fd, &info, 0);
+       if( !rv ) {
+               return -1;
+       }
+
+       // TODO: Populate buf
+       buf->st_mode = 0;
+//     memset(buf, 0, sizeof(*buf));
+       
+       return 0;
+}
+

UCC git Repository :: git.ucc.asn.au