Seems like you don't release the interface pointer that you do a query interface on.
Oops.
You shouldn't need to special case copying from the same object... just make sure you always allocate a new piece of memory and copy the old string name before freeing it.
Yeah. I put that in because it's exactly what the app does, ie
foo.font = foo.font;
or the equivalent, which doesn't seem to make much sense. But I expect you are right, it's unlikely to do anything special. I'll remove the check.
If you change around the order of freeing, allocating and copying the strings it would be a bit easier to make it work right and fix the above problems.
Yes I see now, the code copies the string again.
thanks -mike