list_add_tail(&e->list, &chdir_notify_entries);
}
+void chdir_notify_unregister(const char *name, chdir_notify_callback cb,
+ void *data)
+{
+ struct list_head *pos, *p;
+
+ list_for_each_safe(pos, p, &chdir_notify_entries) {
+ struct chdir_notify_entry *e =
+ list_entry(pos, struct chdir_notify_entry, list);
+
+ if (e->cb != cb || e->data != data || !e->name != !name ||
+ (e->name && strcmp(e->name, name)))
+ continue;
+
+ list_del(pos);
+ free(e);
+ }
+}
+
static void reparent_cb(const char *name,
const char *old_cwd,
const char *new_cwd,
const char *new_cwd,
void *data);
void chdir_notify_register(const char *name, chdir_notify_callback cb, void *data);
+void chdir_notify_unregister(const char *name, chdir_notify_callback cb,
+ void *data);
void chdir_notify_reparent(const char *name, char **path);
/*