Stefan Schuermans commited on 2017-10-28 20:23:07
Showing 6 changed files, with 200 additions and 25 deletions.
| ... | ... |
@@ -1,9 +1,9 @@ |
| 1 | 1 |
CONFIG := |
| 2 | 2 |
DEFINE := |
| 3 | 3 |
INCLUDE := -Icommon |
| 4 |
-CFLAGS := -Wall -Wextra -Werror -O2 |
|
| 5 |
-LDFLAGS := |
|
| 6 |
-LIBS := -lBlinkenLib |
|
| 4 |
+CFLAGS := -Wall -Wextra -Werror -O2 $(EXTRA_CFLAGS) |
|
| 5 |
+LDFLAGS := $(EXTRA_LDFLAGS) |
|
| 6 |
+LIBS := -lBlinkenLib $(EXTRA_LIBS) |
|
| 7 | 7 |
TARGET := Blinker |
| 8 | 8 |
ifeq ($(CROSS_WIN),1) |
| 9 | 9 |
CXX := x86_64-w64-mingw32-g++ |
| ... | ... |
@@ -0,0 +1,90 @@ |
| 1 |
+/* Blinker |
|
| 2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
| 3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
| 4 |
+ a blinkenarea.org project */ |
|
| 5 |
+ |
|
| 6 |
+#include <dirent.h> |
|
| 7 |
+#include <string> |
|
| 8 |
+#include <string.h> |
|
| 9 |
+#include <sys/stat.h> |
|
| 10 |
+#include <sys/types.h> |
|
| 11 |
+#include <unistd.h> |
|
| 12 |
+ |
|
| 13 |
+#include "Directory.h" |
|
| 14 |
+#include "File.h" |
|
| 15 |
+ |
|
| 16 |
+namespace Blinker {
|
|
| 17 |
+ |
|
| 18 |
+/** |
|
| 19 |
+ * @brief constructor from path |
|
| 20 |
+ * @param[in] path path to directory |
|
| 21 |
+ */ |
|
| 22 |
+Directory::Directory(const std::string &path): |
|
| 23 |
+ File(path) |
|
| 24 |
+{
|
|
| 25 |
+ if (m_path.empty() || m_path.at(m_path.length() - 1) != '\\' |
|
| 26 |
+ || m_path.at(m_path.length() - 1) != '/') |
|
| 27 |
+ m_path += '\\'; |
|
| 28 |
+} |
|
| 29 |
+ |
|
| 30 |
+/** |
|
| 31 |
+ * @brief get list of entries in directory |
|
| 32 |
+ * @param[in] type type of directory entries to return |
|
| 33 |
+ * @param[out] entries list of directory entries |
|
| 34 |
+ */ |
|
| 35 |
+void Directory::getEntries(Type type, std::list<std::string> &entries) const |
|
| 36 |
+{
|
|
| 37 |
+ entries.clear(); |
|
| 38 |
+ |
|
| 39 |
+ if (m_path.empty()) |
|
| 40 |
+ return; |
|
| 41 |
+ DIR *dir = opendir(m_path.c_str()); |
|
| 42 |
+ if (!dir) |
|
| 43 |
+ return; |
|
| 44 |
+ |
|
| 45 |
+ struct dirent *dirent; |
|
| 46 |
+ while ((dirent = readdir(dir))) {
|
|
| 47 |
+ if (strcmp(dirent->d_name, ".") && strcmp(dirent->d_name, "..") ) {
|
|
| 48 |
+ |
|
| 49 |
+ struct stat s; |
|
| 50 |
+ if (stat((m_path + dirent->d_name).c_str(), &s)) |
|
| 51 |
+ continue; // cannot stat -> silently ignore |
|
| 52 |
+ |
|
| 53 |
+ bool ok = false; |
|
| 54 |
+ switch (type) {
|
|
| 55 |
+ case TypeSubdir: ok = S_ISDIR(s.st_mode); break; |
|
| 56 |
+ case TypeFile: ok = S_ISREG(s.st_mode); break; |
|
| 57 |
+ } |
|
| 58 |
+ if (ok) |
|
| 59 |
+ entries.push_back(dirent->d_name); |
|
| 60 |
+ |
|
| 61 |
+ } // if ! "." && ! ".." |
|
| 62 |
+ } // while dirent |
|
| 63 |
+ |
|
| 64 |
+ closedir(dir); |
|
| 65 |
+ |
|
| 66 |
+ entries.sort(); |
|
| 67 |
+} |
|
| 68 |
+ |
|
| 69 |
+/** |
|
| 70 |
+ * @brief get subdirectory |
|
| 71 |
+ * @param[in] name of subdirectory |
|
| 72 |
+ * @return subdirectory object |
|
| 73 |
+ */ |
|
| 74 |
+Directory Directory::getSubdir(const std::string &name) const |
|
| 75 |
+{
|
|
| 76 |
+ return Directory(m_path + name); |
|
| 77 |
+} |
|
| 78 |
+ |
|
| 79 |
+/** |
|
| 80 |
+ * @brief get file in directory |
|
| 81 |
+ * @param[in] name of file |
|
| 82 |
+ * @return file object |
|
| 83 |
+ */ |
|
| 84 |
+File Directory::getFile(const std::string &name) const |
|
| 85 |
+{
|
|
| 86 |
+ return File(m_path + name); |
|
| 87 |
+} |
|
| 88 |
+ |
|
| 89 |
+} // namespace Blinker |
|
| 90 |
+ |
| ... | ... |
@@ -0,0 +1,59 @@ |
| 1 |
+/* Blinker |
|
| 2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
| 3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
| 4 |
+ a blinkenarea.org project */ |
|
| 5 |
+ |
|
| 6 |
+#ifndef BLINKER_DIRECTORY_H |
|
| 7 |
+#define BLINKER_DIRECTORY_H |
|
| 8 |
+ |
|
| 9 |
+#include <list> |
|
| 10 |
+#include <string> |
|
| 11 |
+ |
|
| 12 |
+#include "File.h" |
|
| 13 |
+ |
|
| 14 |
+namespace Blinker {
|
|
| 15 |
+ |
|
| 16 |
+/// information about a directory |
|
| 17 |
+class Directory: public File |
|
| 18 |
+{
|
|
| 19 |
+public: |
|
| 20 |
+ /// type of directory entries |
|
| 21 |
+ enum Type {
|
|
| 22 |
+ TypeSubdir, ///< subdirectory |
|
| 23 |
+ TypeFile ///< file |
|
| 24 |
+ }; |
|
| 25 |
+ |
|
| 26 |
+public: |
|
| 27 |
+ /** |
|
| 28 |
+ * @brief constructor from path |
|
| 29 |
+ * @param[in] path path to directory |
|
| 30 |
+ */ |
|
| 31 |
+ Directory(const std::string &path); |
|
| 32 |
+ |
|
| 33 |
+public: |
|
| 34 |
+ /** |
|
| 35 |
+ * @brief get list of entries in directory |
|
| 36 |
+ * @param[in] type type of directory entries to return |
|
| 37 |
+ * @param[out] entries list of directory entries |
|
| 38 |
+ */ |
|
| 39 |
+ void getEntries(Type type, std::list<std::string> &entries) const; |
|
| 40 |
+ |
|
| 41 |
+ /** |
|
| 42 |
+ * @brief get subdirectory |
|
| 43 |
+ * @param[in] name of subdirectory |
|
| 44 |
+ * @return subdirectory object |
|
| 45 |
+ */ |
|
| 46 |
+ Directory getSubdir(const std::string &name) const; |
|
| 47 |
+ |
|
| 48 |
+ /** |
|
| 49 |
+ * @brief get file in directory |
|
| 50 |
+ * @param[in] name of file |
|
| 51 |
+ * @return file object |
|
| 52 |
+ */ |
|
| 53 |
+ File getFile(const std::string &name) const; |
|
| 54 |
+}; // class Directory |
|
| 55 |
+ |
|
| 56 |
+} // namespace Blinker |
|
| 57 |
+ |
|
| 58 |
+#endif // #ifndef BLINKER_DIRECTORY_H |
|
| 59 |
+ |
| ... | ... |
@@ -4,7 +4,9 @@ |
| 4 | 4 |
a blinkenarea.org project */ |
| 5 | 5 |
|
| 6 | 6 |
#include <string> |
| 7 |
-#include <windows.h> |
|
| 7 |
+#include <sys/stat.h> |
|
| 8 |
+#include <sys/types.h> |
|
| 9 |
+#include <unistd.h> |
|
| 8 | 10 |
|
| 9 | 11 |
#include "File.h" |
| 10 | 12 |
#include "Time.h" |
| ... | ... |
@@ -37,27 +39,12 @@ const std::string & File::getPath() |
| 37 | 39 |
*/ |
| 38 | 40 |
bool File::checkModified() |
| 39 | 41 |
{
|
| 40 |
- // get handle to file |
|
| 41 |
- HANDLE handle = CreateFile(m_path.c_str(), GENERIC_READ, |
|
| 42 |
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, |
|
| 43 |
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
|
| 44 |
- if (handle == INVALID_HANDLE_VALUE) {
|
|
| 45 |
- return false; // cannot open -> silently ignore |
|
| 46 |
- } |
|
| 47 |
- |
|
| 48 |
- // get last write time |
|
| 49 |
- FILETIME wrTime; |
|
| 50 |
- if (! GetFileTime(handle, NULL, NULL, &wrTime)) {
|
|
| 51 |
- CloseHandle(handle); |
|
| 52 |
- return false; // cannot get last write time -> silently ignore |
|
| 53 |
- } |
|
| 54 |
- |
|
| 55 |
- // close handle |
|
| 56 |
- CloseHandle(handle); |
|
| 57 |
- |
|
| 58 |
- // modification time is last write time |
|
| 59 |
- Time modifyTime; |
|
| 60 |
- modifyTime.fromFileTime(wrTime); |
|
| 42 |
+ // get modification/change times |
|
| 43 |
+ struct stat s; |
|
| 44 |
+ if (stat(m_path.c_str(), &s)) |
|
| 45 |
+ return false; // cannot stat -> silently ignore |
|
| 46 |
+ Time modifyTime(s.st_mtime); |
|
| 47 |
+ // s.st_ctime not valid for FAT filesystems, so do not use it |
|
| 61 | 48 |
|
| 62 | 49 |
// consider file modified if modify time changed since last check |
| 63 | 50 |
bool mod = modifyTime > m_lastModifyTime; |
| ... | ... |
@@ -0,0 +1,20 @@ |
| 1 |
+/* Blinker |
|
| 2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
| 3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
| 4 |
+ a blinkenarea.org project */ |
|
| 5 |
+ |
|
| 6 |
+#include <winsock2.h> |
|
| 7 |
+#include <stdint.h> |
|
| 8 |
+ |
|
| 9 |
+#include "NetHost.h" |
|
| 10 |
+ |
|
| 11 |
+namespace Blinker {
|
|
| 12 |
+ |
|
| 13 |
+/// convert 32 bit unsigned integer from network to host byte order |
|
| 14 |
+uint32_t Net2Host32(uint32_t val) |
|
| 15 |
+{
|
|
| 16 |
+ return ntohl(val); |
|
| 17 |
+} |
|
| 18 |
+ |
|
| 19 |
+} // namespace Blinker |
|
| 20 |
+ |
| ... | ... |
@@ -0,0 +1,19 @@ |
| 1 |
+/* Blinker |
|
| 2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
| 3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
| 4 |
+ a blinkenarea.org project */ |
|
| 5 |
+ |
|
| 6 |
+#ifndef BLINKER_NETHOST_H |
|
| 7 |
+#define BLINKER_NETHOST_H |
|
| 8 |
+ |
|
| 9 |
+#include <stdint.h> |
|
| 10 |
+ |
|
| 11 |
+namespace Blinker {
|
|
| 12 |
+ |
|
| 13 |
+/// convert 32 bit unsigned integer from network to host byte order |
|
| 14 |
+uint32_t Net2Host32(uint32_t val); |
|
| 15 |
+ |
|
| 16 |
+} // namespace Blinker |
|
| 17 |
+ |
|
| 18 |
+#endif // #ifndef BLINKER_NETHOST_H |
|
| 19 |
+ |
|
| 0 | 20 |