diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-08-02 12:24:54 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-08-02 12:24:54 +0530 |
commit | 2f49f0b828edcdb80991f9896b56623570a4ad53 (patch) | |
tree | 3ab65c43858f75996b4414329d4b7191ff0c05ce /src | |
parent | 01dab20082d978365177fa2a13ecde163be2a5e7 (diff) |
main: don't track changes in dot directories or the output directory
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 32 |
1 files changed, 30 insertions, 2 deletions
@@ -158,6 +158,9 @@ main(int argc, char **argv) char *buffer = malloc(BUFFER_SIZE); + char *dot_directory; + asprintf(&dot_directory, "%s/.", msg->base_directory); + while (!stop) { size_t i = 0; size_t length = read(inotify_fd, buffer, BUFFER_SIZE); @@ -176,8 +179,32 @@ main(int argc, char **argv) if (event->len) { if (event->mask & IN_MODIFY) { - printf("\n\n"); - r = run(); + + for (size_t i = 0; i < wds->size; i++) { + int *wd = list_get(wds, i); + + if (*wd == event->wd) { + char *directory_name; + + char *name = unwrap(list_get(directory_names, i)); + asprintf(&directory_name, "%s/%s", name, event->name); + + /* don't track changes in dot directories or the output directory + */ + if (strncmp(directory_name, dot_directory, strlen(dot_directory)) + != 0 + && strncmp(directory_name, + msg->output_directory, + strlen(msg->output_directory)) + != 0) { + printf("\n\n"); + r = run(); + } + + free(directory_name); + break; + } + } } else if (event->mask & IN_CREATE && event->mask & IN_ISDIR) { for (size_t i = 0; i < wds->size; i++) { int *wd = list_get(wds, i); @@ -198,6 +225,7 @@ main(int argc, char **argv) p += sizeof(struct inotify_event) + event->len; } } + free(dot_directory); for (size_t i = 0; i < wds->size; i++) { char *name = unwrap(list_get(directory_names, i)); |