Files
HansTheGatherer/wuehans/syscall.c

187 lines
3.8 KiB
C

// #include <fatfs/ff.h>
#include <wuehans_config.h>
#include <errno.h>
#include <stdio.h>
#include <sys/stat.h>
/* #include <DebugHelper.h> */
void *__dso_handle = 0;
// const TCHAR STDOUT[30] = "stdout.txt";
// const TCHAR STDERR[30] = "stderr.txt";
// FIL fp = {0};
// FATFS FatFs = {0};
// BYTE is_mounted = 0;
// struct FD_Data {
// FIL fp;
// BYTE mode;
// BYTE is_open;
// } FD_Data_default = {NULL, FA_READ, 0};
// typedef struct FD_Data FD_Data;
// #define FILE_AMOUNT 4
// static FD_Data fd_data[FILE_AMOUNT];
// int _write(int fd, char *ptr, int len) {
// if (is_mounted == 0) {
// f_mount(&FatFs, "", 0);
// is_mounted = 1;
// }
// // stdout
// if (fd == 1) {
// FIL write_file;
// FRESULT fr = f_open(&write_file, STDOUT, FA_OPEN_APPEND | FA_WRITE);
// if (fr != 0) {
// return fr;
// }
// UINT written = 0;
// fr = f_write(&write_file, ptr, len, &written);
// if (fr != 0) {
// // TODO: Set errno
// return -1;
// }
// f_close(&write_file);
// // HACK: Hackermann
// volatile int* x = (int*) 0x80000000;
// int b = *x;
// // HACK: Hackermann Ende
// return written;
// } else if (fd > 2 && (fd-3) < FILE_AMOUNT && fd_data[fd-3].is_open) {
// UINT bw = 0;
// f_write(&fd_data[fd-3].fp, ptr, len, &bw);
// return bw;
// }
// return -1;
// }
// int _read(int fd, char *ptr, int len) {
// if (fd > 2 && (fd-3) < FILE_AMOUNT && fd_data[fd-3].is_open) {
// UINT bytesRead = 0;
// FRESULT result = f_read(&fd_data[fd-3].fp, ptr, len, &bytesRead);
// /* ScreenPrint("_read"); */
// return bytesRead;
// }
// return -1;
// }
// void *_sbrk(int incr) {
// extern int heap_begin;
// static unsigned char *heap = NULL;
// unsigned char *prev_heap;
// if (heap == NULL) {
// heap = (unsigned char *)&heap_begin;
// }
// prev_heap = heap;
// if ((int)heap + incr < heap_begin + HEAP_SIZE) {
// heap += incr;
// }
// /* ScreenPrint("_sbrk"); */
// return prev_heap;
// }
// int _fstat(int fd, struct stat *st) {
// st->st_mode = S_IFREG;
// /* ScreenPrint("_fstat"); */
// return 0;
// }
// int _lseek(int fd, int offset, int whence) {
// // Invalid lseek call
// if (fd <= 2 || (fd-3) >= FILE_AMOUNT || !fd_data[fd-3].is_open) {
// return -1;
// }
// // Calculate the correct offset for f_lseek()
// FSIZE_t ofs = 0;
// switch (whence) {
// // Set to offset directly
// case SEEK_SET:
// ofs = offset;
// break;
// // Increment by offset
// case SEEK_CUR:
// ofs = f_tell(&fd_data[fd-3].fp) + offset;
// break;
// // Append offset to EOF
// case SEEK_END:
// ofs = f_size(&fd_data[fd-3].fp) + offset;
// break;
// default:
// return -1;
// }
// FRESULT result = f_lseek(&fd_data[fd-3].fp, ofs);
// return result;
// }
// int _open(const char *name, int flags, int mode) {
// if (is_mounted == 0) {
// f_mount(&FatFs, "", 0);
// is_mounted = 1;
// }
// int i;
// for (i = 0; i < FILE_AMOUNT; i++) {
// if (fd_data[i].is_open == 1) {
// // Entry already in use
// continue;
// }
// mode = FA_READ;
// FRESULT fr = f_open(&fd_data[i].fp, name, mode);
// if (fr != FR_OK) {
// return -1;
// }
// fd_data[i].mode = mode;
// fd_data[i].is_open = 1;
// // Exclude stdout, stderr, stdin
// return i+3;
// }
// return -1;
// }
// int _close(int fd) {
// if (fd > 2 && (fd-3) < FILE_AMOUNT) {
// fd_data[fd-3].is_open = 0;
// return 0;
// }
// return -1;
// }
int _isatty(int fd)
{
errno = ENOTTY;
/* ScreenPrint("isatty"); */
return 0;
}
void _exit(int status) {
while (1) {
}
}
int _kill(int pid, int sig) {
errno = EINVAL;
return -1;
}
int _getpid() { return -1; }