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

Редакторы, ассемблеры, дисковые утилиты и другие системки

Postby deathsoft » 26 Nov 2009, 01:01

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).
Last edited by deathsoft on 26 Nov 2009, 01:02, edited 1 time in total.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 26 Nov 2009, 21:52

Как я и думал, в 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
Last edited by deathsoft on 26 Nov 2009, 23:25, edited 1 time in total.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 27 Nov 2009, 12:49

Авторы, проверьте остальные плугины на предмет этих же ошибок, наверняка они и там есть, если так, то исправьте перекомпилите и выложите на сайт новые версии dll.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby lvd » 27 Nov 2009, 14:39

deathsoft wrote:DWORD checkSum = 0x255 + noFilesWritten (переменная типа байт);

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

А ничего, что 0x255 - кагбе не байт?
Last edited by lvd on 27 Nov 2009, 14:40, edited 1 time in total.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby alone » 27 Nov 2009, 16:21

Это 'S'+'I'+'N'+'C'+'L'+'A'+'I'+'R'. Естественно, не байт.
User avatar
alone
 
Posts: 152
Joined: 04 Jun 2007, 20:04
Group: Registered users

Postby deathsoft » 27 Nov 2009, 17:16

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

Да я уж давно просек это, но и не факт что 4 байта, т.ч. UL не помешает.
User avatar
deathsoft
 
Posts: 4744
Joined: 07 Apr 2007, 00:58
Group: Registered users


Return to Utilities

Who is online

Users browsing this forum: Google [Bot] and 1 guest

cron