[Wine-devel] [Wine-patches] [eterhack] oleaut32: installation of M.E.Doc (eterbug #7864)
Alexander Morozov
amorozov на etersoft.ru
Пт Май 18 20:23:10 MSK 2012
#define COBJMACROS
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
+#define ETERCHECK
+
+#include "wine/etersoft.h"
#include "windef.h"
#include "winbase.h"
Наш заголовок лучше включать ближе к концу, а ETERCHECK определять
непосредственно перед ним.
+ /* HACK for eterbug #7864 */
+ if(etercheck_process_name( "m.e.doc_10.00.029.exe" ))
Насколько стабильно это имя программы? Не перестанет ли работать хак
при следующем её обновлении?
Возможно, etercheck_process_name в данном случае не очень подходит.
+ {
+#ifdef __i386__
+ void **ptr;
+ void *ret_addr;
+ __asm__( "movl %%ebp,%0" : "=r" (ptr) );
+ ret_addr = *(++ptr);
+ if(ret_addr != (void *)0xa424fef) /* Sided function at this
location conveys incorrect values. Therefore applies another function to
allocate memory */
+ V_BSTR(pvargDest) =
SysAllocStringByteLen((char*)V_BSTR(pvargSrc),
SysStringByteLen(V_BSTR(pvargSrc)));
+ else
+ V_BSTR(pvargDest) = SysAllocString(V_BSTR(pvargSrc));
+#endif
Как-то #ifdef не очень удачно употреблён. Лучше сделать, чтобы вообще
проверка на имя программы и хак, если она успешна, были только для i386,
а для других архитектур как бы ничего не менялось.
Желательно соблюдать тот стиль кодирования, который принят в файле,
который ты меняешь: наличие пробела после if, отсутствие пробелов в
начале и в конце списка аргументов функции.
Подробная информация о списке рассылки Wine-devel