Fix: use 1 based instead of 0 based fileid
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
**.o
|
**.o
|
||||||
|
REQUIREMENTS.md
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ RUN dpkg --add-architecture i386 && \
|
|||||||
zlib1g:i386 libncurses5:i386 \
|
zlib1g:i386 libncurses5:i386 \
|
||||||
libgcc1:i386 libstdc++5:i386
|
libgcc1:i386 libstdc++5:i386
|
||||||
|
|
||||||
|
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY mips-decstation.linux-xgcc.gz /
|
COPY mips-decstation.linux-xgcc.gz /
|
||||||
RUN tar -zxvf /mips-decstation.linux-xgcc.gz
|
RUN tar -zxvf /mips-decstation.linux-xgcc.gz
|
||||||
|
|||||||
9
Makefile
9
Makefile
@@ -1,5 +1,12 @@
|
|||||||
.PHONY: all clean docker
|
.PHONY: all clean docker
|
||||||
|
|
||||||
docker:
|
docker: docker-build docker-run
|
||||||
|
|
||||||
|
docker-build:
|
||||||
docker build . -t afs2026
|
docker build . -t afs2026
|
||||||
|
|
||||||
|
docker-run:
|
||||||
docker run afs2026 -C code
|
docker run afs2026 -C code
|
||||||
|
|
||||||
|
docker-shell:
|
||||||
|
docker run -it --rm --entrypoint sh afs2026
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
.PHONY: all clean run
|
.PHONY: all clean
|
||||||
|
|
||||||
all:
|
all:
|
||||||
make -C build.linux depend
|
make -C build.linux depend
|
||||||
make -C build.linux -j 16
|
make -C build.linux -j 16
|
||||||
make -C test -j 16
|
make -C test -j 16
|
||||||
|
make -C test run
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
make -C build.linux distclean
|
make -C build.linux distclean
|
||||||
make -C test distclean
|
make -C test distclean
|
||||||
|
|
||||||
run:
|
|
||||||
make -C test run
|
|
||||||
|
|||||||
@@ -20,14 +20,15 @@ hosttype = unknown
|
|||||||
# !!! ADD PATH TO CPP and CROSS COMPILER
|
# !!! ADD PATH TO CPP and CROSS COMPILER
|
||||||
|
|
||||||
ifeq ($(osname),Linux)
|
ifeq ($(osname),Linux)
|
||||||
# full path name of your cpp program i.e.:
|
# full path name of your cpp program i.e.:
|
||||||
CPP = ../../usr/local/nachos/lib/gcc-lib/decstation-ultrix/2.95.2/cpp
|
CPP = ../../usr/local/nachos/lib/gcc-lib/decstation-ultrix/2.95.2/cpp
|
||||||
# directory in which your gcc cross-compiler lives i.e.:
|
# directory in which your gcc cross-compiler lives i.e.:
|
||||||
GCCDIR = ../../usr/local/nachos/bin/decstation-ultrix-
|
GCCDIR = ../../usr/local/nachos/bin/decstation-ultrix-
|
||||||
LDFLAGS = -T script -N
|
LDFLAGS = -T script -N
|
||||||
ASFLAGS = -mips2
|
ASFLAGS = -mips2
|
||||||
CPPFLAGS = $(INCDIR)
|
CPPFLAGS = $(INCDIR)
|
||||||
COFF2NOFF = ../../coff2noff/coff2noff.x86Linux
|
COFF2NOFF = ../../coff2noff/coff2noff.x86Linux
|
||||||
|
NACHOS = ../build.linux/nachos
|
||||||
hosttype = x86Linux
|
hosttype = x86Linux
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -41,36 +41,37 @@ void SysPrintInt(int value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
OpenFileId SysOpen(char *name) {
|
OpenFileId SysOpen(char *name) {
|
||||||
OpenFileId id = -1;
|
|
||||||
for (int i = 0; i < 20; i++)
|
for (int i = 0; i < 20; i++)
|
||||||
if (kernel->fileSystem->fileDescriptorTable[i] == NULL) {
|
if (kernel->fileSystem->fileDescriptorTable[i] == NULL) {
|
||||||
id = i;
|
kernel->fileSystem->fileDescriptorTable[i]
|
||||||
kernel->fileSystem->fileDescriptorTable[i]
|
|
||||||
= kernel->fileSystem->Open(name);
|
= kernel->fileSystem->Open(name);
|
||||||
if (kernel->fileSystem->fileDescriptorTable[i] == NULL)
|
if (kernel->fileSystem->fileDescriptorTable[i] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
return i + 1; // OpenFileId starts from 1
|
||||||
}
|
}
|
||||||
return id;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SysWrite(char *buffer, int size, OpenFileId id) {
|
int SysWrite(char *buffer, int size, OpenFileId id) {
|
||||||
if (id < 0 || id >= 20 || kernel->fileSystem->fileDescriptorTable[id] == NULL)
|
int idx = id - 1; // Convert 1-based id to 0-based index
|
||||||
|
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
return kernel->fileSystem->fileDescriptorTable[id]->Write(buffer, size);
|
return kernel->fileSystem->fileDescriptorTable[idx]->Write(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SysRead(char *buffer, int size, OpenFileId id) {
|
int SysRead(char *buffer, int size, OpenFileId id) {
|
||||||
if (id < 0 || id >= 20 || kernel->fileSystem->fileDescriptorTable[id] == NULL)
|
int idx = id - 1; // Convert 1-based id to 0-based index
|
||||||
|
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
return kernel->fileSystem->fileDescriptorTable[id]->Read(buffer, size);
|
return kernel->fileSystem->fileDescriptorTable[idx]->Read(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SysClose(OpenFileId id) {
|
int SysClose(OpenFileId id) {
|
||||||
if (id < 0 || id >= 20 || kernel->fileSystem->fileDescriptorTable[id] == NULL)
|
int idx = id - 1; // Convert 1-based id to 0-based index
|
||||||
|
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
delete kernel->fileSystem->fileDescriptorTable[id];
|
delete kernel->fileSystem->fileDescriptorTable[idx];
|
||||||
kernel->fileSystem->fileDescriptorTable[id] = NULL;
|
kernel->fileSystem->fileDescriptorTable[idx] = NULL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user