PatchworkOS  19e446b
A non-POSIX operating system.
Loading...
Searching...
No Matches
user.c
Go to the documentation of this file.
1#include "user.h"
2
3#include "common/clock.h"
4#include "common/exit_stack.h"
6#include "common/threading.h"
7#include "user/common/file.h"
8#include "user/common/note.h"
9
10#include <sys/fs.h>
11#include <sys/proc.h>
12
14{
15 for (uint64_t i = 0; i <= STDERR_FILENO; i++)
16 {
17 if (write(i, NULL, 0) == ERR && errno == EBADF)
18 {
19 fd_t nullFd = open("/dev/const/null");
20 if (nullFd != i)
21 {
22 dup2(nullFd, i);
23 close(nullFd);
24 }
25 }
26 }
27}
28
void _exit_stack_init(void)
Definition exit_stack.c:9
void _threading_init(void)
Definition threading.c:63
void _user_init(void)
Definition user.c:29
#define errno
Error number variable.
Definition errno.h:27
#define EBADF
Bad file number.
Definition errno.h:77
fd_t dup2(fd_t oldFd, fd_t newFd)
System call for duplicating file descriptors, with a destination.
Definition dup2.c:8
fd_t open(const char *path)
System call for opening files.
Definition open.c:8
uint64_t close(fd_t fd)
System call for closing files.
Definition close.c:8
size_t write(fd_t fd, const void *buffer, size_t count)
System call for writing to files.
Definition write.c:8
#define STDERR_FILENO
Standard error file descriptor.
Definition fs.h:37
#define NULL
Pointer error value.
Definition NULL.h:25
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ fd_t
File descriptor type.
Definition fd_t.h:10
void _clock_init(void)
Definition clock.c:7
void _files_init(void)
Definition file.c:254
void _note_init(void)
Definition note.c:68
void _std_streams_init(void)
Definition std_streams.c:36
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
static void _populate_std_descriptors(void)
Definition user.c:13