]> gitweb.hamatoma.de Git - crepublib/commitdiff
Windows corrections, ReDirSync
authorhama <hama@siduction.net>
Mon, 26 Jan 2015 23:55:51 +0000 (00:55 +0100)
committerhama <hama@siduction.net>
Mon, 26 Jan 2015 23:55:51 +0000 (00:55 +0100)
base/ReByteBuffer.cpp
base/ReTestUnit.cpp
base/rebase.hpp
cunit/cuReTraverser.cpp
math/ReRandomizer.cpp
os/ReDirTools.cpp
os/ReTraverser.cpp

index 25bd8e5bfd8b6247eed6de138e46b2d8fa9e2ec5..c61d1eb407951fa3c08ab5f8b51a0311077e355a 100644 (file)
@@ -260,7 +260,7 @@ int ReByteBuffer::count(const char* toCount, size_t lengthToCount){
  * Tests whether the buffer ends with a given a byte sequence.
  *
  * @param tail                 the byte sequence to test
- * @param tailLength -1: <code>strlen(tail)</code><br>
+ * @param tailLength   -1: <code>strlen(tail)</code><br>
  *                                             otherwise: the length of <code>tail</code>
  * @param ignoreCase   <code>true</code>: the comparison is case insensitive<br>
  *                                             <code>false</code>: the comparison is case sensitive<br>
index af49e6a4345808cb0853d442c714c2833ddb5465..c2f3a684eee5f877094ac7281f3736d7360d8d38 100644 (file)
@@ -230,7 +230,7 @@ void ReTestUnit::createTestDir(){
        #define ALLPERMS 0
        #endif
                if (lstat(name, &info) != 0)
-                       _mkdir(name);
+                       _mkdir(name, ALLPERMS);
                else{
                        char cmd[512 + 128];
                        _snprintf(cmd, sizeof cmd, "rm -Rf %s*", name);
@@ -311,7 +311,7 @@ void ReTestUnit::createFile(const char* filename, const char* content){
  * @param content      the content of the file. If NULL the file will be empty
  */
 void ReTestUnit::createDir(const char* filename){
-       _mkdir(filename);
+       _mkdir(filename, ALLPERMS);
 }
 
 
index 6f327bb4a81960e4532bf7be58fc5c76d8492821..a623bce330b72d1b2d0a3316d53a4dff2c54b8d9 100644 (file)
@@ -37,7 +37,7 @@ typedef u_int64_t uint64_t;
 #      define _stricmp(s1, s2) strcasecmp(s1, s2)
 #      define _snprintf snprintf
 #      define _memcmp(t,s,n) memcmp(t,s,n)
-#      define _mkdir(path) mkdir(path, ALLPERMS)
+#      define _mkdir(path, mode) mkdir(path, mode)
 #      define OS_SEPARATOR_CHAR '/'
 #      define OS_SEPARATOR "/"
 #elif defined __WIN32__
@@ -51,6 +51,8 @@ typedef u_int64_t uint64_t;
     typedef unsigned long long uint64_t;
     typedef unsigned char uint8_t;
 #      define S_ISDIR(mode) (((mode) & _S_IFDIR) != 0)
+#      define ALLPERMS 0
+#      define _mkdir(name, mode) _mkdir(name)
 #endif
 
 #define RE_TESTUNIT
index 245105b12335d1e4fb5fcda65fda8bda32a65bd6..064cdee229faa6174e56feabaf522a881e5406d3 100644 (file)
@@ -17,7 +17,7 @@ public:
        TestReTraverser() : ReTestUnit("ReTraverser", __FILE__){
         m_base = testDir();
         m_base.append("traverser").append(OS_SEPARATOR, -1);
-        _mkdir(m_base.str());
+        _mkdir(m_base.str(), ALLPERMS);
                run();
        }
 private:
@@ -28,7 +28,7 @@ private:
         m_buffer = m_base;
         m_buffer.append(relPath);
         m_buffer.replaceAll("/", 1, OS_SEPARATOR, -1);
-        _mkdir(m_buffer.str());
+        _mkdir(m_buffer.str(), ALLPERMS);
         struct stat info;
         if (stat(m_buffer.str(), &info) != 0){
             logF(true, "cannot create dir %1$s", m_buffer.str());
index 7ff8cad78a6c6731b17853f6481266f277995751..0c55da96bb79255366fd01c5eec0f5d0f825c2d3 100644 (file)
@@ -24,8 +24,9 @@ ReRandomizer::ReRandomizer()
 ReRandomizer::~ReRandomizer() {
 }
 
+#if defined __linux__
 inline int abs(int x) { return x < 0 ? -x : x; }
-
+#endif
 /**
  * @brief Returns the next random character.
  *
@@ -123,7 +124,7 @@ int64_t ReRandomizer::nextInt64(int64_t maxValue, int64_t minValue){
                rc = minValue + seed % (maxValue - minValue + 1);
        else {
                // int64 overflow: we need a higher precision:
-               double rc2 = minValue + fmod((double) seed, maxValue - minValue);
+               double rc2 = (double) minValue + fmod((double) seed, (double) (maxValue - minValue));
                rc = (int) rc2;
        }
        if (s_trace){
index 5c3632fe560d173ca95d180115f59bf99aca8e14..ce6c5cf8551ad11183a52a6d28360d8a46663204 100644 (file)
@@ -1082,8 +1082,8 @@ void ReDirSync::copyFile(ReDirStatus_t* entry, const char* target){
        props = &entry->m_status;
 #else
        ReFileProperties_t properties;
-       properties.m_modified = entry->modified();
-       properties.m_accessed = entry->accessed();
+       properties.m_modified = *entry->modified();
+       properties.m_accessed = *entry->accessed();
        properties.m_size = entry->fileSize();
        props = &properties;
 #endif
@@ -1179,8 +1179,9 @@ bool ReDirSync::copyFile(const char* source, ReFileProperties_t* properties,
  */
 bool ReDirSync::setProperties(const char* fullName,
                ReFileProperties_t* properties, ReLogger* logger){
-       struct utimbuf times;
        bool rc = true;
+#if defined __linux__
+       struct utimbuf times;
        times.actime = properties->st_atime;
        times.modtime = properties->st_mtime;
        if (utime(fullName, &times) != 0){
@@ -1204,6 +1205,7 @@ bool ReDirSync::setProperties(const char* fullName,
                                .arg(fullName).arg(errno).end();
                rc = false;
        }
+#endif
        return rc;
 }
 
@@ -1222,9 +1224,9 @@ bool ReDirSync::makeDirectory(const char* directory, int minLength,
        ReByteBuffer path(directory);
        int start = 0;
 #if defined __WIN32__
-       start = path.indexOf(":");
+       start = path.indexOf(':');
 #endif
-       int ixSlash = start;
+       int ixSlash = start < 0 ? 0 : start;
        struct stat info;
        // for all parents and the full path itself:
        while(ixSlash >= 0){
@@ -1240,7 +1242,7 @@ bool ReDirSync::makeDirectory(const char* directory, int minLength,
                // does the node exist?
                if (lstat(path.str(), &info) != 0){
                        // no, then we make it:
-                       if (mkdir(path.str(), 0) != 0){
+                       if (_mkdir(path.str(), ALLPERMS) != 0){
                                if (logger != NULL)
                                        logger->sayF(LOG_ERROR, LC_MAKE_DIR_1,
                                                i18n("could not make directory $1 (errno: $2)"))
@@ -1249,14 +1251,7 @@ bool ReDirSync::makeDirectory(const char* directory, int minLength,
                                break;
                        } else {
 #if defined __linux__
-                               if (properties != NULL){
-                                       //@ToDo: file time
-                                       if (chown(path.str(), properties->st_uid,
-                                               properties->st_gid) != 0 && logger != NULL)
-                                                       logger->sayF(LOG_ERROR, LC_MAKE_DIR_2,
-                                                               i18n("could not change owner/group of directory $1 (errno: $2)"))
-                                                                       .arg(path.str()).arg(errno).end();
-                               }
+                               setProperties(path.str(), properties);
 #endif
                        }
                }
@@ -1316,7 +1311,7 @@ void ReDirSync::synchronize(int argc, const char* argv[]){
             if (! source.endsWith(sep, 1)){
                 // the basename of the source will be appended to the target:
                 int startNode = source.rindexOf(sep, 1, 0, source.length() - 1);
-                target.append(source.str() + startNode, -1); 
+                target.append(source.str() + startNode + 1, -1);
             }
             size_t ixSourceRelative = source.length();
             size_t ixTargetRelative = target.length();
index 3a621419f95bd325725a7f489c3af6bc987336c4..6c0923eedbc9fdb34b7c42d811d3ba4f09a51a81 100644 (file)
@@ -157,6 +157,23 @@ bool ReDirStatus_t::findNext(){
 ReDirStatus_t::Type_t ReDirStatus_t::type(){\r
     Type_t rc = TF_UNDEF;\r
 #if defined __linux__\r
+       int flags = m_status.st_mode;\r
+    if (flags == 0 || S_ISREG(flags))\r
+        rc = TF_REGULAR;\r
+    else if (S_ISDIR(flags)){\r
+        rc = TF_SUBDIR;\r
+    } else if (S_ISLNK(flags))\r
+        rc = TF_LINK;\r
+    else if (S_ISCHR(flags))\r
+        rc = TF_CHAR;\r
+    else if (S_ISBLK(flags))\r
+        rc = TF_BLOCK;\r
+    else if (S_ISFIFO(flags))\r
+        rc = TF_PIPE;\r
+    else if (S_ISSOCK(flags))\r
+        rc = TF_SOCKET;\r
+    else\r
+        rc = TF_OTHER;\r
 #elif defined __WIN32__\r
     int flags = (m_data.dwFileAttributes & ~(FILE_ATTRIBUTE_READONLY\r
         | FILE_ATTRIBUTE_HIDDEN  \r
@@ -354,7 +371,8 @@ bool ReDirEntryFilter_t::match(ReDirStatus_t& entry){
                        break;\r
                if (m_maxAge != 0 && ReDirStatus_t::filetimeToTime(entry.modified()) < m_maxAge)\r
                        break;\r
-               if (m_nodePatterns != NULL && ! m_nodePatterns->match(entry.node()))\r
+               const char* node = entry.node();\r
+               if (m_nodePatterns != NULL && ! m_nodePatterns->match(node))\r
                        break;\r
                rc = true;\r
        } while(false);\r