Should include files be bug for bug compatible?
Dylan Smith
dylan.ah.smith at gmail.com
Wed Jul 7 00:28:38 CDT 2010
In richedit.h CHARFORMAT2[AW] is padded differently on the Windows
PSDK depending on whether it is included for a c or c++ source file.
Should the include file be fixed, or does bug for bug compatibility
mean that a correct CHARFORMAT2 structure should be declared in a
private include file?
I tried compiling the following test program using the PSDK:
/* source code */
#include <stdio.h>
#include <windows.h>
#include <richedit.h>
int main()
{
printf("sizeof(CHARFORMAT2W) %d\n",
sizeof(CHARFORMAT2W));
printf("FIELD_OFFSET(CHARFORMAT2W, wWeight) %d\n",
FIELD_OFFSET(CHARFORMAT2W, wWeight));
printf("FIELD_OFFSET(CHARFORMAT2W, sSpacing) %d\n",
FIELD_OFFSET(CHARFORMAT2W, sSpacing));
return 0;
}
/* end of code */
The compiled c version gives the following output:
sizeof(CHARFORMAT2W) 116
FIELD_OFFSET(CHARFORMAT2W, wWeight) 90
FIELD_OFFSET(CHARFORMAT2W, sSpacing) 92
The c++ version gives the following output:
sizeof(CHARFORMAT2W) 116
FIELD_OFFSET(CHARFORMAT2W, wWeight) 92
FIELD_OFFSET(CHARFORMAT2W, sSpacing) 94
Those are the only two fields that are affected, so the inconsistency
has gone unnoticed until now.
According to the About Rich Edit Controls page
(http://msdn.microsoft.com/en-us/library/bb787873(VS.85).aspx) Windows
has used a C++ code base since richedit 2.0, and so all the richedit
DLLs should follow the c++ version of CHARFORMAT2 since riched32.dll
is just a wrapper around riched20.dll for richedit 1.0 emulation.
Wine's include file will compile like the c version, which caused some
weird behaviour that I noticed when improving the EM_SETCHARFORMAT
tests.
More information about the wine-devel
mailing list