Commit 5786b0b025e423f956afb157f1478abd951ddb2a
Handle source file replaced instead of just modified
cel committed on 10/24/2016, 11:00:29 PMParent: fd156cd03b6fce3c933ce1edb725e8e6e74e7be4
Files changed
ccdl.c | changed |
ccdl.c | ||
---|---|---|
@@ -120,17 +120,19 @@ | ||
120 | 120 … | |
121 | 121 … | static int ccdl_watch_run(struct ccdl *ccdl) |
122 | 122 … | { |
123 | 123 … | int ifd = inotify_init(); |
124 … | + int wd = 0; | |
124 | 125 … | if (ifd < 0) { |
125 | 126 … | warn("inotify_init"); |
126 | 127 … | return -1; |
127 | 128 … | } |
128 | 129 … | if (!ccdl || !ccdl->lib || !ccdl->lib->src_fname) { |
129 | 130 … | warn("missing lib filename"); |
130 | 131 … | return -1; |
131 | 132 … | } |
132 | - if (inotify_add_watch(ifd, ccdl->lib->src_fname, IN_MODIFY) < 0) { | |
133 … | + wd = inotify_add_watch(ifd, ccdl->lib->src_fname, IN_MODIFY); | |
134 … | + if (wd < 0) { | |
133 | 135 … | warn("watch"); |
134 | 136 … | return -1; |
135 | 137 … | } |
136 | 138 … | |
@@ -149,13 +151,22 @@ | ||
149 | 151 … | if (ev.len > 0) { |
150 | 152 … | warn("unexpected name"); |
151 | 153 … | return -1; |
152 | 154 … | } |
153 | - if (!(ev.mask & IN_MODIFY)) { | |
155 … | + if (ev.mask & IN_MODIFY) { | |
156 … | + } else if (ev.mask & IN_DELETE_SELF) { | |
157 … | + printf("deleted\n"); | |
158 … | + } else if (ev.mask & IN_IGNORED) { | |
159 … | + printf("ignored\n"); | |
160 … | + // file is being replaced. replace the watch | |
161 … | + wd = inotify_add_watch(ifd, ccdl->lib->src_fname, IN_MODIFY); | |
162 … | + if (wd < 0) { | |
163 … | + warn("inotify_add_watch"); | |
164 … | + return -1; | |
165 … | + } | |
166 … | + } else { | |
154 | 167 … | printf("unknown mask: %u\n", ev.mask); |
155 | - continue; | |
156 | 168 … | } |
157 | - | |
158 | 169 … | (void)ccdl_rebuild(ccdl); |
159 | 170 … | } |
160 | 171 … | |
161 | 172 … | return 0; |
Built with git-ssb-web