changeset 167:fba1b34e7554

Rename watcher to dglwatcher.
author John "Elwin" Edwards
date Wed, 07 Jan 2015 13:49:37 -0500
parents 66fef65c34e7
children 0ceaca924b4c
files dglwatcher.c rlgwebd.js watcher.c
diffstat 3 files changed, 110 insertions(+), 110 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dglwatcher.c	Wed Jan 07 13:49:37 2015 -0500
@@ -0,0 +1,109 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/inotify.h>
+#include <sys/select.h>
+#include <unistd.h>
+#include <limits.h>
+#include <dirent.h>
+
+struct watchdir {
+  int wd;
+  char *name;
+};
+
+char ibuf[sizeof(struct inotify_event) + NAME_MAX + 1];
+
+int startwatch(int ifd, char *dir, struct watchdir *w) {
+  DIR *dstream;
+  struct dirent *ent;
+
+  w->name = dir;
+  w->wd = inotify_add_watch(ifd, dir, IN_CREATE|IN_DELETE|IN_DELETE_SELF);
+  if (w->wd < 0) {
+    fprintf(stderr, "Could not watch %s\n", dir);
+    return 1;
+  }
+  dstream = opendir(dir);
+  if (dstream == NULL) {
+    fprintf(stderr, "%s is not a readable directory\n", dir);
+    inotify_rm_watch(ifd, w->wd);
+    w->wd = -1;
+    return 1;
+  }
+  ent = readdir(dstream);
+  while (ent != NULL) {
+    if (strcmp(ent->d_name, ".") && strcmp(ent->d_name, ".."))
+      printf("E %s/%s\n", dir, ent->d_name);
+    ent = readdir(dstream);
+  }
+  closedir(dstream);
+  fflush(stdout);
+  return 0;
+}
+
+int main(int argc, char *argv[]) {
+  int ifd, rsize, off, done, nwatchers, i, result;
+  char typecode;
+  struct inotify_event *iev;
+  fd_set rfds;
+  struct watchdir *watchers;
+
+  done = 0;
+  nwatchers = argc - 1;
+  iev = (struct inotify_event *) ibuf;
+  ifd = inotify_init();
+  if (nwatchers == 0) {
+    watchers = malloc(sizeof(struct watchdir));
+    nwatchers = 1;
+    startwatch(ifd, ".", watchers);
+  }
+  else {
+    watchers = malloc(nwatchers * sizeof(struct watchdir));
+    for (i = 0; i < nwatchers; i++) {
+      startwatch(ifd, argv[i+1], watchers + i);
+    }
+  }
+
+  while (!done) {
+    FD_ZERO(&rfds);
+    FD_SET(0, &rfds);
+    FD_SET(ifd, &rfds);
+    result = select(ifd + 1, &rfds, NULL, NULL, NULL);
+    if (result < 0) {
+      /* Something went wrong. */
+      break;
+    }
+    if (FD_ISSET(ifd, &rfds)) {
+      off = 0;
+      rsize = read(ifd, ibuf, sizeof(struct inotify_event) + NAME_MAX + 1);
+      while (off < rsize) {
+        iev = (struct inotify_event *) (ibuf + off);
+        if (iev->mask & IN_CREATE)
+          typecode = 'C';
+        else if (iev->mask & IN_DELETE)
+          typecode = 'D';
+        else
+          typecode = '?';
+        for (i = 0; i < nwatchers; i++) {
+          if (watchers[i].wd == iev->wd)
+            printf("%c %s/%s\n", typecode, watchers[i].name, iev->name);
+        }
+        off += sizeof(struct inotify_event) + iev->len;
+      }
+      fflush(stdout);
+    }
+    if (FD_ISSET(0, &rfds)) {
+      result = read(0, &typecode, 1);
+      if (result <= 0) {
+        /* EOF on stdin: controlling process probably died. */
+        done = 1;
+      }
+      if (typecode == '\n')
+        done = 1;
+    }
+    
+  }
+  close(ifd);
+  return 0;
+}
--- a/rlgwebd.js	Wed Jan 07 13:22:05 2015 -0500
+++ b/rlgwebd.js	Wed Jan 07 13:49:37 2015 -0500
@@ -724,7 +724,7 @@
   for (var gname in games) {
     watchdirs.push(path.join("/dgldir/inprogress", gname));
   }
