[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Программирование на функциональных языках - как научить?



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


Reply to: