vsbackup2 als Nachfolger von vsbackup veröffentlicht

Submitted 5 months ago | Updated 24 days ago

Ich denke, vsbackup2 hat den Betastatus verlassen. Ich nutze meinen Scheiss jetzt schon mehrere Monate ohne große Probleme und heute habe ich wohl die letzten großen Bugs gefixt - die relativ komisch waren…

Ich hatte den Verdacht, das die unterstützte Pfadlänge trotz gesetztem Unicode-Schalter und entsprechendem Manifest nicht passt. Die Version 1.x verzichtet nämlich komplett auf den Unicode-Prefix \\?\, um Pfade länger als MAX_PATH zu benutzen (deswegen ist Windows 10 notwendig: weil ich faul bin!). Dazu soll man lt. Doku im Manifest der .exe einen entsprechenden Eintrag erstellen. Hatte ich gemacht. Und ich konnte nachweisen, das das Manifest in die .exe eingebunden wurde. Wie sich herausgestellt hat, lag es nicht daran…

  • Da waren Fehlermeldungen von nicht angelegten Backups von Dateien, die gar nicht existierten.
  • Es konnten manchmal keine Prüfsummen verglichen werden obwohl (angeblich) die Kopie erstellt wurde.
  • Nach der Aktualisierung auf VS2019 warnte mich die Entwicklungsumgebung, das ich möglicherweise einen Stackoverflow in genau derjenigen Routine produziere, die die SHA1 Prüfsumme erzeugt.

Beide Sachen ließen sich aber relativ einfach fixen.

  1. Wir verwenden das Schlüsselwort new, um die notwendigen Variablen zur Prüfsummenbildung auf dem Heap zu instanziieren anstatt auf dem Stack. Und natürlich achten wir penibel darauf, dass da keine Leaks zurück bleiben, sollten wir da irgendwie unsauber aus der Routine aussteigen ;)
  2. Wir prüfen die Rückgabewerte von GetFileAttributesEx! Zefix!!!

Update vom 13. Juni 2019: es stellt sich heraus, dass der Punkt 2) Es konnten manchmal keine Prüfsummen verglichen werden obwohl (angeblich) die Kopie erstellt wurde. doch nicht so trivial war. Beim Konvertieren eines std::wstring in einen std::string geht wohl über die gängige C++-UTF8 Methode Information verloren und is_open() schlägt fehlt. Ähh, nein! Ich mach es falsch. Jedenfalls akzeptiert std::ifstream auch einen std::wstring. Und das funktioniert nicht nur mit deutschen Umlauten sondern auch mit chinesischen Schriftzeichen! Yeahhh!!

Das muss auf jeden Fall untersucht werden! Normalerweise akzeptiert nur ein std::wifstream einen std::wstring. Das eine CHAR, das andere WCHAR_T. Wir sind also wieder beim BETA-Status!

Update vom 19. Juni 2019: Auf der Microsoft Platform unterstützt der Microsoft C++ Compiler für std::ifstream auch einen std::wstring als Parameter (siehe hier für VS2017 und auch hier für VS2019). Das Verhalten ist also korrekt (abgesehen davon, das es funktioniert). Und da vsbackup(2) aus naheliegenden Gründen nie für andere Betriebssysteme veröffentlicht werden wird, würde ich sagen: Das passt so!