mirror of
https://github.com/Fennix-Project/Userspace.git
synced 2025-08-25 21:05:03 +00:00
Update libc
This commit is contained in:
@@ -2,13 +2,18 @@
|
||||
extern void __libc_init_array(void);
|
||||
extern void __libc_fini_array(void);
|
||||
|
||||
extern void __libc_init_std(void);
|
||||
extern void __libc_fini_std(void);
|
||||
|
||||
void __libc_init(void)
|
||||
{
|
||||
__libc_init_array();
|
||||
__libc_init_std();
|
||||
}
|
||||
|
||||
void _exit(int Code)
|
||||
{
|
||||
__libc_fini_std();
|
||||
__libc_fini_array();
|
||||
__asm__ __volatile__("syscall"
|
||||
:
|
||||
|
@@ -27,7 +27,7 @@ size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return syscall4(_FileRead, (uint64_t)stream->KernelPrivate, stream->offset, (uint64_t)ptr, size * nmemb);
|
||||
return syscall4(_FileRead, (uint64_t)stream->KernelPrivate, stream->_offset, (uint64_t)ptr, size * nmemb);
|
||||
}
|
||||
|
||||
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||
@@ -38,7 +38,7 @@ size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return syscall4(_FileWrite, (uint64_t)stream->KernelPrivate, stream->offset, (uint64_t)ptr, size * nmemb);
|
||||
return syscall4(_FileWrite, (uint64_t)stream->KernelPrivate, stream->_offset, (uint64_t)ptr, size * nmemb);
|
||||
}
|
||||
|
||||
int fclose(FILE *fp)
|
||||
@@ -56,7 +56,7 @@ int fclose(FILE *fp)
|
||||
|
||||
off_t fseek(FILE *stream, long offset, int whence)
|
||||
{
|
||||
if (stream == NULL)
|
||||
if (stream == NULL || whence < 0 || whence > 2)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
@@ -65,23 +65,40 @@ off_t fseek(FILE *stream, long offset, int whence)
|
||||
off_t new_offset = syscall3(_FileSeek, stream->KernelPrivate, offset, whence);
|
||||
if (IsSyscallError(new_offset))
|
||||
return -1;
|
||||
stream->offset = new_offset;
|
||||
stream->_offset = new_offset;
|
||||
return new_offset;
|
||||
}
|
||||
|
||||
long ftell(FILE *stream)
|
||||
{
|
||||
return stream->offset;
|
||||
return stream->_offset;
|
||||
}
|
||||
|
||||
int fflush(FILE *stream)
|
||||
{
|
||||
return 0;
|
||||
if (stream == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return EOF;
|
||||
}
|
||||
|
||||
errno = ENOSYS;
|
||||
return EOF;
|
||||
}
|
||||
|
||||
int fprintf(FILE *stream, const char *format, ...)
|
||||
{
|
||||
return 0; // sprintf(char *s, const char *format, ...)
|
||||
if (stream == NULL || format == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
const int ret = vfprintf(stream, format, args);
|
||||
va_end(args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void setbuf(FILE *stream, char *buf)
|
||||
|
@@ -4,13 +4,17 @@
|
||||
|
||||
int fputc(int c, FILE *stream)
|
||||
{
|
||||
// FIXME
|
||||
// if (stream == NULL)
|
||||
// {
|
||||
// errno = EBADF;
|
||||
// return EOF;
|
||||
// }
|
||||
|
||||
return syscall2(_Print, c, 0);
|
||||
}
|
||||
|
||||
int putc(int c, FILE *stream)
|
||||
{
|
||||
return syscall2(_Print, c, 0);
|
||||
}
|
||||
int putc(int c, FILE *stream) { return fputc(c, stream); }
|
||||
|
||||
int fputs(const char *s, FILE *stream)
|
||||
{
|
||||
@@ -24,12 +28,5 @@ int puts(const char *s)
|
||||
fputc(s[i], stdout);
|
||||
}
|
||||
|
||||
int putchar(int c)
|
||||
{
|
||||
return putc(c, stdout);
|
||||
}
|
||||
|
||||
void perror(const char *s)
|
||||
{
|
||||
fputs(s, stderr);
|
||||
}
|
||||
int putchar(int c) { return fputc(c, stdout); }
|
||||
void perror(const char *s) { fputs(s, stderr); }
|
||||
|
13
libc/src/std/std_init.c
Normal file
13
libc/src/std/std_init.c
Normal file
@@ -0,0 +1,13 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../../../Kernel/syscalls.h"
|
||||
|
||||
void __libc_init_std(void)
|
||||
{
|
||||
/* FIXME: Temporal workaround */
|
||||
// int IsCritical = syscall1(_KernelCTL, 6 /* KCTL_IS_CRITICAL */);
|
||||
}
|
||||
|
||||
void __libc_fini_std(void)
|
||||
{
|
||||
}
|
@@ -5,36 +5,43 @@
|
||||
|
||||
int execl(const char *pathname, const char *arg, ...)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int execlp(const char *file, const char *arg, ...)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int execle(const char *pathname, const char *arg, ...)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int execv(const char *pathname, char *const argv[])
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int execvp(const char *file, char *const argv[])
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int execvpe(const char *file, char *const argv[], char *const envp[])
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int execve(const char *pathname, char *const argv[], char *const envp[])
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user