[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