-  var subproc = child_process.spawn("/bin/watcher", watchdirs);
+  var subproc = child_process.spawn("/bin/dglwatcher", watchdirs);
   subproc.stdout.setEncoding('utf8');
   subproc.stdout.on('data', function (chunk) {
     var fname = chunk.slice(2, -1);
--- a/watcher.c	Wed Jan 07 13:22:05 2015 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/inotify.h>
-#include <sys/select.h>
-#include <unistd.h>
-#include <limits.h>
-#include <dirent.h>
-
-struct watchdir {
-  int wd;
-  char *name;
-};
-
-char ibuf[sizeof(struct inotify_event) + NAME_MAX + 1];
-
-int startwatch(int ifd, char *dir, struct watchdir *w) {
-  DIR *dstream;
-  struct dirent *ent;
-
-  w->name = dir;
-  w->wd = inotify_add_watch(ifd, dir, IN_CREATE|IN_DELETE|IN_DELETE_SELF);
-  if (w->wd < 0) {
-    fprintf(stderr, "Could not watch %s\n", dir);
-    return 1;
-  }
-  dstream = opendir(dir);
-  if (dstream == NULL) {
-    fprintf(stderr, "%s is not a readable directory\n", dir);
-    inotify_rm_watch(ifd, w->wd);
-    w->wd = -1;
-    return 1;
-  }
-  ent = readdir(dstream);
-  while (ent != NULL) {
-    if (strcmp(ent->d_name, ".") && strcmp(ent->d_name, ".."))
-      printf("E %s/%s\n", dir, ent->d_name);
-    ent = readdir(dstream);
-  }
-  closedir(dstream);
-  fflush(stdout);
-  return 0;
-}
-
-int main(int argc, char *argv[]) {
-  int ifd, rsize, off, done, nwatchers, i, result;
-  char typecode;
-  struct inotify_event *iev;
-  fd_set rfds;
-  struct watchdir *watchers;
-
-  done = 0;
-  nwatchers = argc - 1;
-  iev = (struct inotify_event *) ibuf;
-  ifd = inotify_init();
-  if (nwatchers == 0) {
-    watchers = malloc(sizeof(struct watchdir));
-    nwatchers = 1;
-    startwatch(ifd, ".", watchers);
-  }
-  else {
-    watchers = malloc(nwatchers * sizeof(struct watchdir));
-    for (i = 0; i < nwatchers; i++) {
-      startwatch(ifd, argv[i+1], watchers + i);
-    }
-  }
-
-  while (!done) {
-    FD_ZERO(&rfds);
-    FD_SET(0, &rfds);
-    FD_SET(ifd, &rfds);
-    result = select(ifd + 1, &rfds, NULL, NULL, NULL);
-    if (result < 0) {
-      /* Something went wrong. */
-      break;
-    }
-    if (FD_ISSET(ifd, &rfds)) {
-      off = 0;
-      rsize = read(ifd, ibuf, sizeof(struct inotify_event) + NAME_MAX + 1);
-      while (off < rsize) {
-        iev = (struct inotify_event *) (ibuf + off);
-        if (iev->mask & IN_CREATE)
-          typecode = 'C';
-        else if (iev->mask & IN_DELETE)
-          typecode = 'D';
-        else
-          typecode = '?';
-        for (i = 0; i < nwatchers; i++) {
-          if (watchers[i].wd == iev->wd)
-            printf("%c %s/%s\n", typecode, watchers[i].name, iev->name);
-        }
-        off += sizeof(struct inotify_event) + iev->len;
-      }
-      fflush(stdout);
-    }
-    if (FD_ISSET(0, &rfds)) {
-      result = read(0, &typecode, 1);
-      if (result <= 0) {
-        /* EOF on stdin: controlling process probably died. */
-        done = 1;
-      }
-      if (typecode == '\n')
-        done = 1;
-    }
-    
-  }
-  close(ifd);
-  return 0;
-}