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