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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
/**
* Copyright (c) 2018 chai
*/
#ifndef SMOUNT_H
#define SMOUNT_H
// path type
enum
{
PATH_DIR = 1, // directory
PATH_REG = 2 // regular file
};
// sm status
enum
{
SM_SUCCESS = 0,
SM_INVALIDMOUNT = 1, // invalid mount directory.
SM_NOSUCHDIR = 2, // directory or file doesn't exsist.
SM_UNABLEOPEN = 3, //
SM_CANTWRITE = 4,
};
typedef struct sm_Path
{
int type;
char* path;
struct sm_Path* next;
}sm_Path;
/**
* A shared context structrue.
*/
typedef struct sm_Shared
{
// the root directory
sm_Path* mount;
}sm_Shared;
sm_Shared* sm_newshared();
void sm_closeshared(sm_Shared* S);
/**
* Get error string with given error code.
*/
const char *sm_errstr(int err);
/**
* Mount a sub file system.
*/
int sm_mount(sm_Shared* S, const char *path);
/**
* Free mount
*/
void sm_unmount(sm_Shared* S);
int sm_exists(sm_Shared* S, const char *path);
/**
* Get size of a file.
*/
int sm_size(sm_Shared* S, const char *path);
/**
* Can only read files under root directory.
*/
void *sm_read(sm_Shared* S, const char *path, unsigned int *size);
int sm_isdir(sm_Shared* S, const char *path);
int sm_isreg(sm_Shared* S, const char *path);
/**
* List all folders and files inside current mount directory.
*/
sm_Path *sm_list(sm_Shared*S, const char *path);
void sm_freelist(sm_Path* S);
int sm_write(sm_Shared* S, const char *path, const void *data, int size);
void sm_delete(sm_Shared* S, const char *path);
int sm_mkdir(sm_Shared* S, const char *path);
char* sm_fullpath(sm_Shared* S, const char* path);
#endif
|