dirt po raz trzeci, na x64: a1-dirtpatch3
Tagi:  •    •  

Wracając z zaświatów postanowiłem umieścić patcha do dirt'a, który umożliwia kompilację i poprawne jego działanie na architekturach x64. Decyzją było to, że to już trzeci patch do tego martwego softu - i jak tu nie lubić open source? :)

Poprzednie patche możesz znaleźć tutaj i tutaj, jednak trzeci patch zawiera już oba poprzednie. Tak więc należy ściągnąć oryginalny kod źródłowy ze oficjalnej strony dirt'a i...

  1. antek@hydra ~/dev/cpp $ aunpack dirt-1.0.0a25-source.zip
  2. (...)
  3.  
  4. antek@hydra ~/dev/cpp $ cd dirt-1.0.0a25-source/
  5. antek@hydra ~/dev/cpp $ wget anadoxin.org/blog/files/u1/a1-dirtpatch3.diff
  6. antek@hydra ~/dev/cpp/dirt-1.0.0a25-source $ patch -p1 < a1-dirtpatch3.diff
  7. patching file bin2c.cpp
  8. patching file define.h
  9. patching file fish.cpp
  10. patching file misc.cpp
  11. patching file proxy.cpp
  12. patching file proxy.h
  13. patching file unix.cpp
  14.  
  15. antek@hydra ~/dev/cpp/dirt-1.0.0a25-source $ make unix

Po wydaniu ostatniego polecenia powinna nastąpić kompilacja dirt'a i powstanie binarki dirt. :)

Patch poprawia błąd dotyczący funkcji exit w pliku bin2c.cpp - co było powodem błędu kompilacji, oraz umożliwia poprawne działanie na architekturze x64. Konkretnie, w kodzie znajduje się kilka deklaracji zmiennych oznaczonych specyfikatorami unsigned long. Autor dirta najwyraźniej odciukał swoje w czasach 16-bitowego DOS'a, ponieważ specyfikatorów tych używał dla zmiennych, które powinny być 32-bitowe. Dla normalnych środowisk wystarczy użyć int'a aby stworzyć zmienną 32bit (w DOS stworzy zmienną 16-bit) i to jest właśnie ta preferowana metoda... ponieważ long dla 64-bitów stworzy zmienną 64-bit, a int - 32-bit. Z tego powodu zaczęły rozjeżdżać się struktury, w efekcie program brał pod uwagę nie te offsety co trzeba ;).

Patch do pobrania możesz ściągnąć stąd.