Initial commit
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
#include <zinnia/channel.h>
|
||||
#include <zinnia/handle.h>
|
||||
#include <zinnia/log.h>
|
||||
#include <zinnia/status.h>
|
||||
|
||||
int main() {
|
||||
zn_log("Hello, init world!\n");
|
||||
|
||||
// Create the root channel so other processes can find each other.
|
||||
zn_status_t e;
|
||||
zn_handle_t end0, end1;
|
||||
zn_log("init: Creating root channel\n");
|
||||
if ((e = zn_channel_create(0, &end0, &end1))) {
|
||||
zn_log(zn_status_to_string(e));
|
||||
zn_log(zn_status_to_string(e));
|
||||
return e;
|
||||
}
|
||||
|
||||
return ZN_OK;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
executable(
|
||||
'init',
|
||||
'main.c',
|
||||
# The init process is linked statically because the dynamic loader can't be
|
||||
# read before vfsd is up.
|
||||
c_args: '-static',
|
||||
include_directories: common_includes,
|
||||
link_with: libzinnia,
|
||||
install: true,
|
||||
)
|
||||
@@ -0,0 +1,2 @@
|
||||
subdir('init')
|
||||
subdir('posixd')
|
||||
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include <uapi/types.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define DT_UNKNOWN 0
|
||||
#define DT_FIFO 1
|
||||
#define DT_CHR 2
|
||||
#define DT_DIR 4
|
||||
#define DT_BLK 6
|
||||
#define DT_REG 8
|
||||
#define DT_LNK 10
|
||||
#define DT_SOCK 12
|
||||
#define DT_WHT 14
|
||||
|
||||
struct dirent {
|
||||
ino_t d_ino;
|
||||
off_t d_off;
|
||||
uint16_t d_reclen;
|
||||
uint8_t d_type;
|
||||
char d_name[256];
|
||||
};
|
||||
@@ -0,0 +1,87 @@
|
||||
#pragma once
|
||||
|
||||
#include <uapi/types.h>
|
||||
|
||||
#define O_RDONLY (1 << 0)
|
||||
#define O_WRONLY (1 << 1)
|
||||
#define O_CREAT (1 << 6)
|
||||
#define O_EXCL (1 << 7)
|
||||
#define O_NOCTTY (1 << 8)
|
||||
#define O_TRUNC (1 << 9)
|
||||
#define O_APPEND (1 << 10)
|
||||
#define O_NONBLOCK (1 << 11)
|
||||
#define O_DSYNC (1 << 12)
|
||||
#define O_ASYNC (1 << 13)
|
||||
#define O_DIRECT (1 << 14)
|
||||
#define O_LARGEFILE (1 << 15)
|
||||
#define O_DIRECTORY (1 << 16)
|
||||
#define O_NOFOLLOW (1 << 17)
|
||||
#define O_NOATIME (1 << 18)
|
||||
#define O_CLOEXEC (1 << 19)
|
||||
#define O_PATH (1 << 21)
|
||||
#define O_TMPFILE (1 << 22)
|
||||
#define O_SYNC (O_DIRECTORY | O_TMPFILE)
|
||||
#define O_RSYNC O_SYNC
|
||||
#define O_EXEC O_PATH
|
||||
#define O_SEARCH O_PATH
|
||||
#define O_RDWR (O_RDONLY | O_WRONLY)
|
||||
#define O_ACCMODE (O_RDWR | O_PATH)
|
||||
|
||||
#define F_DUPFD 0
|
||||
#define F_GETFD 1
|
||||
#define F_SETFD 2
|
||||
#define F_GETFL 3
|
||||
#define F_SETFL 4
|
||||
#define F_GETLK 5
|
||||
#define F_SETLK 6
|
||||
#define F_SETLK64 F_SETLK
|
||||
#define F_SETLKW 7
|
||||
#define F_SETLKW64 F_SETLKW
|
||||
#define F_SETOWN 8
|
||||
#define F_GETOWN 9
|
||||
#define F_SETSIG 10
|
||||
#define F_GETSIG 11
|
||||
#define F_SETOWN_EX 15
|
||||
#define F_GETOWN_EX 16
|
||||
#define F_GETOWNER_UIDS 17
|
||||
#define F_SETLEASE 1024
|
||||
#define F_GETLEASE 1025
|
||||
#define F_NOTIFY 1026
|
||||
#define F_DUPFD_CLOEXEC 1030
|
||||
#define F_SETPIPE_SZ 1031
|
||||
#define F_GETPIPE_SZ 1032
|
||||
#define F_ADD_SEALS 1033
|
||||
#define F_GET_SEALS 1034
|
||||
#define F_SEAL_SEAL (1 << 0)
|
||||
#define F_SEAL_SHRINK (1 << 1)
|
||||
#define F_SEAL_GROW (1 << 2)
|
||||
#define F_SEAL_WRITE (1 << 3)
|
||||
#define F_OFD_GETLK 36
|
||||
#define F_OFD_SETLK 37
|
||||
#define F_OFD_SETLKW 38
|
||||
#define F_RDLCK 0
|
||||
#define F_WRLCK 1
|
||||
#define F_UNLCK 2
|
||||
|
||||
#define FD_CLOEXEC 1
|
||||
|
||||
#define AT_FDCWD (-100)
|
||||
#define AT_SYMLINK_NOFOLLOW (1 << 8)
|
||||
#define AT_REMOVEDIR (1 << 9)
|
||||
#define AT_SYMLINK_FOLLOW (1 << 10)
|
||||
#define AT_EACCESS (1 << 11)
|
||||
#define AT_EMPTY_PATH (1 << 12)
|
||||
|
||||
struct f_owner_ex {
|
||||
int type;
|
||||
pid_t pid;
|
||||
};
|
||||
|
||||
#define F_OWNER_TID 0
|
||||
|
||||
#define POSIX_FADV_NORMAL 0
|
||||
#define POSIX_FADV_RANDOM 1
|
||||
#define POSIX_FADV_SEQUENTIAL 2
|
||||
#define POSIX_FADV_WILLNEED 3
|
||||
#define POSIX_FADV_DONTNEED 4
|
||||
#define POSIX_FADV_NOREUSE 5
|
||||
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
typedef long time_t;
|
||||
typedef long suseconds_t;
|
||||
|
||||
struct timespec {
|
||||
time_t tv_sec;
|
||||
long tv_nsec;
|
||||
};
|
||||
|
||||
struct timeval {
|
||||
time_t tv_sec;
|
||||
suseconds_t tv_usec;
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef long off_t;
|
||||
typedef long ssize_t;
|
||||
typedef size_t off64_t;
|
||||
typedef size_t blksize_t;
|
||||
typedef size_t blkcnt_t;
|
||||
typedef size_t clockid_t;
|
||||
typedef size_t dev_t;
|
||||
typedef size_t gid_t;
|
||||
typedef size_t ino_t;
|
||||
typedef uint32_t mode_t;
|
||||
typedef size_t nlink_t;
|
||||
typedef size_t pid_t;
|
||||
typedef size_t rlim_t;
|
||||
typedef size_t uid_t;
|
||||
typedef size_t fsblkcnt_t;
|
||||
typedef size_t fsfilcnt_t;
|
||||
typedef size_t pthread_attr_t;
|
||||
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
struct iovec {
|
||||
void* base;
|
||||
size_t len;
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
struct utsname {
|
||||
char sysname[65];
|
||||
char nodename[65];
|
||||
char release[65];
|
||||
char version[65];
|
||||
char machine[65];
|
||||
char domainname[65];
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
#pragma once
|
||||
|
||||
#include <zinnia/handle.h>
|
||||
#include <zinnia/status.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <uapi/time.h>
|
||||
#include <uapi/types.h>
|
||||
|
||||
struct file;
|
||||
struct inode;
|
||||
struct path;
|
||||
|
||||
// struct file_ops {
|
||||
// zn_status_t (*open)(struct file* self, uint32_t flags);
|
||||
// zn_status_t (*close)(struct file* self);
|
||||
// zn_status_t (*read)(struct file* self, struct iovec_iter* iter, ssize_t* out_read);
|
||||
// zn_status_t (*write)(struct file* self, struct iovec_iter* iter, ssize_t* out_written);
|
||||
// zn_status_t (*devctl)(struct file* self, uint32_t dcmd, void* data, size_t num, int* out_info);
|
||||
// zn_status_t (*poll)(struct file* self, int16_t mask, int16_t* out_mask); // TODO: This is not correct.
|
||||
// zn_status_t (*mmap)(
|
||||
// struct file* self,
|
||||
// zn_handle_t* space,
|
||||
// void* addr,
|
||||
// size_t len,
|
||||
// int prot,
|
||||
// int flags,
|
||||
// off_t offset
|
||||
// );
|
||||
// };
|
||||
|
||||
struct file {
|
||||
const struct file_ops* ops;
|
||||
struct inode* inode;
|
||||
uint32_t mode;
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
struct file* file_alloc();
|
||||
struct file* file_from_fd(int fd);
|
||||
|
||||
struct inode_ops {
|
||||
union {
|
||||
struct {
|
||||
zn_status_t (*lookup)(struct inode* inode, struct path* path);
|
||||
} dir;
|
||||
struct {
|
||||
zn_status_t (*truncate)(struct inode* inode);
|
||||
} reg;
|
||||
};
|
||||
};
|
||||
|
||||
struct inode_attr {
|
||||
struct timespec atime, mtime, ctime;
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
};
|
||||
|
||||
struct inode {
|
||||
const struct inode_ops* ops;
|
||||
struct inode_attr attr;
|
||||
};
|
||||
|
||||
struct entry {
|
||||
const char* name;
|
||||
struct inode* inode;
|
||||
uint8_t state;
|
||||
};
|
||||
|
||||
struct path {
|
||||
struct entry* entry;
|
||||
struct mount* mount;
|
||||
};
|
||||
|
||||
struct mount {
|
||||
uint32_t flags;
|
||||
struct entry root;
|
||||
struct path mount_point;
|
||||
};
|
||||
|
||||
struct file_system_ops {};
|
||||
|
||||
struct file_system {
|
||||
const char* name;
|
||||
struct file_system_ops ops;
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
#include <zinnia/channel.h>
|
||||
#include <zinnia/handle.h>
|
||||
#include <zinnia/log.h>
|
||||
#include <zinnia/status.h>
|
||||
|
||||
int main() {
|
||||
zn_log("Hello, posixd world!\n");
|
||||
|
||||
zn_status_t e;
|
||||
|
||||
// Open a connection to the init server.
|
||||
zn_handle_t* handles;
|
||||
void* data;
|
||||
if ((e = zn_channel_open(ZN_INIT_CHANNEL, 32, 4096, &handles, &data)))
|
||||
return e;
|
||||
|
||||
while (1) {}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
executable(
|
||||
'posixd',
|
||||
'main.c',
|
||||
c_args: '-static',
|
||||
include_directories: [common_includes, 'include'],
|
||||
link_with: libzinnia,
|
||||
install: true,
|
||||
)
|
||||
Reference in New Issue
Block a user