Mercurial > hg > rlgwebd
annotate dglwatcher.c @ 191:9758ca68e7f1
Add support for Advanced Rogue 7 and XRogue.
| author | John "Elwin" Edwards |
|---|---|
| date | Tue, 23 Jun 2015 12:09:02 -0400 |
| parents | fba1b34e7554 |
| children |
| rev | line source |
|---|---|
|
155
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
1 #include <stdio.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
2 #include <stdlib.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
3 #include <string.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
4 #include <sys/inotify.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
5 #include <sys/select.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
6 #include <unistd.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
7 #include <limits.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
8 #include <dirent.h> |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
9 |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
10 struct watchdir { |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
11 int wd; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
12 char *name; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
13 }; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
14 |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
15 char ibuf[sizeof(struct inotify_event) + NAME_MAX + 1]; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
16 |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
17 int startwatch(int ifd, char *dir, struct watchdir *w) { |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
18 DIR *dstream; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
19 struct dirent *ent; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
20 |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
21 w->name = dir; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
22 w->wd = inotify_add_watch(ifd, dir, IN_CREATE|IN_DELETE|IN_DELETE_SELF); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
23 if (w->wd < 0) { |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
24 fprintf(stderr, "Could not watch %s\n", dir); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
25 return 1; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
26 } |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
27 dstream = opendir(dir); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
28 if (dstream == NULL) { |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
29 fprintf(stderr, "%s is not a readable directory\n", dir); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
30 inotify_rm_watch(ifd, w->wd); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
31 w->wd = -1; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
32 return 1; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
33 } |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
34 ent = readdir(dstream); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
35 while (ent != NULL) { |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
36 if (strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..")) |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
37 printf("E %s/%s\n", dir, ent->d_name); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
38 ent = readdir(dstream); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
39 } |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
40 closedir(dstream); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
41 fflush(stdout); |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
42 return 0; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
43 } |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
44 |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
45 int main(int argc, char *argv[]) { |
| 166 | 46 int ifd, rsize, off, done, nwatchers, i, result; |
|
155
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards
parents:
diff
changeset
|
47 char typecode; |
|
245a2959f504
Begin support for watching dgamelaunch games.
John "Elwin" Edwards |
