On Sat, Aug 22, 2009 at 05:18:04AM +0400, Alexey Pechnikov wrote: > Hello! > > On Saturday 22 August 2009 02:01:18 Stanislav Maslovski wrote: > > И все равно еще далеко до идеала. ИМХО, случай, когда маску не указали > > вообще, т.е. isinnet( '127.0.0.1', '127.0.0.0' ) должен > > рассматриваться тоже как ошибка (у тебя в этом случае маска > > приравнивается к 0x00000001, и в итоге сравниваются два младших бита > > адреса и сети, зачем?). > > Если маска не указана, то она - 32. То есть задан простой ip-адрес.
Алексей, я же написал белым по черному, чему в этом случае равна у тебя переменная mask: 0x00000001, а не 0xffffffff, что могло бы соответствовать /32, раз тебе хочется воспринимать этот вызов так. static void isinnet2Func(): ... if (slashPos == NULL) { /* straight ip address without mask */ mask = (u_int32_t)1; .... } ... sqlite3_result_int( context, ((ad & mask) == (net & mask)) ); > > Плюс, как я уже замечал раньше, соответствие маски и адреса сети не > > проверяется. Например, > > > > isinnet( '192.168.0.1', '192.168.1.0/16' ) > > > > выдаст true, хотя комбинация '192.168.1.0/16' не имеет смысла. > > Почему не имеет? Абсолютно валидная запись, только избыточная. > Не вижу смысла требовать строгое приведение исходных данных > к _одной из возможных_ форм. Адрес сети по-определению имеет ненулевые биты только в разрядах, выделяемых маской сети. Ты бы про сети почитал бы что-нибудь, это полезно. PS: Представил себя в роли начальника над таким подчиненным. Вот такая картинка: уволить намедленно, по факту увольнения выплатить себе и всем сотрудникам дополнительные премиальные, закатить сабантуй на три дня. -- Stanislav -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org