summaryrefslogtreecommitdiff
path: root/fs/fd.h
blob: 35e28d96944fae6d1a17415dbedce839f48a1a9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// SIMPLE FILE DESCRIPTOR //

#ifndef FD_H
#define FD_H

#include <stdint.h>
#include <stdbool.h>

#include "fifo.h"
#include "ringbuffer.h"

/*
typedef struct
{
    int(* seek)(int offset, int whence);

    int(* read)(char *buf, int len);
    int(* wrtie)(char *buf, int len);

    int(* close)();
    int(* stat)(void *buf);

    void *data; //opaque

}file;
*/

enum FD_TYPE{
    FD_TYPE_FIFO_BUFFERED=1,
    FD_TYPE_EXT2_FILE=2,
    FD_TYPE_EXT2_DIR=3,
    FD_TYPE_SYSFS=4
};

typedef struct fd_struct
{
    bool	(*write)(struct fd_struct*,uint8_t);
    uint8_t	(*read)(struct  fd_struct*);	    
    bool	(*has)(struct   fd_struct*);
    bool	(*eof)(struct   fd_struct*);
    bool	(*close)(struct fd_struct*);

    uint8_t type;
    void *data; // opaque data
}fd;

uint8_t fd_read(fd*);
bool    fd_has(fd*);
bool    fd_eof(fd*);
bool    fd_write(fd*,uint8_t);
bool    fd_close(fd*);

fd fd_from_fifo(fifo* f);
fd fd_from_path(char *path);
fd fd_from_sysfs(void(*g)(ringbuffer *r,void (*f)(ringbuffer *r,char *fmt, ...)));
#endif