PatchworkOS  966e257
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/thread.h"
7#include "user/common/file.h"
8#include "user/common/note.h"
9
10#include <sys/io.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/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
#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:9
fd_t open(const char *path)
System call for opening files.
Definition open.c:9
uint64_t close(fd_t fd)
System call for closing files.
Definition close.c:9
#define STDERR_FILENO
Definition io.h:48
uint64_t write(fd_t fd, const void *buffer, uint64_t count)
System call for writing to files.
Definition write.c:9
void _user_init(void)
Definition user.c:29
#define NULL
Pointer error value.
Definition NULL.h:23
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ fd_t
A file descriptor.
Definition fd_t.h:12
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 _threading_init(void)
Definition thread.c:62
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