On Thu, Aug 20, 2009 at 11:32:04PM +0400, Alexey Pechnikov wrote: > Hello! > > On Thursday 20 August 2009 23:01:54 Eugene V. Lyubimkin wrote: > > Это когда некоторый математик садится за компьютер и начинает > > программировать > > алгоритм. А потом смотришь на код и понимаешь, что в проект (условно) его не > > взять. Он чудовищен. > > Хм, не задумывался, как мы пишем на С, но вроде откровенно ужасный код писали > всего > несколько студентов у нас... Теперь давайте по существу - а вы тесты пишете? > ;-) > Если вас не затруднит, приведите примеры своих разработок на С (его все > знают, как > эталон пойдет) - интересно увидеть и сравнить. > > Из меня программист не ахти какой, моя работа больше архитектура ПО и > алгоритмика, > тем не менее, приведу ссылочку на свой код, например > http://mobigroup.ru/files/sqlite-ext/inet/ > Написано в "один проход", тем не менее, если где криво - пинайте, не > стесняйтесь. > Заодно многим людям поможете - расширение уже используется в разных проектах.
Мои "две копейки" (не как профессионала IT, упаси боже). Я не знаю, насколько в этом коде важна проверка аргументов на правильность, но тем не менее я вижу, что в функциях isinnetNFunc() маска подсети предполагается быть заданной либо а) числом, занимающим не более 2-х позиций; либо б) стандартной точечной записью. Случай "б" парсится библиотечной функцией с проверкой на ошибку, что есть ок. А вот случай "а", имхо, проверяется недостаточно. Более того, для преобразования в число используется функция atoi(), котрая не дает кода ошибки на выходе. Что будет, например, с таким вызовом? isinnet( '172.16.1.23', '172.16.1.0', 'aa' ) Имхо, переменная mask в этом случае окажется равной нулю (после всех действий со сдвигами и пр.) и проверка в конце функции всегда вернет true, не зависимо от ad и net. -- Stanislav -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org