Page 1 of 1

xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)

PostPosted: 26 Nov 2009, 01:01
by deathsoft
http://dlcorp.ucoz.ru/load/0-0-0-53-20

Говнокод был в следующем:
DWORD calculateCheckSum(BYTE* ptr, WORD size);
WORD crc(BYTE* ptr, WORD len);

длина была WORD - 16 бит, поэтому все и обламывалось если размер блока превышал 64кб.

Ну и вот это еще под вопросом:
DWORD checkSum = 0x255 + noFilesWritten (переменная типа байт);

Сумма двух байтов - дает байт

исправил на:
DWORD checkSum = 0x255UL + DWORD(noFilesWritten);

P.S. Полагаю что в следствие копипаста в остальных плугинах могут быть такиеже глюки (например в xSCL).

Re: xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)

PostPosted: 26 Nov 2009, 21:52
by deathsoft
Как я и думал, в xSCL используется тотже самый tools.cpp с глючным расчетом контрольных сумм. Исправленую версию выложу здесь.

Нашел еще один глюк, в самопальной реализации memcmp:

Code: Select all

int memcmp(const BYTE* p1, const BYTE* p2, int maxlen)
{
     if(!maxlen) return(0);
     while(maxlen-- && *p1 == *p2) { p1++; p2++; }
     return(*p1 - *p2);
}


При равенстве блоков - функция возвращает разность мусора вылезающего на 1 байт за конец сравниваемых блоков (должно быть --maxlen).

Т.ч. предыдущий плугин требует перекомпиляции и перезаливки.

Перезалил xTRD (ссылка старая).

Залил xSCL: http://dlcorp.ucoz.ru/load/0-0-0-54-20

Re: xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)

PostPosted: 27 Nov 2009, 12:49
by deathsoft
Авторы, проверьте остальные плугины на предмет этих же ошибок, наверняка они и там есть, если так, то исправьте перекомпилите и выложите на сайт новые версии dll.

Re: xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)

PostPosted: 27 Nov 2009, 14:39
by lvd
deathsoft wrote:DWORD checkSum = 0x255 + noFilesWritten (переменная типа байт);

Сумма двух байтов - дает байт

А ничего, что 0x255 - кагбе не байт?

Re: xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)

PostPosted: 27 Nov 2009, 16:21
by alone
Это 'S'+'I'+'N'+'C'+'L'+'A'+'I'+'R'. Естественно, не байт.

Re: xTRD плугин для FAR'а (исправил вот глюки с контрольными суммами)

PostPosted: 27 Nov 2009, 17:16
by deathsoft
lvd wrote:А ничего, что 0x255 - кагбе не байт?

Да я уж давно просек это, но и не факт что 4 байта, т.ч. UL не помешает.