Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
August 02, 2010 std.file.read | ||||
---|---|---|---|---|
| ||||
Can you tell me why std.file.read() returns a void[] instead of something like a ubyte[]? (Performing a cast(ubyte[]) in SafeD can be a problem. I presume in SafeD I have to use other safer functions to load binary data, like slurp() or something similar.) Bye, bearophile |
August 02, 2010 Re: std.file.read | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 02.08.2010 5:23, bearophile wrote: > Can you tell me why std.file.read() returns a void[] instead of something like a ubyte[]? > > Well, it magically converts to whatever array type you have. So this works: ubyte[] data = read("trash.txt"); It's interesting fact deserving further investigation. It seems that void[] arrays are converted implicitly, this also works: void[] tr = malloc(20)[0..20]; data = tr; > (Performing a cast(ubyte[]) in SafeD can be a problem. I presume in SafeD I have to use other safer functions to load binary data, like slurp() or something similar.) > > Bye, > bearophile > -- Dmitry Olshansky |
August 02, 2010 Re: std.file.read | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dmitry Olshansky | Dmitry Olshansky:
> Well, it magically converts to whatever array type you have. So this works: ubyte[] data = read("trash.txt");
In more than tree years of nearly daily usage of D I have not even tried to write that code :-)
Thank you,
bearophile
|
August 02, 2010 Re: std.file.read | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dmitry Olshansky | On 08/02/2010 10:23 AM, Dmitry Olshansky wrote: > On 02.08.2010 5:23, bearophile wrote: >> Can you tell me why std.file.read() returns a void[] instead of >> something like a ubyte[]? >> > Well, it magically converts to whatever array type you have. So this works: > ubyte[] data = read("trash.txt"); This code does not work for me. > It's interesting fact deserving further investigation. It seems that > void[] arrays are converted implicitly, this also works: > void[] tr = malloc(20)[0..20]; > data = tr; Neither does this. I am running 2.047, am I doing something wrong? |
August 02, 2010 Re: std.file.read | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pelle | Pelle:
> > Well, it magically converts to whatever array type you have. So this works: ubyte[] data = read("trash.txt");
>
> This code does not work for me on dmd 2.047.
AH, nor for me.
Bye,
bearophile
|
August 02, 2010 Re: std.file.read | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 02.08.2010 21:36, bearophile wrote: > Pelle: > >>> Well, it magically converts to whatever array type you have. So this works: >>> ubyte[] data = read("trash.txt"); >>> >> This code does not work for me on dmd 2.047. >> > AH, nor for me. > > Bye, > bearophile > Hm... it doesn't ... Ouch, I was very much sure the unittest run, but unfortunately it didn't (it was some other debug output then...). Dang, DMD does not even type check the unitest code when the compiler option not passed. Again, my apologizes. -- Dmitry Olshansky |
August 02, 2010 Re: std.file.read | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dmitry Olshansky | Dmitry Olshansky:
> Dang, DMD does not even type check the unitest code when the compiler option not passed.
This is a small known problem of D newsgroups. To partially cope with it at the end of each module I add something like:
unittest { printf(__FILE__ ~ " unittest performed."); }
But among the enhancement requests of the D unit-testing there need to be a better solution to that problem too.
Bye,
bearophile
|
Copyright © 1999-2021 by the D Language Foundation