Hi All,

I apologize if this has been brought up before, but I couldn't find any mention of it. I think the filesystem component of boost v1.33 currently available as part of the cygwin distribution has been compiled incorrectly. As mentioned here: http://boost.org/libs/filesystem/doc/index.htm#Cgywin (sic), it is necessary to compile with -DBOOST_POSIX on cygwin for POSIX emulation to work properly; otherwise it uses Windows file names only and does not work as expected. Here is a simple demonstration:

////////////////////////////
#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/exception.hpp>
namespace bfs = boost::filesystem;

int main(int argc, char **argv) {
        //arg checking omitted
        try     {
                bfs::directory_iterator di(argv[1]);
        }
        catch (bfs::filesystem_error &ex)   {
                std::cerr << ex.what() << '\n';
        }
}
////////////////////////////

If you pass something Windows can handle as the argument, such as ".", then this program works as expected. If you pass a cygwin path, such
as "~" or "/cygdrive/c", it throws an exception:

boost::filesystem::directory_iterator constructor: "\home\Lewis": The system cannot find the path specified.

or

boost::filesystem::directory_iterator constructor: "\cygdrive\c": The system cannot find the path specified.

I believe this is precisely the consequence of omitting -DBOOST_POSIX but cannot confirm with certainty.

Thanks very much to whoever maintains this.

-Lewis

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to