liblinux++

A hosted C++ runtime without any libc.
Log | Files | Refs

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