diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/blogc-make/ctx.c | 39 | ||||
-rw-r--r-- | src/blogc-make/ctx.h | 21 | ||||
-rw-r--r-- | src/blogc-make/rules.c | 6 |
3 files changed, 42 insertions, 24 deletions
diff --git a/src/blogc-make/ctx.c b/src/blogc-make/ctx.c index 753aadf..636a39a 100644 --- a/src/blogc-make/ctx.c +++ b/src/blogc-make/ctx.c @@ -36,14 +36,13 @@ bm_filectx_new(bm_ctx_t *ctx, const char *filename) struct stat buf; if (0 != stat(f, &buf)) { - struct timespec ts; - ts.tv_sec = 0; - ts.tv_nsec = 0; - rv->timestamp = ts; + rv->tv_sec = 0; + rv->tv_nsec = 0; rv->readable = false; } else { - rv->timestamp = buf.st_mtim; + rv->tv_sec = buf.st_mtim_tv_sec; + rv->tv_nsec = buf.st_mtim_tv_nsec; rv->readable = true; } @@ -52,7 +51,7 @@ bm_filectx_new(bm_ctx_t *ctx, const char *filename) bool -bm_filectx_changed(bm_filectx_t *ctx, struct timespec *ts) +bm_filectx_changed(bm_filectx_t *ctx, time_t *tv_sec, long *tv_nsec) { if (ctx == NULL) return false; @@ -60,16 +59,20 @@ bm_filectx_changed(bm_filectx_t *ctx, struct timespec *ts) struct stat buf; if (0 == stat(ctx->path, &buf)) { - if (buf.st_mtim.tv_sec == ctx->timestamp.tv_sec) { - if (buf.st_mtim.tv_nsec > ctx->timestamp.tv_nsec) { - if (ts != NULL) - *ts = buf.st_mtim; + if (buf.st_mtim_tv_sec == ctx->tv_sec) { + if (buf.st_mtim_tv_nsec > ctx->tv_nsec) { + if (tv_sec != NULL) + *tv_sec = buf.st_mtim_tv_sec; + if (tv_nsec != NULL) + *tv_nsec = buf.st_mtim_tv_nsec; return true; } } - else if (buf.st_mtim.tv_sec > ctx->timestamp.tv_sec) { - if (ts != NULL) - *ts = buf.st_mtim; + else if (buf.st_mtim_tv_sec > ctx->tv_sec) { + if (tv_sec != NULL) + *tv_sec = buf.st_mtim_tv_sec; + if (tv_nsec != NULL) + *tv_nsec = buf.st_mtim_tv_nsec; return true; } } @@ -84,12 +87,14 @@ bm_filectx_reload(bm_filectx_t *ctx) if (ctx == NULL) return; - struct timespec ts; + time_t tv_sec; + long tv_nsec; - if (!bm_filectx_changed(ctx, &ts)) + if (!bm_filectx_changed(ctx, &tv_sec, &tv_nsec)) return; - ctx->timestamp = ts; + ctx->tv_sec = tv_sec; + ctx->tv_nsec = tv_nsec; ctx->readable = true; } @@ -222,7 +227,7 @@ bm_ctx_reload(bm_ctx_t *ctx) if (ctx == NULL || ctx->settings_fctx == NULL) return false; - if (bm_filectx_changed(ctx->settings_fctx, NULL)) { + if (bm_filectx_changed(ctx->settings_fctx, NULL, NULL)) { // reload everything! we could just reload settings_fctx, as this // would force rebuilding everything, but we need to know new/deleted // files diff --git a/src/blogc-make/ctx.h b/src/blogc-make/ctx.h index e36fa4c..67d0a7d 100644 --- a/src/blogc-make/ctx.h +++ b/src/blogc-make/ctx.h @@ -16,15 +16,28 @@ #include "../common/utils.h" #ifdef __APPLE__ -#ifndef st_mtim -#define st_mtim st_mtimespec +#define st_mtim_tv_sec st_mtimespec.tv_sec +#define st_mtim_tv_nsec st_mtimespec.tv_nsec #endif + +#ifdef __ANDROID__ +#define st_mtim_tv_sec st_mtime +#define st_mtim_tv_nsec st_mtime_nsec +#endif + +#ifndef st_mtim_tv_sec +#define st_mtim_tv_sec st_mtim.tv_sec #endif +#ifndef st_mtim_tv_nsec +#define st_mtim_tv_nsec st_mtim.tv_nsec +#endif + typedef struct { char *path; char *short_path; - struct timespec timestamp; + time_t tv_sec; + long tv_nsec; bool readable; } bm_filectx_t; @@ -50,7 +63,7 @@ typedef struct { } bm_ctx_t; bm_filectx_t* bm_filectx_new(bm_ctx_t *ctx, const char *filename); -bool bm_filectx_changed(bm_filectx_t *ctx, struct timespec *ts); +bool bm_filectx_changed(bm_filectx_t *ctx, time_t *tv_sec, long *tv_nsec); void bm_filectx_reload(bm_filectx_t *ctx); void bm_filectx_free(bm_filectx_t *fctx); bm_ctx_t* bm_ctx_new(bm_ctx_t *base, const char *settings_file, diff --git a/src/blogc-make/rules.c b/src/blogc-make/rules.c index ca4b376..52afb2d 100644 --- a/src/blogc-make/rules.c +++ b/src/blogc-make/rules.c @@ -790,13 +790,13 @@ bm_rule_need_rebuild(bc_slist_t *sources, bm_filectx_t *settings, rv = true; break; } - if (source->timestamp.tv_sec == output->timestamp.tv_sec) { - if (source->timestamp.tv_nsec > output->timestamp.tv_nsec) { + if (source->tv_sec == output->tv_sec) { + if (source->tv_nsec > output->tv_nsec) { rv = true; break; } } - else if (source->timestamp.tv_sec > output->timestamp.tv_sec) { + else if (source->tv_sec > output->tv_sec) { rv = true; break; } |