Fix: leave fileid 0 and 1 to stdio
This commit is contained in:
@@ -47,27 +47,39 @@ OpenFileId SysOpen(char *name) {
|
|||||||
= kernel->fileSystem->Open(name);
|
= kernel->fileSystem->Open(name);
|
||||||
if (kernel->fileSystem->fileDescriptorTable[i] == NULL)
|
if (kernel->fileSystem->fileDescriptorTable[i] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
return i + 1; // OpenFileId starts from 1
|
return i + 2; // OpenFileId starts from 2 (0=stdin, 1=stdout reserved)
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SysWrite(char *buffer, int size, OpenFileId id) {
|
int SysWrite(char *buffer, int size, OpenFileId id) {
|
||||||
int idx = id - 1; // Convert 1-based id to 0-based index
|
if (id == 1) { // Console output (stdout)
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
kernel->synchConsoleOut->PutChar(buffer[i]);
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
int idx = id - 2; // Convert to 0-based index (ids 2+ are files)
|
||||||
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
return kernel->fileSystem->fileDescriptorTable[idx]->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) {
|
||||||
int idx = id - 1; // Convert 1-based id to 0-based index
|
if (id == 0) { // Console input (stdin)
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
buffer[i] = kernel->synchConsoleIn->GetChar();
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
int idx = id - 2; // Convert to 0-based index (ids 2+ are files)
|
||||||
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
return kernel->fileSystem->fileDescriptorTable[idx]->Read(buffer, size);
|
return kernel->fileSystem->fileDescriptorTable[idx]->Read(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SysClose(OpenFileId id) {
|
int SysClose(OpenFileId id) {
|
||||||
int idx = id - 1; // Convert 1-based id to 0-based index
|
if (id == 0 || id == 1) // Cannot close console
|
||||||
|
return 0;
|
||||||
|
int idx = id - 2; // Convert to 0-based index (ids 2+ are files)
|
||||||
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
delete kernel->fileSystem->fileDescriptorTable[idx];
|
delete kernel->fileSystem->fileDescriptorTable[idx];
|
||||||
|
|||||||
Reference in New Issue
Block a user