Sean Campbell:

i have the following code
char[] Etag(string file){
        auto info = DirEntry(file);
        ubyte[16] hash = md5Of(to!string(info.timeLastAccessed.day)~
                               to!string(info.timeLastAccessed.month)~
                               to!string(~info.timeLastAccessed.year)~
                               file);
        char[] hashstring = toHexString(hash);
        writeln(hashstring);
        return hashstring;
}
the proper hash string prints out in the console, but when i try to use the return value of Etag it becomes an obscure string?

As shown in the docs toHexString returns a fixed size array, that in D are values. With "char[] hashstring = " you are slicing a stack allocated variable, so Etag returns garbage. So you can write (note the starting lowercase):

auto etag(string file) {
...
        auto hashstring = toHexString(hash);
        writeln(hashstring);
        return hashstring;
}

Such kind of bugs are impossible in Rust. Hopefully we'll eventually remove them from D too.

Bye,
bearophile

Reply via email to