Ver Fonte

KWSys 2017-01-16 (a423d829)

Code extracted from:

    https://gitlab.kitware.com/utils/kwsys.git

at commit a423d82989a4b89fa7d17f3dd5215684e902208e (master).

Upstream Shortlog
-----------------

Ben Boeckel (1):
      45db0937 SystemTools: use PathExists where appropriate

Brad King (1):
      e08eee61 SystemTools: Fix conversion warning in test case

Eric Berge (1):
      687fcd79 Add -lsocket for libcmsys.a build on SunOS

Gregor Jasny (1):
      0541ce21 SystemTools: Fix off-by-one in GetLineFromStream with size limit
KWSys Upstream há 8 anos atrás
pai
commit
219c7bdcb1
3 ficheiros alterados com 60 adições e 7 exclusões
  1. 3 0
      CMakeLists.txt
  2. 4 7
      SystemTools.cxx
  3. 53 0
      testSystemTools.cxx

+ 3 - 0
CMakeLists.txt

@@ -818,6 +818,9 @@ IF(KWSYS_C_SRCS OR KWSYS_CXX_SRCS)
         # for symbol lookup using dladdr
         # for symbol lookup using dladdr
         TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE} ${CMAKE_DL_LIBS})
         TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE} ${CMAKE_DL_LIBS})
       ENDIF()
       ENDIF()
+      IF (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
+        TARGET_LINK_LIBRARIES(${KWSYS_NAMESPACE} socket)
+      ENDIF()
     ENDIF()
     ENDIF()
   ENDIF()
   ENDIF()
 
 

+ 4 - 7
SystemTools.cxx

@@ -763,7 +763,7 @@ bool SystemTools::MakeDirectory(const char* path)
 
 
 bool SystemTools::MakeDirectory(const std::string& path)
 bool SystemTools::MakeDirectory(const std::string& path)
 {
 {
-  if (SystemTools::FileExists(path)) {
+  if (SystemTools::PathExists(path)) {
     return SystemTools::FileIsDirectory(path);
     return SystemTools::FileIsDirectory(path);
   }
   }
   if (path.empty()) {
   if (path.empty()) {
@@ -1280,7 +1280,7 @@ bool SystemTools::PathCygwinToWin32(const char* path, char* win32_path)
 
 
 bool SystemTools::Touch(const std::string& filename, bool create)
 bool SystemTools::Touch(const std::string& filename, bool create)
 {
 {
-  if (!SystemTools::FileExists(filename)) {
+  if (!SystemTools::PathExists(filename)) {
     if (create) {
     if (create) {
       FILE* file = Fopen(filename, "a+b");
       FILE* file = Fopen(filename, "a+b");
       if (file) {
       if (file) {
@@ -4289,7 +4289,7 @@ bool SystemTools::GetLineFromStream(std::istream& is, std::string& line,
     // if we read too much then truncate the buffer
     // if we read too much then truncate the buffer
     if (leftToRead > 0) {
     if (leftToRead > 0) {
       if (static_cast<long>(length) > leftToRead) {
       if (static_cast<long>(length) > leftToRead) {
-        buffer[leftToRead - 1] = 0;
+        buffer[leftToRead] = 0;
         leftToRead = 0;
         leftToRead = 0;
       } else {
       } else {
         leftToRead -= static_cast<long>(length);
         leftToRead -= static_cast<long>(length);
@@ -4389,10 +4389,7 @@ bool SystemTools::SetPermissions(const char* file, mode_t mode,
 bool SystemTools::SetPermissions(const std::string& file, mode_t mode,
 bool SystemTools::SetPermissions(const std::string& file, mode_t mode,
                                  bool honor_umask)
                                  bool honor_umask)
 {
 {
-  // TEMPORARY / TODO:  After FileExists calls lstat() instead of
-  // access(), change this call to FileExists instead of
-  // TestFileAccess so that we don't follow symlinks.
-  if (!SystemTools::TestFileAccess(file, TEST_FILE_OK)) {
+  if (!SystemTools::PathExists(file)) {
     return false;
     return false;
   }
   }
   if (honor_umask) {
   if (honor_umask) {

+ 53 - 0
testSystemTools.cxx

@@ -6,11 +6,13 @@
 #pragma warning(disable : 4786)
 #pragma warning(disable : 4786)
 #endif
 #endif
 
 
+#include KWSYS_HEADER(FStream.hxx)
 #include KWSYS_HEADER(SystemTools.hxx)
 #include KWSYS_HEADER(SystemTools.hxx)
 
 
 // Work-around CMake dependency scanning limitation.  This must
 // Work-around CMake dependency scanning limitation.  This must
 // duplicate the above list of headers.
 // duplicate the above list of headers.
 #if 0
 #if 0
+#include "FStream.hxx.in"
 #include "SystemTools.hxx.in"
 #include "SystemTools.hxx.in"
 #endif
 #endif
 
 
@@ -857,6 +859,55 @@ static bool CheckFind()
   return res;
   return res;
 }
 }
 
 
+static bool CheckGetLineFromStream()
+{
+  const std::string fileWithFiveCharsOnFirstLine(TEST_SYSTEMTOOLS_SOURCE_DIR
+                                                 "/README.rst");
+
+  kwsys::ifstream file(fileWithFiveCharsOnFirstLine.c_str(), std::ios::in);
+
+  if (!file) {
+    std::cerr << "Problem opening: " << fileWithFiveCharsOnFirstLine
+              << std::endl;
+    return false;
+  }
+
+  std::string line;
+  bool has_newline = false;
+  bool result;
+
+  file.seekg(0, std::ios::beg);
+  result = kwsys::SystemTools::GetLineFromStream(file, line, &has_newline, -1);
+  if (!result || line.size() != 5) {
+    std::cerr << "First line does not have five characters: " << line.size()
+              << std::endl;
+    return false;
+  }
+
+  file.seekg(0, std::ios::beg);
+  result = kwsys::SystemTools::GetLineFromStream(file, line, &has_newline, -1);
+  if (!result || line.size() != 5) {
+    std::cerr << "First line does not have five characters after rewind: "
+              << line.size() << std::endl;
+    return false;
+  }
+
+  bool ret = true;
+
+  for (size_t size = 1; size <= 5; ++size) {
+    file.seekg(0, std::ios::beg);
+    result = kwsys::SystemTools::GetLineFromStream(file, line, &has_newline,
+                                                   static_cast<long>(size));
+    if (!result || line.size() != size) {
+      std::cerr << "Should have read " << size << " characters but got "
+                << line.size() << std::endl;
+      ret = false;
+    }
+  }
+
+  return ret;
+}
+
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 int testSystemTools(int, char* [])
 int testSystemTools(int, char* [])
 {
 {
@@ -893,5 +944,7 @@ int testSystemTools(int, char* [])
 
 
   res &= CheckFind();
   res &= CheckFind();
 
 
+  res &= CheckGetLineFromStream();
+
   return res ? 0 : 1;
   return res ? 0 : 1;
 }
 }