diff --git a/src/System/Filesystem/FileTimestampChecker.cpp b/src/System/Filesystem/FileTimestampChecker.cpp new file mode 100644 index 0000000..9c69732 --- /dev/null +++ b/src/System/Filesystem/FileTimestampChecker.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "InputStreamWrapper.h" +#include "FileTimestampChecker.h" + +using namespace saracraft; + +/*bool FileTimestampChecker::IsFileNewerThanFile(const char* file, const char* secondFile) { + assert +}*/ + +bool FileTimestampChecker::IsFileNewerOrSameThanFile(const char* file, const char* secondfile) { + if(GetFileTimestamp(file) >= GetFileTimestamp(secondfile)) + return true; + else + return false; +} + +bool FileTimestampChecker::IsFileNewerOrAlmostSameThanFile(const char* file, const char* secondfile) { + // WARNING: Max 60 seconds older file is also accepted as newer.. + if(GetFileTimestamp(file) + 60 >= GetFileTimestamp(secondfile)) + return true; + else + return false; +} + +bool FileTimestampChecker::IsFileUpToDateComparedTo(const char* file, const char* secondfile) { + FILE* f = fopen(file, "rb"); + if(f) { + fclose(f); + return FileTimestampChecker::IsFileNewerOrAlmostSameThanFile(file, secondfile); + } + + filesystem::SC_FILE* fp = filesystem::sc_fopen(file, "rb"); + if(fp) { + filesystem::sc_fclose(fp); + return true; + } + return false; +} + + +#ifndef _MSC_VER +#define _stat stat + +#ifndef _WIN32_ +#define _fileno fileno +#endif + +#define _fstat fstat +#endif + + +int FileTimestampChecker::GetFileTimestamp(const char* file) { + struct _stat buf; + FILE* f; + int fh, result; + int ret; + + f = fopen(file, "rb"); + if(f == NULL) return -1; + + fh = _fileno(f); + + result = _fstat(fh, &buf); + + if(result != 0) { + return -1; + } else { + ret = int(buf.st_mtime); + } + fclose(f); + return ret; +} + diff --git a/src/System/Filesystem/FileTimestampChecker.h b/src/System/Filesystem/FileTimestampChecker.h new file mode 100644 index 0000000..2c5b7f6 --- /dev/null +++ b/src/System/Filesystem/FileTimestampChecker.h @@ -0,0 +1,17 @@ +#pragma once + +class FileTimestampChecker { +public: + // Check if the given file with given name has been modified after another + // file of given name. + // Return true if file *IS* newer. + + // This is not needed.... + //static bool IsFileNewerThanFile(const char* file, const char* secondfile); + static bool IsFileNewerOrSameThanFile(const char* file, const char* secondfile); + static bool IsFileNewerOrAlmostSameThanFile(const char* file, const char* secondfile); + static bool IsFileUpToDateComparedTo(const char* file, const char* secondfile); + + static int GetFileTimestamp(const char *file); +}; +