Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

(cpp, Windows) Что значит этот код?

215  
anly коренной житель15.08.17 10:33
anly
15.08.17 10:33 

// check that one path is symbolic link to another one
bool tefCheckSymbolicLink(LPCTSTR pFistPath, LPCTSTR pSecondPath)
{
_ _ bool isSymLink = false;
_ _ HANDLE hSource = ::CreateFile(pFistPath, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
_ _ HANDLE hDest = ::CreateFile(pSecondPath, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
_ _ if (INVALID_HANDLE_VALUE != hSource && INVALID_HANDLE_VALUE != hDest)
_ _ {
_ __ _ BY_HANDLE_FILE_INFORMATION infoSource;
_ __ _ BY_HANDLE_FILE_INFORMATION infoDest;

_ __ _ if (::GetFileInformationByHandle(hSource, &infoSource) && ::GetFileInformationByHandle(hSource, &infoDest))
_ _ _ _{

_ _ _ __ _ if (infoSource.dwVolumeSerialNumber == infoDest.dwVolumeSerialNumber &&
_ _ _ _ _ _ _ _ infoSource.nFileIndexLow == infoDest.nFileIndexLow &&
_ _ _ _ _ _ _ _ infoSource.nFileIndexHigh == infoDest.nFileIndexHigh)
_ _ _ _ _ _{
_ _ _ _ _ _ _ _ // File already exists in the destination because source and destination are symlinks.
_ _ _ _ _ _ _ _ isSymLink = true;
_ _ _ _ _ _}
_ _ _ _ }
_ _ }

_ _ ::CloseHandle(hSource);
_ _ ::CloseHandle(hDest);

_ _ return isSymLink;
}


То что два раза hSource - это похоже лажа. (или нет?)

Но если я меняю второе место на hDest, то я никогда не попадаю (дебагером проверял) на isSymLink=true, даже если второй файл есть точная копия первого (только в разных папках), даже когда оба являются *.lnk (ссылаются на один и тот же файл).

Проклят нарушающий межи ближнего своего (Втор.27:17)
#1 
Murr патриот15.08.17 11:12
Murr
NEW 15.08.17 11:12 
в ответ anly 15.08.17 10:33

даже когда оба являются *.lnk (ссылаются на один и тот же файл)

------

Хммм... Начни с создания symbolic link:

https://serverfault.com/questions/75397/how-do-you-create-...

#2 
anly коренной житель15.08.17 13:09
anly
NEW 15.08.17 13:09 
в ответ Murr 15.08.17 11:12

да были у меня подозрения что symbolic link это нечто другое чем ярлыки. Но я никогда с ними не сталкивался (а может не замечал?).

Проклят нарушающий межи ближнего своего (Втор.27:17)
#3 
Murr патриот15.08.17 13:22
Murr
NEW 15.08.17 13:22 
в ответ anly 15.08.17 13:09

Начиная с ХП их есть местами... Просто незаметны...

#4 
anly коренной житель15.08.17 14:03
anly
NEW 15.08.17 14:03 
в ответ Murr 15.08.17 13:22

Все. Спасибо за наводку!

Сделал нард-линку и протестил.

Значит все таки там была лажа с хэндлом.

Проклят нарушающий межи ближнего своего (Втор.27:17)
#5 
dymanoid знакомое лицо15.08.17 19:48
dymanoid
NEW 15.08.17 19:48 
в ответ anly 15.08.17 10:33, Последний раз изменено 15.08.17 19:50 (dymanoid)

Как же меня бесит нотация Йоды, которая здесь ни к селу ни к городу вообще...

Автор кода неадекватен.

#6 
anly коренной житель15.08.17 23:51
anly
NEW 15.08.17 23:51 
в ответ dymanoid 15.08.17 19:48

меня кстати тоже бесит, т.к. это противоречит нормальному человеческому мышлению. Люди так не думают.

Однако автора именно этого кода я знаю (он уволился несколько лет назад) - весьма сильный удаленный программер из России.

Проклят нарушающий межи ближнего своего (Втор.27:17)
#7 
dymanoid знакомое лицо16.08.17 08:47
dymanoid
NEW 16.08.17 08:47 
в ответ anly 15.08.17 23:51

И на старуху бывает проруха. Во-первых, копипаст-ошибка в коде. Во-вторых, язык Йоды там, где он ну вообще не оправдан. По задумке он применяется только при операции "равно", чтобы обезопаситься от случайного присваивания. Но "не равно"-то тут причем?

#8 
Murr патриот16.08.17 09:46
Murr
NEW 16.08.17 09:46 
в ответ dymanoid 16.08.17 08:47

Но "не равно"-то тут причем?

-----

Про унификацию что-то слыхал?

Ну вот и пишет чел в одном стиле. Оно - вполне оправдано- бо, от Ёды головка бо-бо, а от смешения - уже ой, бо-бо...

#9 
dymanoid знакомое лицо16.08.17 09:52
dymanoid
NEW 16.08.17 09:52 
в ответ Murr 16.08.17 09:46

Задом-наперёд думающих вас не понять мне. Вся эта хрень устарела сто лет назад, современные IDE и статические анализаторы кода ловят нечаянное присвоение на раз. Йода для "гуру", кто в блокноте код пишет. Но вот пусть тогда они сами его майнтейнят.

#10 
Murr патриот16.08.17 10:05
Murr
NEW 16.08.17 10:05 
в ответ dymanoid 16.08.17 09:52

современные IDE и статические анализаторы кода ловят

-----

Ну а мы скобочки добавим - С/С++ против них ничего не имеет - любой анализатор все в скобочках и пропустит...

С/С++ допускают произвольное выражение в качестве условия - в них есть смысл в Ёдовской нотации.

В шарпе уже требуется выражение с булевым результатом - вот там меня Ёдовская нотация поражает.


кто в блокноте код пишет.

-----

Ну Я, например, пишу. Не часто, но приходится.

Просто на продактион-сервер не имею права ничего ставить, а некоторые мелочи сделаны по-разному у меня на девевелопменте и на продактионе. И проще всего - в Блокноте поправить...


Кстати, после генерации - тоже проще посмотреть что интересует именно в Блокноте... Ну или в Нотепаде++...

#11 
dymanoid знакомое лицо16.08.17 20:47
dymanoid
NEW 16.08.17 20:47 
в ответ Murr 16.08.17 10:05, Последний раз изменено 16.08.17 20:48 (dymanoid)

Не знаю, что там за скобочки у тебя хитрые, а нормальные статические анализаторы находят и не такие вещи.


И это понятно, что в шараш-монтаж конторах такие спецы типа тебя на продакшене в блокноте код правят.

А я имел в виду настоящую разработку ПО.

#12 
Murr патриот17.08.17 00:10
Murr
NEW 17.08.17 00:10 
в ответ dymanoid 16.08.17 20:47

Не знаю, что там за скобочки у тебя хитрые

-----

А просто скобочки. Ни к чему не обязывающие скобочки. Типа таких

if((x=2)) { ... }


А я имел в виду настоящую...

-----

Ну и имел Я в виду "настоящую"... смущ

#13 
anly коренной житель17.08.17 18:14
anly
NEW 17.08.17 18:14 
в ответ Murr 17.08.17 00:10

по-мойму лучше иногда натыкаться на ошибки и их исправлять, чем постоянно смотреть код что мозги выкручивает.

Второй случай как раз провоцирует идейные ошибки (а не опечатки), т.к. анализ такого кода труднее для понимания и сопровождения, требует больше сил, ведет к усталости и тд.

Проклят нарушающий межи ближнего своего (Втор.27:17)
#14 
Murr патриот17.08.17 18:41
Murr
NEW 17.08.17 18:41 
в ответ anly 17.08.17 18:14

лучше иногда натыкаться на ошибки

-----

Натыкаться - это... хорошо.

Правда на именно эти ошибки практически никогда не натыкаешься - глюк вылезает непонятно где...


Что до мозговорота с Ёдовской нотацией - у меня тоже от нее голова болит.

Так что если требуют - делаю. Выглядит во многих случаях более чем смешно - требования оформления констант часто не позволяют различать что именно используется,

Для себя - нет, но комментирую факт использования присопа. Если нет коммента - должно быть сравнение. Так и живем...

#15