-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiskmount.c
More file actions
89 lines (71 loc) · 1.9 KB
/
diskmount.c
File metadata and controls
89 lines (71 loc) · 1.9 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
88
89
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "util.h"
#include "diskev.h"
#include "evsock.h"
static void update(struct diskev *evt, char *line)
{
char *pos;
char *val;
pos = strchr(line, '=');
if (!pos)
return;
val = pos + 1;
if (!strncmp(line, "ACTION", pos - line)) {
evt->action = val;
} else if (!strncmp(line, "SUBSYSTEM", pos - line)) {
evt->subsys = val;
} else if (!strncmp(line, "DEVTYPE", pos - line)) {
evt->type = val;
} else if (!strncmp(line, "DEVNAME", pos - line)) {
evt->device = val;
} else if (!strncmp(line, "ID_FS_TYPE", pos - line)) {
evt->filesys = val;
} else if (!strncmp(line, "ID_SERIAL_SHORT", pos - line)) {
evt->serial = val;
} else if (!strncmp(line, "ID_FS_LABEL", pos - line)) {
evt->label = val;
} else if (!strncmp(line, "ID_FS_UUID", pos - line)) {
evt->fsuuid = val;
} else if (!strncmp(line, "ID_PART_ENTRY_UUID", pos - line)) {
evt->partuuid = val;
} else {
return;
}
vinfo("Added parameter line '%s'", line);
return;
}
int main(int argc, char *argv[])
{
char **env;
int sock;
size_t size = getpagesize() * 2;
char dbuf[size];
char *buf = dbuf;
struct evtlv *ev;
struct diskev evt;
int magic = EVHEAD_MAGIC;
if (argc > 1 && !strcmp(argv[1], "-d")) {
log_debug(1);
log_level(LL_DEBUG);
}
memset(&evt, 0, sizeof(evt));
sock = evsock_connect();
for (env = environ; *env; ++env)
update(&evt, *env);
if (ev_validate(&evt))
die("Invalid event params");
ev = (struct evtlv *)buf;
ev->type = EVTYPE_GROUP;
ev->length = evev_build(buf + sizeof(*ev), size - sizeof(*ev), &evt);
if (!ev->length)
die("Failed to build event");
vinfo("Sending event, size %zu", ev->length + sizeof(*ev));
if (evsock_write(sock, (char *)&magic, sizeof(magic)))
die("Cannot write event magic");
if (evsock_write(sock, buf, ev->length + sizeof(*ev)))
die("Cannot write event data");
evsock_disconnect(sock);
return 0;
}