#define OPENFLAG_READ 0x02
#define OPENFLAG_WRITE 0x04
#define OPENFLAG_NOLINK 0x40
-#define SEEK_SET 1
-#define SEEK_CUR 0
-#define SEEK_END -1
+#ifndef SEEK_CUR
+# define SEEK_SET 1
+# define SEEK_CUR 0
+# define SEEK_END -1
+#endif
#define CLONE_VM 0x10
#define FILEFLAG_DIRECTORY 0x10
#define FILEFLAG_SYMLINK 0x20
// === TYPES ===
struct s_sysACL {
- uint32_t object;
- uint32_t perms;
+ union {
+ struct {
+ unsigned group: 1;
+ unsigned id: 31;
+ };
+ uint32_t object;
+ };
+ union {
+ struct {
+ unsigned invert: 1;
+ unsigned perms: 31;
+ };
+ uint32_t rawperms;
+ };
};
struct s_sysFInfo {
uint uid, gid;
struct s_sysACL acls[];
};
typedef struct s_sysFInfo t_sysFInfo;
+typedef struct s_sysACL t_sysACL;
// === FUNCTIONS ===
void _SysDebug(char *str, ...);
// --- Proc ---
+void _exit(int status) __attribute__((noreturn));
void sleep();
+void wait(int miliseconds);
+ int waittid(int id, int *status);
int clone(int flags, void *stack);
int execve(char *path, char **argv, char **envp);
+void setuid(int id);
+void setgid(int id);
// --- VFS ---
+ int chdir(char *dir);
int open(char *path, int flags);
int reopen(int fd, char *path, int flags);
void close(int fd);
int seek(int fd, uint64_t offset, int whence);
int ioctl(int fd, int id, void *data);
int finfo(int fd, t_sysFInfo *info, int maxacls);
+ int readdir(int fd, char *dest);
+ int _SysGetACL(int fd, t_sysACL *dest);
// --- MEMORY ---
uint64_t _SysGetPhys(uint vaddr);