1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 05:27:43 +00:00

Add SpinLock to IDE disk access.

This forces serialization of accesses. This driver needs to be redesigned.
This commit is contained in:
Andreas Kling 2018-10-31 21:31:56 +01:00
parent dec5683e9c
commit 8f6998c902
7 changed files with 57 additions and 13 deletions

View file

@ -13,16 +13,19 @@ extern "C" {
int fileno(FILE* stream)
{
assert(stream);
return stream->fd;
}
int feof(FILE* stream)
{
assert(stream);
return stream->eof;
}
char* fgets(char* buffer, int size, FILE* stream)
{
assert(stream);
ssize_t nread = 0;
for (;;) {
if (nread >= size)
@ -41,6 +44,7 @@ char* fgets(char* buffer, int size, FILE* stream)
int fgetc(FILE* stream)
{
assert(stream);
char ch;
fread(&ch, sizeof(char), 1, stream);
return ch;
@ -58,6 +62,7 @@ int getchar()
int fputc(int ch, FILE* stream)
{
assert(stream);
write(stream->fd, &ch, 1);
return (byte)ch;
}
@ -74,11 +79,13 @@ int putchar(int ch)
void clearerr(FILE* stream)
{
assert(stream);
stream->eof = false;
}
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream)
{
assert(stream);
ssize_t nread = read(stream->fd, ptr, nmemb * size);
if (nread < 0)
return 0;
@ -89,6 +96,7 @@ size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream)
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream)
{
assert(stream);
ssize_t nwritten = write(stream->fd, ptr, nmemb * size);
if (nwritten < 0)
return 0;
@ -97,6 +105,7 @@ size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream)
int fseek(FILE* stream, long offset, int whence)
{
assert(stream);
off_t off = lseek(stream->fd, offset, whence);
if (off < 0)
return off;
@ -105,6 +114,7 @@ int fseek(FILE* stream, long offset, int whence)
long ftell(FILE* stream)
{
assert(stream);
return lseek(stream->fd, 0, SEEK_CUR);
}