mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
devman: fix read/write error handling
This commit is contained in:
+16
-11
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user