chdir-notify: add function to unregister listeners
While we (obviously) have a way to register new listeners that get called whenever we chdir(3p), we don't have an equivalent that can be used to unregister such a listener again. Add one, as it will be required in a subsequent commit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Nov 19, 2025 at 08:50 UTC
2574c617362a0c67d15fa01e01cdbd0f6bcdbc93
2 files changed
+20
chdir-notify.c
+18
@@ -25,6 +25,24 @@ void chdir_notify_register(const char *name,
25
list_add_tail(&e->list, &chdir_notify_entries);
26
}
27
28
+void chdir_notify_unregister(const char *name, chdir_notify_callback cb,
29
+ void *data)
30
+{
31
+ struct list_head *pos, *p;
32
+
33
+ list_for_each_safe(pos, p, &chdir_notify_entries) {
34
+ struct chdir_notify_entry *e =
35
+ list_entry(pos, struct chdir_notify_entry, list);
36
+
37
+ if (e->cb != cb || e->data != data || !e->name != !name ||
38
+ (e->name && strcmp(e->name, name)))
39
+ continue;
40
+
41
+ list_del(pos);
42
+ free(e);
43
+ }
44
+}
45
+
46
static void reparent_cb(const char *name,
47
const char *old_cwd,
48
const char *new_cwd,
chdir-notify.h
+2
@@ -41,6 +41,8 @@ typedef void (*chdir_notify_callback)(const char *name,
41
const char *new_cwd,
42
void *data);
43
void chdir_notify_register(const char *name, chdir_notify_callback cb, void *data);
44
+void chdir_notify_unregister(const char *name, chdir_notify_callback cb,
45
+ void *data);
46
void chdir_notify_reparent(const char *name, char **path);
47
48
/*