return error;
}
+
+/* Obtains the modification time of the file named 'file_name' to the greatest
+ * supported precision. If successful, stores the mtime in '*mtime' and
+ * returns 0. On error, returns a positive errno value and stores zeros in
+ * '*mtime'. */
+int
+get_mtime(const char *file_name, struct timespec *mtime)
+{
+ struct stat s;
+
+ if (!stat(file_name, &s)) {
+ mtime->tv_sec = s.st_mtime;
+
+#if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+ mtime->tv_nsec = s.st_mtim.tv_nsec;
+#elif HAVE_STRUCT_STAT_ST_MTIMENSEC
+ mtime->tv_nsec = s.st_mtimensec;
+#else
+ mtime->tv_nsec = 0;
+#endif
+
+ return 0;
+ } else {
+ mtime->tv_sec = mtime->tv_nsec = 0;
+ return errno;
+ }
+}
+
int write_fully(int fd, const void *, size_t, size_t *bytes_written);
int fsync_parent_dir(const char *file_name);
+int get_mtime(const char *file_name, struct timespec *mtime);
#endif /* socket-util.h */
#include "packets.h"
#include "poll-loop.h"
#include "socket-util.h"
-#include "socket-util.h"
#include "util.h"
#include "stream-provider.h"
#include "stream.h"
return private_key.file_name || certificate.file_name || ca_cert.file_name;
}
-static void
-get_mtime(const char *file_name, struct timespec *mtime)
-{
- struct stat s;
-
- if (!stat(file_name, &s)) {
- mtime->tv_sec = s.st_mtime;
-
-#if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
- mtime->tv_nsec = s.st_mtim.tv_nsec;
-#elif HAVE_STRUCT_STAT_ST_MTIMENSEC
- mtime->tv_nsec = s.st_mtimensec;
-#else
- mtime->tv_nsec = 0;
-#endif
- } else {
- mtime->tv_sec = mtime->tv_nsec = 0;
- }
-}
-
static bool
update_ssl_config(struct ssl_config_file *config, const char *file_name)
{