aboutsummaryrefslogtreecommitdiff
path: root/src/libs/smount/smount.h
blob: 249e590fd09ca3556699e81823158a74f414c8d8 (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
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