devman: fix read/write error handling

This commit is contained in:
Matheus
2023-02-10 01:06:22 -03:00
parent 4076007123
commit 3a2829986d
+16 -11
View File
@@ -28,12 +28,15 @@ int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls
int devman_write(int *error, int dev, void* buff, size_t count, size_t offset){ int devman_write(int *error, int dev, void* buff, size_t count, size_t offset){
if(major(dev) > highestmajor) if(major(dev) > highestmajor){
return ENODEV; *error = ENODEV;
return -1;
}
if(!majorcalls[major(dev)]->write){
if(!majorcalls[major(dev)]->write) *error = ENOTTY;
return ENOTTY; return -1;
}
return majorcalls[major(dev)]->write(error, minor(dev), buff, count, offset); return majorcalls[major(dev)]->write(error, minor(dev), buff, count, offset);
@@ -41,14 +44,16 @@ int devman_write(int *error, int dev, void* buff, size_t count, size_t offset){
} }
int devman_read(int *error, int dev, void* buff, size_t count, size_t offset){ int devman_read(int *error, int dev, void* buff, size_t count, size_t offset){
if(major(dev) > highestmajor){
if(major(dev) > highestmajor) *error = ENODEV;
return ENODEV; return -1;
}
if(!majorcalls[major(dev)]->read) if(!majorcalls[major(dev)]->read){
return ENOTTY; *error = ENOTTY;
return -1;
}
return majorcalls[major(dev)]->read(error, minor(dev), buff, count, offset); return majorcalls[major(dev)]->read(error, minor(dev), buff, count, offset);