mirror of
https://github.com/troglobit/finit.git
synced 2026-10-02 05:52:48 +07:00
Use realpath in do_change() to ensure symlink directories are
correctly reloaded.
This commit is contained in:
+18
-8
@@ -1040,30 +1040,40 @@ static void drop_changes(void)
|
|||||||
static int do_change(char *dir, char *name, uint32_t mask)
|
static int do_change(char *dir, char *name, uint32_t mask)
|
||||||
{
|
{
|
||||||
char fn[strlen(dir) + strlen(name) + 2];
|
char fn[strlen(dir) + strlen(name) + 2];
|
||||||
|
char *rp;
|
||||||
struct conf_change *node;
|
struct conf_change *node;
|
||||||
|
|
||||||
paste(fn, sizeof(fn), dir, name);
|
paste(fn, sizeof(fn), dir, name);
|
||||||
dbg("path: %s mask: %08x", fn, mask);
|
dbg("path: %s mask: %08x", fn, mask);
|
||||||
|
|
||||||
node = conf_find(fn);
|
rp = realpath(fn, NULL);
|
||||||
|
if (!rp)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
node = conf_find(rp);
|
||||||
if (node) {
|
if (node) {
|
||||||
dbg("Event already registered for %s ...", name);
|
dbg("Event already registered for %s ...", name);
|
||||||
|
free(rp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
node = malloc(sizeof(*node));
|
node = malloc(sizeof(*node));
|
||||||
if (!node)
|
if (!node) {
|
||||||
return 1;
|
free(rp);
|
||||||
|
|
||||||
node->name = strdup(fn);
|
|
||||||
if (!node->name) {
|
|
||||||
free(node);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbg("Event registered for %s, mask 0x%x", fn, mask);
|
node->name = strdup(rp);
|
||||||
|
if (!node->name) {
|
||||||
|
free(node);
|
||||||
|
free(rp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg("Event registered for %s, mask 0x%x", rp, mask);
|
||||||
TAILQ_INSERT_HEAD(&conf_change_list, node, link);
|
TAILQ_INSERT_HEAD(&conf_change_list, node, link);
|
||||||
|
|
||||||
|
free(rp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user