-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutil.c
More file actions
87 lines (71 loc) · 2.09 KB
/
util.c
File metadata and controls
87 lines (71 loc) · 2.09 KB
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
#include "include/util.h"
bool is_split(const char c);
bool is_space(const char c);
bool is_split(const char c) {
return c == '\n' || c == '\r' || c == '\0' || c == '|';
}
bool is_space(const char c) {
return c == ' ' || c == '\t';
}
void init_func(void) {
func[0] = base64_encode;
func[1] = base64_decode;
func[2] = easter_egg;
funclist[0] = "base64 encode";
funclist[1] = "base64 decode";
funclist[2] = "easter egg";
}
ssize_t readfunc(char * funcname, const char * user_buffer, size_t length) {
size_t start, end, funclen, funcstart;
memset(funcname, 0, sizeof(char) * FUNCLEN);
start = end = funclen = funcstart = 0;
// Clear the start space
while ( is_space(user_buffer[start]) ) {
start++;
}
end = start;
while ( end <= length && ! is_split(user_buffer[end]) ) {
if (funclen >= FUNCLEN)
return -ENOMEM;
// Compress the middle space
if (is_space(user_buffer[end]) ) {
strncpy(funcname + funcstart, user_buffer + start, end - start + 1);
start = end;
funclen++;
funcstart = funclen;
while ( is_space(user_buffer[++start]) );
end = start;
} else {
end++;
funclen++;
}
}
strncpy(funcname + funcstart, user_buffer + start, funclen - funcstart);
// Clear the end space
if ( is_space(funcname[funclen-1]) ) {
funcname[--funclen] = '\0';
}
return end;
}
ssize_t readdata(char * data, const char * user_buffer, size_t length) {
size_t start, end, datalen;
memset(data, 0, sizeof(char) * DATALEN);
start = end = datalen = 0;
//data can be any format
while (end < length) {
if (datalen >= DATALEN)
return -ENOMEM;
end++;
datalen++;
}
strncpy(data, user_buffer + start, datalen);
return datalen;
}
ssize_t easter_egg(char * res, const char * data) {
strcpy(res, "Wait to finish");
return true;
}
EXPORT_SYMBOL(init_func);
EXPORT_SYMBOL(readfunc);
EXPORT_SYMBOL(readdata);
EXPORT_SYMBOL(easter_egg);