За что мне это?
Sep. 17th, 2012 10:13 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Бездны крестиков
boost_1_49_0\libs\filesystem\v3\src\operations.cpp
https://gist.github.com/3735989
После рекурсивного вызова не проверяется ec, соответственно, если он сломается - ошибка будет возвращена от попытки create_directory, а не настоящая ошибка от рекурсивного вызова.
Надо бы поискать в баг-трекере или отрепортить это дело.
PS: В 1.51.0 баг починен.
boost_1_49_0\libs\filesystem\v3\src\operations.cpp
https://gist.github.com/3735989
После рекурсивного вызова не проверяется ec, соответственно, если он сломается - ошибка будет возвращена от попытки create_directory, а не настоящая ошибка от рекурсивного вызова.
Надо бы поискать в баг-трекере или отрепортить это дело.
PS: В 1.51.0 баг починен.
no subject
Date: 2012-09-17 07:15 am (UTC)no subject
Date: 2012-09-17 09:25 am (UTC)Если есть хоть какое-то обоснование, зачем, конечно ;-)
no subject
Date: 2012-09-17 07:31 am (UTC)Бездны крестиковой оккупации!
no subject
Date: 2012-09-17 08:49 am (UTC)no subject
Date: 2012-09-17 09:16 am (UTC)no subject
Date: 2012-09-17 09:24 am (UTC)no subject
Date: 2012-09-17 10:38 am (UTC)а ещё boost называется!
впрочем, версия уже не свежая
no subject
Date: 2012-09-17 10:52 am (UTC)no subject
Date: 2012-09-17 12:32 pm (UTC)а так, вообще, сам буст - очень даже гут
но вот если ковырнуть что-то типа asio, там граблей просто тонны
no subject
Date: 2012-09-17 01:06 pm (UTC)no subject
Date: 2012-09-17 01:06 pm (UTC)no subject
Date: 2012-09-17 01:14 pm (UTC)Конкретно сейчас я получаю вместо ERROR_ACCESS_DENIED - ERROR_PATH_NOT_FOUND, потому что рекурсивный вызов валится с первой ошибкой, ничего не проверяется и выполняется попытка вызвать create_directory, после чего возвращается уже другая ошибка.
И таки в 1.51.0 это переделано корректно.
no subject
Date: 2012-09-17 01:16 pm (UTC)Это что? Это не отваливается? Почему?
Путь должен быть exists и каждый его элемент должен быть директорией. Вот эта штука и свалится.
no subject
Date: 2012-09-17 01:18 pm (UTC)// First create branch, by calling ourself recursively
create_directories(p.parent_path(), ec);
// Now that parent's path exists, create the directory
create_directory(p, ec);
тут пропущено что-то вроде if(ec) return false;
но в новой версии они более сложным образом сделали, используя локальный error_code
no subject
Date: 2012-09-17 01:19 pm (UTC)Да, это баг, следует починить.
no subject
Date: 2012-09-17 01:20 pm (UTC)no subject
Date: 2012-09-17 09:58 pm (UTC)