linux.h (1652B)
1 #pragma once 2 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 7 typedef unsigned long long size_t; 8 typedef signed long long ssize_t; 9 typedef unsigned long long uintptr_t; 10 typedef signed long long intptr_t; 11 typedef unsigned long long ino64_t; 12 typedef signed long long off64_t; 13 14 enum { 15 AT_FDCWD = -100, 16 17 O_RDONLY = 0, 18 O_WRONLY = 1, 19 O_RDWR = 2, 20 21 PROT_READ = 0x1, 22 PROT_WRITE = 0x2, 23 PROT_EXEC = 0x4, 24 MAP_FIXED = 0x10, 25 MAP_ANONYMOUS = 0x20, 26 MAP_SHARED = 0x1, 27 MAP_PRIVATE = 0x2, 28 29 DT_UNKNOWN = 0, 30 DT_FIFO = 1, 31 DT_CHR = 2, 32 DT_DIR = 4, 33 DT_BLK = 6, 34 DT_REG = 8, 35 DT_LNK = 10, 36 DT_SOCK = 12, 37 DT_WHT = 14, 38 }; 39 40 struct iovecc 41 { 42 char const* data; 43 size_t len; 44 }; 45 46 __attribute__((noreturn)) 47 extern void exit(int error_code); 48 extern int read(int fd, char* data, size_t count); 49 extern int write(int fd, char const* data, size_t count); 50 extern ssize_t writev(int fd, struct iovecc const* iov, size_t count); 51 extern int openat(int fd, char const* name, int flags, int mode); 52 extern int close(int fd); 53 54 struct linux_dirent64 { 55 ino64_t d_ino; /* 64-bit inode number */ 56 off64_t d_off; /* Not an offset; see getdents() */ 57 unsigned short d_reclen; /* Size of this dirent */ 58 unsigned char d_type; /* File type */ 59 char d_name[]; /* Filename (null-terminated) */ 60 }; 61 extern ssize_t getdents64(int fd, struct linux_dirent64 dirp[], size_t count); 62 63 extern intptr_t mmap(void* addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long off); 64 65 static unsigned get_errno(ssize_t ret) 66 { 67 if (0 > ret && ret >= -0xFFFF) 68 return -ret; 69 return 0; 70 } 71 72 #ifdef __cplusplus 73 } 74 #endif