Luna/libs/libc/src/stdio.cpp
2022-11-03 16:52:41 +01:00

77 lines
1.5 KiB
C++

#include <errno.h>
#include <luna.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>
extern "C"
{
int puts(const char* s)
{
int nwritten = fputs(s, stdout);
if (nwritten < 0) return -1;
if (putchar('\n') < 0) return -1;
return nwritten + 1;
}
int fputs(const char* s, FILE* stream)
{
int result = (int)fwrite(s, strlen(s), 1, stream);
if (ferror(stream)) return -1;
return result;
}
int fputc(int c, FILE* stream)
{
char chr = (char)c;
fwrite(&chr, 1, 1, stream);
if (ferror(stream)) { return -1; }
return c;
}
int putc(int c, FILE* stream)
{
return fputc(c, stream);
}
int putchar(int c)
{
return fputc(c, stdout);
}
void perror(const char* s)
{
int savederr =
errno; // This was necessary before, but even more now since we clear errno on successful syscalls now.
if (s && *s) { fprintf(stderr, "%s: ", s); }
fprintf(stderr, "%s\n", strerror(savederr));
}
int remove(const char*)
{
NOT_IMPLEMENTED("remove");
}
int sscanf(const char*, const char*, ...)
{
NOT_IMPLEMENTED("sscanf");
}
int fscanf(FILE*, const char*, ...)
{
NOT_IMPLEMENTED("fscanf");
}
int rename(const char*, const char*)
{
NOT_IMPLEMENTED("rename");
}
FILE* tmpfile()
{
errno = ENOTSUP;
return NULL;
}
}