Usermode/libposix - Header wrapping, mktemp
authorJohn Hodge <[email protected]>
Sat, 8 Mar 2014 06:02:53 +0000 (14:02 +0800)
committerJohn Hodge <[email protected]>
Sat, 8 Mar 2014 06:02:53 +0000 (14:02 +0800)
Usermode/Libraries/libposix.so_src/Makefile
Usermode/Libraries/libposix.so_src/include_exp/dirent.h
Usermode/Libraries/libposix.so_src/include_exp/libposix_stdlib.h [new file with mode: 0644]
Usermode/Libraries/libposix.so_src/include_exp/sys/mman.h [new file with mode: 0644]
Usermode/Libraries/libposix.so_src/include_exp/sys/stat.h
Usermode/Libraries/libposix.so_src/include_exp/sys/time.h
Usermode/Libraries/libposix.so_src/include_exp/unistd.h
Usermode/Libraries/libposix.so_src/include_exp/utime.h [new file with mode: 0644]
Usermode/Libraries/libposix.so_src/mktemp.c [new file with mode: 0644]
Usermode/Libraries/libposix.so_src/unistd.c

index ca566cd..30c4cd2 100644 (file)
@@ -11,7 +11,7 @@ LDFLAGS  += -soname libposix.so -Map map.txt -lc
 OBJ  = main.o unistd.o dirent.o stat.o utmpx.o termios.o\r
 OBJ += pwd.o syslog.o sys_time.o sys_ioctl.o sys_resource.o\r
 OBJ += fcntl.o clocks.o sys_wait.o unistd_crypt.o\r
-OBJ += grp.o pty.o\r
+OBJ += grp.o pty.o mktemp.o\r
 DEPFILES := $(OBJ:%.o=%.d)\r
 BIN = libposix.so\r
 \r
index 747d7ea..8eec42a 100644 (file)
 
 #include "sys/stat.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define NAME_MAX       255
 
 struct dirent
