[Scummvm-devel] File handling revamp
Pawel Kolodziejski
aquadran at xtr.net.pl
Fri Aug 1 19:37:46 CEST 2008
On 2008-08-01, at 16:23, Max Horn wrote:
> Am Fr, 1.08.2008, 13:30, schrieb Torbjörn Andersson:
>> Max Horn wrote:
>>
>>> Hu? No, the String class has nothing to do with it. The only thing
>>> that
>>> is
>>> relevant here is that currently we alreays open files in binary
>>> mode,
>>> never in text mode, hence the system does not perform automatic
>>> endline
>>> conversion for us.
>>
>> I probably misunderstood him. (Or maybe he was talking about
>> residual,
>> but that might not make any difference either.)
>
> I just checked the logs. I guess what he meant was that writeString is
> simply using the same code as writeByte, so that it doesn't make a
> difference whether you write the char '\n' or the string "\n". True
> enough
> :)
>
>
Right, I thought it was cut in string class because I used only "\n",
but actualy it's not enought.
This way is good writeByte('\r'); and writeByte('\n');
>>
>>> Could you remind me again why we need to support this for anything
>>> but
>>> config files? :)
>>
>> I can't think of anything. I was thinking of a separate function
>> because
>> the config manager writes newlines in a couple of places.
>
> OK...
>
> Well then the quick&dirty and practical fix would be to just augment
> config-manager (and config-file ?). A more generic but still simple
> solution would be to add a new method
> int WriteStream::writeEndline() {
> #ifdef WIN
> return writeString("\r\n"); // or was it the other way around?
> Anyway,
> you get the idea
> #else
> return writeByte('\n');
> }
>
> That way we can still write clean code.
>
> Or, well, we introduce text mode for this, which of course would be
> the
> most generic and flexible solution (e.g. you could then just write
> arbitrary strings with newlines in them, w/o worrying about using
> writeEndline()). We could do that by either adding a new "textmode"
> flag
> to the open() method, or by adding a new TextFile class, which
> automatically enables this. Ports which don't have a separate
> textmode, or
> just don't want to worry about this, would have to implement no extra
> code.
>
>
> An intermediate solution would be to add a new wrapper stream class:
> TextWriteStream, which could encapsulate arbitrary streams, and when
> it
> detects a '\n' being written, it automatically converts it to another
> sequence (for systems which don't need it, it would just call
> through, so
> adding very little overhead).
> It would be easy to implement, and requieres nothing else to be
> changed.
>
> Finally, for the default config file: If we apply my patch from that
> other
> thread, then it is up to the backend to create the config file read/
> write
> streams, so it would be easy enough for a backend to use "fopen" in
> text
> mode (e.g. on Windows). Of course that doesn't cover custom config
> files.
>
>
>
>> The reason I brought it up here was because you said IRC wasn't a
>> good
>> place to discuss bugs/missing features. ;-)
>>
>
> Yes, that was perfectly right. Thanks for doing it!
>
> Cheers,
> Max
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's
> challenge
> Build the coolest Linux based applications with Moblin SDK & win
> great prizes
> Grand prize is a trip for two to an Open Source event anywhere in
> the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Scummvm-devel mailing list
> Scummvm-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/scummvm-devel
>
More information about the Scummvm-devel
mailing list