- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
int
grub_auth_strcmp (const char *user_input, const char *template)
{
int ok = 1;
const char *ptr1, *ptr2;
for (ptr1 = user_input, ptr2 = template; *ptr1; ptr1++)
if (*ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ok && ptr2 != NULL)
ptr2++;
else
ok = 0;
return !ok;
}
xaionaro 27.06.2010 05:45 # +2
Ещё меня лично напрягает, когда цикл проходит до конца, не смотря на то, что ok уже может быть выставлен на ноль. Я бы прерывал цикл при первом же несовпадении.
xXx_totalwar 27.06.2010 10:00 # 0
xaionaro 27.06.2010 10:48 # 0
Хотя вы правы, конкретно в данной реализации, данная функция нах не нужна, в худшем случае можно было и заглушку поставить, если это промежуточный вариант функции. :(
cfdev 27.06.2010 12:29 # +5
Чувак, это загрузка ядра. libc там не очень как бы доступен.
xaionaro 27.06.2010 15:03 # +1
gpr 28.06.2010 15:04 # 0
cfdev 28.06.2010 16:32 # 0
cfdev 27.06.2010 12:49 # +5
Разрабы grub'а мучаются насчёт того, что по длительности работы этой функции можно определить, какой символ не совпал (грубо говоря, не совпал первый символ - функция проработала 1 мс, не совпал десятый - 10 мс). В новой реализации они на что-то вроде (100 - n) мс делают sleep :)
xaionaro 27.06.2010 15:06 # +2
Wеbkill 27.06.2010 17:21 # −15
TarasB 27.06.2010 11:32 # 0
lexa 28.06.2010 09:27 # 0
где ошибка в логике? почему принимается любвя подстрока?
xaionaro 28.06.2010 11:45 # 0
Wеbkill 28.06.2010 13:14 # −9
xaionaro 28.06.2010 17:35 # 0
Wеbkill 28.06.2010 22:54 # −5
guest6 29.05.2024 06:50 # 0
guest6 29.05.2024 06:56 # 0
guest6 29.05.2024 06:59 # 0
guest6 29.05.2024 07:02 # 0
guest6 29.05.2024 07:05 # 0
guest6 29.05.2024 07:21 # 0
guest6 29.05.2024 08:51 # 0
guest6 29.05.2024 12:51 # 0
guest6 30.05.2024 06:51 # 0
guest6 01.06.2024 06:51 # 0
guest6 05.06.2024 06:51 # 0
guest6 18.07.2024 06:51 # 0
guest6 06.09.2024 06:51 # 0
guest 23.03.2012 18:19 # 0
guest 23.03.2012 18:24 # 0