@@ -28,5 +32,9 @@ extern void   rewinddir(DIR *);
 extern void    seekdir(DIR *, long int);
 extern long int        telldir(DIR *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
 
diff --git a/Usermode/Libraries/libposix.so_src/include_exp/libposix_stdlib.h b/Usermode/Libraries/libposix.so_src/include_exp/libposix_stdlib.h
new file mode 100644 (file)
index 0000000..c5f8c8e
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Acess2 POSIX Emulation
+ * - By John Hodge (thePowersGang)
+ *
+ * stdlib.h (libposix version)
+ * - Misc functions
+ *
+ * NOTE: Included by libc's stdlib.h
+ */
+#ifndef _LIBPOSIX__STDLIB_H_
+#define _LIBPOSIX__STDLIB_H_
+
+extern int     mkstemp(char *_template);
+
+
+#endif
+
diff --git a/Usermode/Libraries/libposix.so_src/include_exp/sys/mman.h b/Usermode/Libraries/libposix.so_src/include_exp/sys/mman.h
new file mode 100644 (file)
index 0000000..7fbb9a5
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Acess2 POSIX Emulation Layer
+ * - By John Hodge
+ * 
+ * sys/mman.h
+ * - Memory Management (mmap and friends)
+ */
+#ifndef _LIBPOSIX__SYS_MMAN_H_
+#define _LIBPOSIX__SYS_MMAN_H_
+
+extern void    *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
+extern int     munmap(void *addr, size_t length);
+
+
+#endif
+
index 0340a9f..faac6c1 100644 (file)
 #include <stdint.h>
 #include "sys/types.h" // off_t
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef void   *dev_t; /* TODO: How to identify a device with Acess */
 typedef uint64_t       ino_t;
 typedef unsigned int   blksize_t;
@@ -27,6 +31,9 @@ typedef uint32_t      mode_t;
 #define                S_IFSOCK        0140000 /* socket */
 #define                S_IFIFO 0010000 /* fifo */
 
+#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
+#define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)
+#define S_ISCHR(mode)  (((mode) & S_IFMT) == S_IFCHR)
 
 struct stat
 {
@@ -50,4 +57,8 @@ extern int lstat(const char *path, struct stat *buf);
 extern int fstat(int fd, struct stat *buf);
 extern int mkdir(const char *pathname, mode_t mode);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
index 79e4013..cef859b 100644 (file)
 
 #include <time.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef unsigned long  suseconds_t;
 
 struct timeval
@@ -55,5 +59,9 @@ extern int    gettimeofday(struct timeval *tv, struct timezone *tz);
 // select
 extern int     utimes(const char *, const struct timeval [2]);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
 
index f24011a..6519b3b 100644 (file)
 
 #include <stddef.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 //! \brief flags for open(2)
 #define O_WRONLY       0x01
 #define O_RDONLY       0x02
@@ -65,6 +69,10 @@ extern int   chown(const char *path, uid_t owner, gid_t group);
 #define S_IXOTH        00001
 extern int     chmod(const char *path, mode_t mode);
 
+extern int     unlink(const char *pathname);
+
+extern int     access(const char *pathname, int mode);
+
 extern pid_t   setsid(void);
 
 extern uid_t   getuid(void);
@@ -79,6 +87,7 @@ typedef uint32_t      useconds_t;
 
 extern unsigned int    sleep(unsigned int seconds);
 extern int     usleep(useconds_t usec);
+extern unsigned int    alarm(unsigned int seconds);
 
 // - crypt.c
 extern char    *crypt(const char *key, const char *salt);
@@ -97,5 +106,9 @@ extern int   rmdir(const char *pathname);
 #define PASS_MAX       63
 extern char *getpass(const char *prompt);
 
+#if __cplusplus
+}
+#endif
+
 #endif
 
diff --git a/Usermode/Libraries/libposix.so_src/include_exp/utime.h b/Usermode/Libraries/libposix.so_src/include_exp/utime.h
new file mode 100644 (file)
index 0000000..dcc43c7
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Acess2 POSIX Emulation Layer
+ * - By John Hodge
+ * 
+ * utime.h
+ * - 
+ */
+#ifndef _LIBPOSIX__UTIME_H_
+#define _LIBPOSIX__UTIME_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h> // time_t
+
+struct utimbuf {
+       time_t  actime;         // access time
+       time_t  modtime;        // modifcation time
+};
+
+extern int     utime(const char *filename, const struct utimbuf *times);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/Usermode/Libraries/libposix.so_src/mktemp.c b/Usermode/Libraries/libposix.so_src/mktemp.c
new file mode 100644 (file)
index 0000000..863b925
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Acess2 POSIX Emulation Layer
+ * - By John Hodge
+ * 
+ * mkstemp.c
+ * - mkstemp/mktemp
+ */
+#include <unistd.h>    // mktemp
+#include <stdlib.h>    // mkstemp
+#include <string.h>    // str*
+#include <errno.h>
+
+// === CODE ===
+int mkstemp(char *template)
+{
+       size_t  tpl_len = strlen(template);
+       if( tpl_len < 6 ) {
+               errno = EINVAL;
+               return -1;
+       }
+       if( strcmp(template+tpl_len-6, "XXXXXX") != 0 ) {
+               errno = EINVAL;
+               return -1;
+       }
+       
+       for( int i = 0; i < 1000000; i ++ )
+       {
+               sprintf(template+tpl_len-6, "%06d", i);
+               int fd = open(template, O_EXCL|O_CREAT, 0600);
+               if(fd == -1)    continue ;
+       
+               return fd;
+       }
+       
+       errno = EEXIST;
+       template[0] = '\0';
+       return -1;
+}
+
+char *mktemp(char *template)
+{
+        int fd = mkstemp(template);
+       if( fd == -1 )
+               return NULL;
+       close(fd);
+       return template;
+}
+
+
index f5b330d..64cb70f 100644 (file)
@@ -183,6 +183,17 @@ int usleep(useconds_t usec)
        return 0;
 }
 
+unsigned int alarm(unsigned int seconds)
+{
+       static int64_t  alarm_time;
+       if( seconds > 0 )
+       {
+               alarm_time = _SysTimestamp() + seconds * 1000;
+               // TODO: Schedule SIGALRM
+       }
+       return (alarm_time - _SysTimestamp()) / 1000;
+}
+
 int kill(pid_t pid, int signal)
 {
        // TODO: Need special handling?

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