>>5936Du brauchst nicht nur dietlibc, sondern auch die richtige Version. Zum Zeitpunkt der Veröffentlichung war das die Trunk-Version und nun die 0.34, weil in der damals aktuellen Version 0.33 noch einige Sachen nicht implementiert waren (z.B. SHA-Hashes und die Race-Condition-freie Version von realpath()). Außerdem muss libowfat dann auch gegen dietlibc gelinkt sein. Das ist alles nicht unbedingt gegeben, wenn man aus einem Repository installiert. Dependencies zu installieren ist sowieso immer mühsam. Ich wollte die Einstiegshürde so gering wie möglich halten. Man sollte es einfach runterladen können und einen Befehl ausführen können, um es zu kompilieren.
>Ich versuche es immer noch zum laufen zu bekommen. Ich schreibe wie im Beispiel gleich nach dem Öffnen in die neue Datei und der Bus-Error ist verschwunden. Jetzt ist ein neuer in db_hashmap_init und wieder mit byte_zero().
Versuch mal, die Datei gleich am Anfang auf eine größere Größe zu initialisieren. Die Datei wächst nämlich dynamisch, während sie gefüllt wird. Ich glaube, es ist aber offiziell undefiniertes Verhalten, wie mmap sich verhält, wenn man über das Dateiende hinausmappt (wusste ich zu dem Zeitpunkt aber auch nicht). Beispiel: Sagen wir mal du mappst 10 MB, aber deine Datei ist nur 2 MB groß. POSIX gibt dir die Garantie, dass du auf die ersten 2 MB zugreifen kannst. Wenn jetzt aber die Datei auf 4 MB wächst, dann ist nach POSIX nicht garantiert, dass du auf mehr als die ersten 2 MB zugreifen kannst, obwohl die 4 MB noch in den gemappten 10 MB sind. Unter Linux funktioniert es aber. Vielleicht geht das unter BSD nicht.
Lösung könnte sein, nach dem Vergrößern der Datei mmap erneut aufzurufen, mit MAP_FIXED als Flag. Dummerweise gibt es aber wiederum keine Garantie, dass MAP_FIXED auch beachtet wird. Aber solange sich die gemappte Größe nicht ändert, sehe ich keinen Grund, warum ein Betriebssystem das Flag nicht beachten sollte.
Ich würde es erst mal zum Testen damit probieren, die Datei gleich zu Anfang auf eine größere Größe zu initialisieren, z.B. auf 10 MB. Das sollte reichen (die db von dietchan.org ist aktuell 2.1 MB groß).