Inotify watch
=============

Datastructure to keep track of watch descriptors and their relationship (tree) on the filesystem. +
This exists because if symlinks are watched. inotify does not report on subdirectories (files/directories arent actualy removed) so this information needs to be stored.

Data Structures
---------------

* `struct watch`

`tree`::
    The N-ary tree data

`wd`::
    Watchdescriptor

`path`::
    The path.

Functions
---------

`inotify_watch_new()`::

    Allocates a new `watch` structure.
+
NOTE: content of 'path' is *not* copied or modified.

`inotify_watch_destroy()`::

    Recursivly deallocates an tree of watches.

`inotify_watch_add()`::

    Add the 'watch' to exist as a child to 'parent'. +
    The function will move children from 'parent' down to
    'watch' if their '->path' member are (textualy) a parent of 'watch'. +
    +
    Consider the following tree:
+
----
(/)
 \
  (/mnt/) --- (/var/a/) --- (/var/b)
   \
    (/mnt/c/)
     \
      (/mnt/c/a/)
----
+
Adding '/var/' as child to '/' will result in '/var/a' and '/var/b' being moved to '/var/'.
+
----
(/)
 \
  (/mnt/) --- (/var/)
   \           \
    (/mnt/c/)   (/var/a/) --- (/var/b)
     \
      (/mnt/c/a/)

----

`inotify_watch_rm()`::

    Remove 'watch' from the tree.
+
NOTE: *only* 'watch' itself is removed, it's children are still in the tree.

`inotify_watch_find_child()`::

    Finds the child by comparing 'path' against childs ->path member. +
    Returns a pointer to the matched child, `NULL` if no child could be found.
