Ticket #11166: boost-11166-fs-remove-race.patch

File boost-11166-fs-remove-race.patch, 1.8 KB (added by Jeff Epler <jepler@…>, 8 years ago)

Proposed fix

  • libs/filesystem/src/operations.cpp

    diff -Nru a/libs/filesystem/src/operations.cpp b/libs/filesystem/src/operations.cpp
    a b  
    200200#   define BOOST_CREATE_DIRECTORY(P)(::mkdir(P, S_IRWXU|S_IRWXG|S_IRWXO)== 0)
    201201#   define BOOST_CREATE_HARD_LINK(F,T)(::link(T, F)== 0)
    202202#   define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(::symlink(T, F)== 0)
    203 #   define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0)
    204 #   define BOOST_DELETE_FILE(P)(::unlink(P)== 0)
     203#   define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0 || errno == ENOENT)
     204#   define BOOST_DELETE_FILE(P)(::unlink(P)== 0 || errno == ENOENT)
    205205#   define BOOST_COPY_DIRECTORY(F,T)(!(::stat(from.c_str(), &from_stat)!= 0\
    206206         || ::mkdir(to.c_str(),from_stat.st_mode)!= 0))
    207207#   define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool)
     
    219219#   define BOOST_CREATE_DIRECTORY(P)(::CreateDirectoryW(P, 0)!= 0)
    220220#   define BOOST_CREATE_HARD_LINK(F,T)(create_hard_link_api(F, T, 0)!= 0)
    221221#   define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(create_symbolic_link_api(F, T, Flag)!= 0)
    222 #   define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0)
    223 #   define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0)
     222#   define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0 || ::GetLastError() == ERROR_FILE_NOT_FOUND)
     223#   define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0 || ::GetLastError() == ERROR_FILE_NOT_FOUND)
    224224#   define BOOST_COPY_DIRECTORY(F,T)(::CreateDirectoryExW(F, T, 0)!= 0)
    225225#   define BOOST_COPY_FILE(F,T,FailIfExistsBool)(::CopyFileW(F, T, FailIfExistsBool)!= 0)
    226226#   define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED)!= 0)