summaryrefslogtreecommitdiff
path: root/libkmod
diff options
context:
space:
mode:
authorLucas De Marchi <lucas.demarchi@profusion.mobi>2012-01-17 12:10:42 -0200
committerLucas De Marchi <lucas.demarchi@profusion.mobi>2012-01-17 12:22:55 -0200
commit6068aaaea8e7cdc6039e6fd7a1aeab9db9d0225b (patch)
tree29417915f89114efc7562f2cc6c3cd89146469f5 /libkmod
parent09e9ae58b6b463bea083eb5bb57665b87c08a66c (diff)
downloadkmod-6068aaaea8e7cdc6039e6fd7a1aeab9db9d0225b.tar.gz
Check if struct stat has mtim member
Not all libc's have a mtim member in struct stat (dietlibc doesn't). Change ts_usec() to receive a struct stat as parameter and implement it accordingly for both cases.
Diffstat (limited to 'libkmod')
-rw-r--r--libkmod/libkmod-config.c2
-rw-r--r--libkmod/libkmod-index.c2
-rw-r--r--libkmod/libkmod-util.c10
-rw-r--r--libkmod/libkmod-util.h2
-rw-r--r--libkmod/libkmod.c2
5 files changed, 11 insertions, 7 deletions
diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c
index c1da16f..f970f9e 100644
--- a/libkmod/libkmod-config.c
+++ b/libkmod/libkmod-config.c
@@ -795,7 +795,7 @@ static int conf_files_list(struct kmod_ctx *ctx, struct kmod_list **list,
return err;
}
- *path_stamp = ts_usec(&st.st_mtim);
+ *path_stamp = stat_mstamp(&st);
if (S_ISREG(st.st_mode)) {
conf_files_insert_sorted(ctx, list, path, NULL);
diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c
index 9d3b939..c1c3c99 100644
--- a/libkmod/libkmod-index.c
+++ b/libkmod/libkmod-index.c
@@ -830,7 +830,7 @@ struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename,
idx->ctx = ctx;
close(fd);
- *stamp = ts_usec(&st.st_mtim);
+ *stamp = stat_mstamp(&st);
return idx;
diff --git a/libkmod/libkmod-util.c b/libkmod/libkmod-util.c
index 7c2611b..9a662b6 100644
--- a/libkmod/libkmod-util.c
+++ b/libkmod/libkmod-util.c
@@ -341,8 +341,12 @@ char *path_make_absolute_cwd(const char *p)
#define USEC_PER_SEC 1000000ULL
#define NSEC_PER_USEC 1000ULL
-unsigned long long ts_usec(const struct timespec *ts)
+unsigned long long stat_mstamp(const struct stat *st)
{
- return (unsigned long long) ts->tv_sec * USEC_PER_SEC +
- (unsigned long long) ts->tv_nsec / NSEC_PER_USEC;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ return (unsigned long long) st->st_mtim.tv_sec * USEC_PER_SEC +
+ (unsigned long long) st->st_mtim.tv_nsec / NSEC_PER_USEC;
+#else
+ return (unsigned long long) st->st_mtime;
+#endif
}
diff --git a/libkmod/libkmod-util.h b/libkmod/libkmod-util.h
index c9a1a21..317b2f7 100644
--- a/libkmod/libkmod-util.h
+++ b/libkmod/libkmod-util.h
@@ -24,6 +24,6 @@ char *path_make_absolute_cwd(const char *p) __must_check __attribute__((nonnull(
int alias_normalize(const char *alias, char buf[PATH_MAX], size_t *len) __must_check __attribute__((nonnull(1,2)));
char *modname_normalize(const char *modname, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(1, 2)));
char *path_to_modname(const char *path, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(2)));
-unsigned long long ts_usec(const struct timespec *ts);
+unsigned long long stat_mstamp(const struct stat *st);
#endif
diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c
index 91fdf7b..5edd594 100644
--- a/libkmod/libkmod.c
+++ b/libkmod/libkmod.c
@@ -620,7 +620,7 @@ static bool is_cache_invalid(const char *path, unsigned long long stamp)
if (stat(path, &st) < 0)
return true;
- if (stamp != ts_usec(&st.st_mtim))
+ if (stamp != stat_mstamp(&st))
return true;
return false;