Fixed errors

This commit is contained in:
2024-10-25 18:30:32 +02:00
parent f773f29190
commit 96fdd9a9cb
8 changed files with 33 additions and 38 deletions
+3 -3
View File
@@ -2,14 +2,14 @@
#include <syscall.h>
int getchar(void) { return getc(stdin); }
int putchar(int c) { return putc(stdout); }
int putchar(int c) { return putc(c, stdout); }
int getc(FILE* stream) {
if (!stream) { return EOF; }
unsigned char ch;
ssize_t res = read(stream->_file, &ch, 1);
if (res <= 0) { return EOF; }
if (res <= 0) { return EOF; }
return (int)ch;
}
@@ -19,7 +19,7 @@ int putc(int c, FILE* stream) {
unsigned char ch = (unsigned char)c;
ssize_t res = write(stream->_file, &c, 1);
if (res <= 0) { return EOF; }
if (res <= 0) { return EOF; }
return (int)ch;
}
+11 -10
View File
@@ -2,6 +2,7 @@
#include <syscall.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
FILE* fopen(const char* path, const char* mode) {
FILE* fp = (FILE*)malloc(sizeof(FILE));
@@ -15,13 +16,13 @@ FILE* fopen(const char* path, const char* mode) {
else if (strcmp(mode, "w+") == 0) { flags = O_RDWR | O_CREAT | O_TRUNC; }
else if (strcmp(mode, "a+") == 0) { flags = O_RDWR | O_CREAT | O_APPEND; }
else { // Unsuppored mode
free(file);
free(fp);
return NULL;
}
int fd = open(path, flags);
if (fd == -1) {
free(FILE);
free(fp);
return NULL;
}
@@ -45,24 +46,24 @@ size_t fread(void* ptr, size_t size, size_t count, FILE* stream) {
if (!stream || !ptr || size == 0 || count == 0) { return 0; }
size_t total = size * count;
ssize_t read = read(stream->_file, ptr, total);
ssize_t readb = read(stream->_file, ptr, total);
if (read < 0) return 0;
if (readb < 0) return 0;
stream->offset += read;
return read / size;
stream->_offset += readb;
return readb / size;
}
size_t fwrite(void* ptr, size_t size, size_t count, FILE* stream) {
if (!stream || !ptr || size == 0 || count == 0) { return 0; }
size_t total = size * count;
ssize_t written = write(stream->_file, ptr, total);
ssize_t writtenb = write(stream->_file, ptr, total);
if (read < 0) return 0;
if (writtenb < 0) return 0;
stream->offset += written;
return written / size;
stream->_offset += writtenb;
return writtenb / size;
}
// TODO
+12 -7
View File
@@ -11,8 +11,9 @@ typedef struct {
} printfEnv_t;
/* Helpers */
static void _dynamicPutc(char c, printfEnv_t* env) {
if (!env->buf) { return; }
static void _dynamicPutc(char c, void* arg) {
printfEnv_t* env = (printfEnv_t*)arg;
if (!env->buf) { return; }
if (env->offset < env->buflen) {
env->buf[env->offset++] = c;
@@ -27,8 +28,9 @@ static void _dynamicPutc(char c, printfEnv_t* env) {
}
}
static void _staticPutc(char c, printfEnv_t* env) {
if (!env->buf) { return; }
static void _staticPutc(char c, void* arg) {
printfEnv_t* env = (printfEnv_t*)arg;
if (!env->buf) { return; }
if (env->offset < env->buflen) {
env->buf[env->offset] = c;
@@ -37,7 +39,10 @@ static void _staticPutc(char c, printfEnv_t* env) {
}
/* Impementation */
int vpprintf(void (*outfn)(char c, void* arg), void* arg, const char* fmt, va_list va) { /* TODO */ }
int vpprintf(void (*outfn)(char c, void* arg), void* arg, const char* fmt, va_list va) {
// TODO
return -1;
}
int vsnprintf(char* str, size_t size, const char* fmt, va_list va) {
printfEnv_t env;
@@ -71,10 +76,10 @@ int vfprintf(FILE* stream, const char* fmt, va_list va) {
int vprintf(const char* fmt, va_list va) { return vfprintf(stdout, fmt, va); }
// Print using an custom putc function
int pprintf(void (*outfn)(char c), const char* fmt, ...) {
int pprintf(void (*outfn)(char c, void* arg), void* arg, const char* fmt, ...) {
va_list va;
va_start(va, fmt);
int ret = vpprintf(outfn, fmt, va);
int ret = vpprintf(outfn, arg, fmt, va);
va_end(va);
return ret;
}
-10
View File
@@ -1,10 +0,0 @@
#include <stdio.h>
// TODO
int scanf(const char* fmt, ...);
int vscanf(const char* fmt, va_list va);
int fscanf(FILE* stream, const char* fmt, ...);
int vfscanf(FILE* stream, const char* fmt, va_list va);
int sscanf(const char* str, const char* fmt, ...);
int vsscanf(const char* str, const char* fmt, va_list va);