PatchworkOS
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
8#include <sys/io.h>
9#include <sys/proc.h>
10
12{
13 for (uint64_t i = 0; i <= STDERR_FILENO; i++)
14 {
15 if (write(i, NULL, 0) == ERR && errno == EBADF)
16 {
17 fd_t nullFd = open("/dev/null");
18 if (nullFd != i)
19 {
20 dup2(nullFd, i);
21 close(nullFd);
22 }
23 }
24 }
25}
26
void _clock_init(void)
Definition clock.c:7
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:46
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:27
#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 _files_init(void)
Definition file.c:254
void _threading_init(void)
Definition thread.c:21
void _std_streams_init(void)
Definition std_streams.c:35
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
static void _populate_std_descriptors(void)
Definition user.c:11