mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
devman: isseekable()
This commit is contained in:
@@ -7,17 +7,20 @@
|
|||||||
#define MAJOR_ZERO 2
|
#define MAJOR_ZERO 2
|
||||||
#define MAJOR_NULL 3
|
#define MAJOR_NULL 3
|
||||||
#define MAJOR_FULL 4
|
#define MAJOR_FULL 4
|
||||||
|
#define MAJOR_FB 5
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
int (*read)(int* error, int minor, void* buff, size_t count, size_t offset);
|
int (*read)(int* error, int minor, void* buff, size_t count, size_t offset);
|
||||||
int (*write)(int* error, int minor, void* buff, size_t count, size_t offset);
|
int (*write)(int* error, int minor, void* buff, size_t count, size_t offset);
|
||||||
int (*isatty)(int minor);
|
int (*isatty)(int minor);
|
||||||
|
int (*isseekable)(int minor, size_t* seekmax);
|
||||||
} devcalls;
|
} devcalls;
|
||||||
|
|
||||||
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);
|
||||||
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);
|
||||||
int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls);
|
int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls);
|
||||||
int devman_isatty(int dev);
|
int devman_isatty(int dev);
|
||||||
|
int devman_isseekable(int dev, size_t* seekmax);
|
||||||
void devman_init();
|
void devman_init();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -56,6 +56,16 @@ int devman_isatty(int dev){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int devman_isseekable(int dev, size_t* max){
|
||||||
|
|
||||||
|
if(major(dev) > highestmajor)
|
||||||
|
return ENOTTY;
|
||||||
|
|
||||||
|
return majorcalls[major(dev)]->isseekable(minor(dev), max);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void devman_init(){
|
void devman_init(){
|
||||||
|
|
||||||
devfs_init();
|
devfs_init();
|
||||||
|
|||||||
@@ -17,8 +17,13 @@ static int isatty(int minor){
|
|||||||
return ENOTTY;
|
return ENOTTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int isseekable(int minor, size_t* max){
|
||||||
|
*max = ~(size_t)0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static devcalls calls = {
|
static devcalls calls = {
|
||||||
read, write, isatty
|
read, write, isatty, isseekable
|
||||||
};
|
};
|
||||||
|
|
||||||
void fulldev_init(){
|
void fulldev_init(){
|
||||||
|
|||||||
@@ -16,8 +16,13 @@ static int isatty(int minor){
|
|||||||
return ENOTTY;
|
return ENOTTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int isseekable(int minor, size_t* max){
|
||||||
|
*max = ~(size_t)0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static devcalls calls = {
|
static devcalls calls = {
|
||||||
read, write, isatty
|
read, write, isatty, isseekable
|
||||||
};
|
};
|
||||||
|
|
||||||
void nulldev_init(){
|
void nulldev_init(){
|
||||||
|
|||||||
@@ -17,8 +17,13 @@ static int isatty(int minor){
|
|||||||
return ENOTTY;
|
return ENOTTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int isseekable(int minor, size_t* max){
|
||||||
|
*max = ~(size_t)0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static devcalls calls = {
|
static devcalls calls = {
|
||||||
read, write, isatty
|
read, write, isatty, isseekable
|
||||||
};
|
};
|
||||||
|
|
||||||
void zerodev_init(){
|
void zerodev_init(){
|
||||||
|
|||||||
@@ -120,10 +120,14 @@ static int write(int *error, int dev, void* buff, size_t count, size_t offset){
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
devcalls calls = {
|
|
||||||
read, write, isatty
|
|
||||||
};
|
|
||||||
|
|
||||||
|
static int isseekable(){
|
||||||
|
return ESPIPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
devcalls calls = {
|
||||||
|
read, write, isatty, isseekable
|
||||||
|
};
|
||||||
|
|
||||||
void consoledev_init(){
|
void consoledev_init(){
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user