Skip to content
  • Peter Wu's avatar
    SystemTools: Fix GetLineFromStream to avoid libc++ bug on OS X 10.7 · 898dc6b9
    Peter Wu authored and Brad King's avatar Brad King committed
    LLVM libc++ as included with Mac OS X 10.7 suffers from an issue where
    the trailing character is discarded when the delimiter (LF) is not found
    within the given buffer size (1024).  The returned length is also 1024
    rather than 1023.
    
    This issue results in truncated reads as observed with CMake 3.11.0 on
    Mac OS X 10.7 and `cmake -E cmake_link_script link.txt`.
    
    Solve this by replacing `istream::getline` by `std::getline` which does
    not trigger the buffering issue.  There is one edge case that I decided
    to leave up to the callers though: a file containing `\0` previously
    resulted in line truncation, but is now included in the result.
    
    Tested with Mac OS X 10.7 and 10.11:
    
        -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 -DCMAKE_CXX_FLAGS=-stdlib=libc++
    
    and `./kwsysTestsCxx testSystemTools`.
    
    Issue: cmake/cmake#15039
    898dc6b9