Anonymous avatar Anonymous committed c54e059

Add add_watch function.

Comments (0)

Files changed (1)

inotify/_inotify.c

     PyObject *ret = NULL;
     int fd = -1;
     
-    if (!PyArg_ParseTuple(args, ":init"))
+     if (!PyArg_ParseTuple(args, ":init"))
 	goto bail;
     
     fd = inotify_init();
-
     if (fd == -1) {
-	printf("bail\n");
-	ret = PyErr_SetFromErrno(PyExc_OSError);
+	PyErr_SetFromErrno(PyExc_OSError);
 	goto bail;
     }
 	
     return ret;
 }
 
-static char init_doc[] =
+PyDoc_STRVAR(
+    init_doc,
+    "init() -> fd\n"
+    "\n"
     "Initialise an inotify instance.\n"
-    "Returns a file descriptor associated with a new inotify event queue.";
+    "Return a file descriptor associated with a new inotify event queue.");
+
+static PyObject *pyinotify_add_watch(PyObject *self, PyObject *args)
+{
+    PyObject *ret = NULL;
+    uint32_t mask;
+    int wd = -1;
+    char *path;
+    int fd;
+
+    if (!PyArg_ParseTuple(args, "isI:add_watch", &fd, &path, &mask))
+	goto bail;
+
+    wd = inotify_add_watch(fd, path, mask);
+    if (wd == -1) {
+	PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
+	goto bail;
+    }
+    
+    ret = PyInt_FromLong(wd);
+    if (ret == NULL)
+	goto bail;
+    
+    goto done;
+    
+bail:
+    if (wd != -1)
+	inotify_rm_watch(fd, wd);
+    
+    Py_XDECREF(ret);
+
+done:
+    return ret;
+}
+
+PyDoc_STRVAR(
+    add_watch_doc,
+    "add_watch(fd, path, mask) -> wd\n"
+    "\n"
+    "Add a watch to an initialised inotify instance.\n"
+    "\n"
+    "        fd: file descriptor returned by init()\n"
+    "        path: path to watch\n"
+    "        mask: mask of events to watch for\n"
+    "\n"
+    "Return a numeric watch descriptor.");
 
 static PyMethodDef methods[] = {
     {"init", pyinotify_init, METH_VARARGS, init_doc},
+    {"add_watch", pyinotify_add_watch, METH_VARARGS, add_watch_doc},
     {NULL},
 };
     
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.