The 4 Bytes at the beginning are gone. Thats all there is to it. But walk into this without any knowledge about the internal workings of df and try to figure that out by yourself. Was quite challenging ^^. Vector format doesn't seem to be changed. At least the old code seems to work. As an aside note. Peterix is already aware of the changes and implemented a fix in dfhack. Don't know when he will release an update.
Okay, great.
More offtopic, I have never liked the MSVC implementation of String. The idea with the builtin 16 character buffer is good, 'cause so many strings are small, but they did it wrong.
It should be something like:
TCHAR [16] smallbuffer;
TCHAR * bufferptr;
unsigned int allocated;
unsigned int used;
otherstuff;
bufferptr points to smallbuffer, to malloc'ed memory, or is NULL. There are no comparisons with sizeof(smallbuffer) to figure out whether to use smallbuffer or bufferptr's external memory, you just:
mov EAX, address of string structure
mov EAX, [EAX+offset bufferptr]
Only one register used, no branching, no mispredictions, no unnecessary cache-misses, easy prefetch if you feel the need.
And to destruct it, you just
mov EAX, address of string structure
cmp EAX, [EAX+offset bufferptr]
je @@skipfree
push [EAX+offset bufferptr]
call free()
@@skipfree:
{deallocate String structure if necessary}
(Note that this potentially calls free() with a NULL; technically an error but benign.)
So maybe they changed to this system?