Hallo!
Ich habe eine Fritzbox 7390 und habe mittels des Entwicklerzweiges von Oliver ein Freetz erstellt.
Ich möchte nun den unfs3 benutzen und haben mir ein Paket dafür gebaut. Das compiled auch wunderbar und erstellt mir ein Freetz mit dem unfs3 drin.
Ein Problem war nun, dass sich NFS Freigaben von der Fritzbox zur Dreambox (Linux Satellitenreceiver) zwar wunderbar mounten ließen, aber sobald man eine Datei öffnete, wurden falsche Daten vom unfs3 ausgeliefert. Genauergesagt stimmte immer nur der erste gepufferte Teil (beim mounten angegebene rsize), alles was danach kam, war Müll.
Ich habe das Problem soweit identifiziert, dass der unfs3 die Funktion pread nutzt und als Offset in die Datei einen 64 Bit wert rein gibt, die Funktion in der uclibc aber offenbar einen 32 Bit Wert erwartet, obwohl die uclibc mit Large File Support gebaut ist.
Wenn ich nun im unfs3 Quellcode den pread Aufruf durch pread64 ersetze, funktioniert die Datenübertragung wunderbar. Also schein hier das Problem zu liegen.
Ich weiss nun nicht, wie ich die Sache fixen kann. In unistd.h der uclibc gibt es eine #ifdef Weiche in Zeile 334. Hier wird __USE_FILE_OFFSET64 abgeprüft und im Falle, dass es gesetzt ist (und __REDIRECT nicht) wird pread einfach auf pread64 define'd. Meines Erachtens ist das doch genau der Sinn des Large File Support und dieser Weg sollte vom Compiler genommen werden - wird aber offensichtlich nicht.
Während des compilens des unf3 Pakets sehe ich auch, wie mittles der -D Option das define _FILE_OFFSET_BITS=64 gesetzt wird, aber nicht __USE_FILE_OFFSET64, wie es die uclibc scheinbar braucht.
Hat jemand ne Idee, wie ich weiter machen kann um das Problem ordenlich zu beheben oder weiter einzugrenzen?
Danke schonmal,
poeschell
Ich habe eine Fritzbox 7390 und habe mittels des Entwicklerzweiges von Oliver ein Freetz erstellt.
Ich möchte nun den unfs3 benutzen und haben mir ein Paket dafür gebaut. Das compiled auch wunderbar und erstellt mir ein Freetz mit dem unfs3 drin.
Ein Problem war nun, dass sich NFS Freigaben von der Fritzbox zur Dreambox (Linux Satellitenreceiver) zwar wunderbar mounten ließen, aber sobald man eine Datei öffnete, wurden falsche Daten vom unfs3 ausgeliefert. Genauergesagt stimmte immer nur der erste gepufferte Teil (beim mounten angegebene rsize), alles was danach kam, war Müll.
Ich habe das Problem soweit identifiziert, dass der unfs3 die Funktion pread nutzt und als Offset in die Datei einen 64 Bit wert rein gibt, die Funktion in der uclibc aber offenbar einen 32 Bit Wert erwartet, obwohl die uclibc mit Large File Support gebaut ist.
Wenn ich nun im unfs3 Quellcode den pread Aufruf durch pread64 ersetze, funktioniert die Datenübertragung wunderbar. Also schein hier das Problem zu liegen.
Ich weiss nun nicht, wie ich die Sache fixen kann. In unistd.h der uclibc gibt es eine #ifdef Weiche in Zeile 334. Hier wird __USE_FILE_OFFSET64 abgeprüft und im Falle, dass es gesetzt ist (und __REDIRECT nicht) wird pread einfach auf pread64 define'd. Meines Erachtens ist das doch genau der Sinn des Large File Support und dieser Weg sollte vom Compiler genommen werden - wird aber offensichtlich nicht.
Während des compilens des unf3 Pakets sehe ich auch, wie mittles der -D Option das define _FILE_OFFSET_BITS=64 gesetzt wird, aber nicht __USE_FILE_OFFSET64, wie es die uclibc scheinbar braucht.
Hat jemand ne Idee, wie ich weiter machen kann um das Problem ordenlich zu beheben oder weiter einzugrenzen?
Danke schonmal,
poeschell