From 3cd763c7a9c62bfb1c1dc43246b2199ee9427e92 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 5 Jan 2013 13:38:59 +0000 Subject: 64-bit compatibility fixes for the SMS plugin git-svn-id: http://svn.miranda-ng.org/main/trunk@2979 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- .../SMS/src/AdditionalFunctions/BuffToLowerCase.h | 56 ------- plugins/SMS/src/AdditionalFunctions/ListMT.h | 4 +- .../SMS/src/AdditionalFunctions/MemoryCompare.h | 175 ++------------------- plugins/SMS/src/AdditionalFunctions/MemoryFind.h | 81 ---------- .../SMS/src/AdditionalFunctions/MemoryFindByte.h | 60 +------ 5 files changed, 22 insertions(+), 354 deletions(-) delete mode 100644 plugins/SMS/src/AdditionalFunctions/BuffToLowerCase.h delete mode 100644 plugins/SMS/src/AdditionalFunctions/MemoryFind.h (limited to 'plugins/SMS/src/AdditionalFunctions') diff --git a/plugins/SMS/src/AdditionalFunctions/BuffToLowerCase.h b/plugins/SMS/src/AdditionalFunctions/BuffToLowerCase.h deleted file mode 100644 index d2bb7a6671..0000000000 --- a/plugins/SMS/src/AdditionalFunctions/BuffToLowerCase.h +++ /dev/null @@ -1,56 +0,0 @@ -#if !defined(AFX_BUFFTOLOWERCASE__H__INCLUDED_) -#define AFX_BUFFTOLOWERCASE__H__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - - - -__inline DWORD BuffToLowerCase(LPCVOID lpcOutBuff,LPCVOID lpcBuff,SIZE_T dwLen) -{ - DWORD dwRetErrorCode=NO_ERROR; - - __asm - { - mov ecx,dwLen - test ecx,ecx - jz short end_func - - push ebx // сохраняем регистр - push edi // сохраняем регистр - push esi // сохраняем регистр - mov esi,lpcBuff - mov edi,lpcOutBuff - mov bl,'A' - mov bh,'Z' - mov ah,32 - cld - - lowcaseloop: - lodsb - cmp al,bl - jl short savebyte - cmp al,bh - jg short savebyte - or al,ah - - savebyte: - stosb - - dec ecx - jnz short lowcaseloop - - pop esi // восстанавливаем содержимое регистра - pop edi // восстанавливаем содержимое регистра - pop ebx // восстанавливаем содержимое регистра - end_func: - } - -return(dwRetErrorCode); -} - - - - -#endif // !defined(AFX_BUFFTOLOWERCASE__H__INCLUDED_) \ No newline at end of file diff --git a/plugins/SMS/src/AdditionalFunctions/ListMT.h b/plugins/SMS/src/AdditionalFunctions/ListMT.h index fd9ab3baaf..7d7884ec66 100644 --- a/plugins/SMS/src/AdditionalFunctions/ListMT.h +++ b/plugins/SMS/src/AdditionalFunctions/ListMT.h @@ -67,7 +67,7 @@ __inline DWORD ListMTInitialize(PCLIST_MT pclmtListMT,DWORD dwSpinCount) if (TRUE) #endif { - InterlockedExchangePointer(&pclmtListMT->nCount,NULL); + InterlockedExchangePointer((volatile PVOID*)&pclmtListMT->nCount,NULL); pclmtListMT->plmtiFirst=NULL; pclmtListMT->plmtiLast=NULL; dwRetErrorCode=NO_ERROR; @@ -80,7 +80,7 @@ return(dwRetErrorCode); __inline void ListMTDestroy(PCLIST_MT pclmtListMT) { - InterlockedExchangePointer(&pclmtListMT->nCount,NULL); + InterlockedExchangePointer((volatile PVOID*)&pclmtListMT->nCount,NULL); pclmtListMT->plmtiFirst=NULL; pclmtListMT->plmtiLast=NULL; DeleteCriticalSection(&pclmtListMT->cs); diff --git a/plugins/SMS/src/AdditionalFunctions/MemoryCompare.h b/plugins/SMS/src/AdditionalFunctions/MemoryCompare.h index de663c6d8a..3fdb5e08b3 100644 --- a/plugins/SMS/src/AdditionalFunctions/MemoryCompare.h +++ b/plugins/SMS/src/AdditionalFunctions/MemoryCompare.h @@ -5,173 +5,32 @@ #pragma once #endif // _MSC_VER > 1000 - -// If the string pointed to by lpString1 is less than the string pointed -// to by lpString2, the return value is negative. -// If the string pointed to by lpString1 is greater than the string pointed -// to by lpString2, the return value is positive. -// If the strings are equal, the return value is zero. -// -// lpString1> ret=1=CSTR_LESS_THAN -// lpString1=lpString2 >> ret=2=CSTR_EQUAL -// lpString1>lpString2 >> ret=3=CSTR_GREATER_THAN - - -/*__inline DWORD MemoryCompare(LPCVOID lpcSource1,SIZE_T dwSource1Size,LPCVOID lpcSource2,SIZE_T dwSource2Size) -{ - DWORD dwRet; - - __asm - { - mov ecx,dwSource1Size //; ecx = Source string 1 Size - cmp ecx,dwSource2Size //; сверяем длинны участков памяти - jg short greater_than - jl short less_than - test ecx,ecx - jz short equal //; NULL=NULL - - mov esi,lpcSource1 //; edi = Source string 1 - mov edi,lpcSource2 //; esi = Source string 2 - cmp edi,esi //; сверяем указатели на участки памяти - je short equal //; это один и тотже участок, они естественно равны - - test esi,esi //; lpcSource1=NULL, lpcSource1lpcSource2 - jz short greater_than //; CSTR_GREATER_THAN - - //cld //; сканируя в прямом направлении - - repe cmpsb //; цикл сравнения. - cmp_loop: - //sub ecx,4 - //jz short equal - - //inc esi - //inc edi - //mov al,byte ptr [esi] - //cmpsd - //cmp al,byte ptr [edi] - //je short cmp_loop - jg short greater_than - jl short less_than - - equal: //; если мы попали сюда, значит, они - mov dwRet,CSTR_EQUAL //; совпадают (match) - jmp end_func - less_than: //; не совпадают - mov dwRet,CSTR_LESS_THAN - jmp end_func - greater_than: - mov dwRet,CSTR_GREATER_THAN - - end_func: - } -return(dwRet); -}//*/ - __inline DWORD MemoryCompare(LPCVOID lpcSource1,SIZE_T dwSource1Size,LPCVOID lpcSource2,SIZE_T dwSource2Size) { - DWORD dwRet; + if (dwSource1Size == dwSource2Size) { + if (lpcSource1 == lpcSource2) + return CSTR_EQUAL; - if (dwSource1Size==dwSource2Size) - { - if (lpcSource1==lpcSource2) - { - dwRet=CSTR_EQUAL; - }else{ - if (lpcSource1 && lpcSource2) - { + if (lpcSource1 && lpcSource2) { #ifdef _INC_MEMORY - dwRet=(2+memcmp(lpcSource1,lpcSource2,dwSource1Size)); + return 2 + memcmp(lpcSource1,lpcSource2,dwSource1Size)); #else - SIZE_T dwDiffPosition; - - //dwDiffPosition=RtlCompareMemory(lpcSource1,lpcSource2,dwSource1Size); - for(dwDiffPosition=0; (dwDiffPosition(*((BYTE*)(((SIZE_T)lpcSource2)+dwDiffPosition)))) - { - dwRet=CSTR_GREATER_THAN; - }else{ - dwRet=CSTR_LESS_THAN; - } - } -#endif - }else{ - if (lpcSource1) - {//lpcSource2==NULL - dwRet=CSTR_GREATER_THAN; - }else{//lpcSource1==NULL - dwRet=CSTR_LESS_THAN; - } - } - } - }else{ - if (dwSource1Size(*((BYTE*)(((SIZE_T)lpcSource2)+dwDiffPosition)))) - { - dwRet=CSTR_GREATER_THAN; - }else{ - dwRet=CSTR_LESS_THAN; - } - } - - if (pdwDiffPosition) (*pdwDiffPosition)=dwDiffPosition; - }else{ - if (lpcSource1) - {//lpcSource2==NULL - dwRet=CSTR_GREATER_THAN; - }else{//lpcSource1==NULL - dwRet=CSTR_LESS_THAN; - } - } - } - }else{ - if (dwSource1Size(*((BYTE*)(((SIZE_T)lpcSource2)+dwDiffPosition)))) + return CSTR_GREATER_THAN; + + return CSTR_LESS_THAN; +#endif } + return (lpcSource1) ? CSTR_GREATER_THAN : CSTR_LESS_THAN; } -return(dwRet); + return (dwSource1Size < dwSource2Size) ? CSTR_LESS_THAN : CSTR_GREATER_THAN; } -*/ - #endif // !defined(AFX_MEMORYCOMPARE__H__INCLUDED_) diff --git a/plugins/SMS/src/AdditionalFunctions/MemoryFind.h b/plugins/SMS/src/AdditionalFunctions/MemoryFind.h deleted file mode 100644 index dbc5f1a2d1..0000000000 --- a/plugins/SMS/src/AdditionalFunctions/MemoryFind.h +++ /dev/null @@ -1,81 +0,0 @@ -#if !defined(AFX_MEMORYFIND__H__INCLUDED_) -#define AFX_MEMORYFIND__H__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -__inline LPVOID MemoryFind(SIZE_T dwFrom,LPCVOID lpcSource,SIZE_T dwSourceSize,LPCVOID lpcWhatFind,SIZE_T dwWhatFindSize) -{ - LPVOID lpRet=NULL; - - __asm - { - push ebx // сохраняем регистр - push edi // сохраняем регистр - push esi // сохраняем регистр - - mov ecx,dwSourceSize //; ecx = Source string Size - test ecx,ecx // is size unknown? - jz short end_func - - mov edx,dwWhatFindSize //; edx = WhatFind string Size - test edx,edx // is size unknown? - jz short end_func - - mov ebx,dwFrom // ebx - start pos in Source string - mov edi,lpcSource //; edi = Source string - mov esi,lpcWhatFind //; esi = WhatFind string - - cmp ebx,ecx // проверка ecx(=len)=>ulFrom - jae short end_func - - add edi,ebx // сдвигаем начало на ulFrom(нач смещен) - sub ecx,ebx // уменьшаем длинну SourceSize на ulFrom(нач смещен) - - cmp ecx,edx // проверка NEWSourceSize ??? ulWhatFindSize - je short begin_memorycompare // NEWulSourceSize==ulWhatFindSize, Source ??? WhatFind - jl short end_func // NEWulSourceSize Source!=WhatFind - - sub ecx,edx // уменьшаем длинну SourceSize на ulWhatFindSize - inc ecx - - mov al,[esi] //; al=search byte - dec edi - cld //; сканируя в прямом направлении - - find_loop: - test ecx,ecx - jz short end_func - inc edi - repne scasb //; find that byte - dec edi //; di points to byte which stopped scan - - cmp [edi],al //; see if we have a hit - jne short end_func //; yes, point to byte - - begin_memorycompare: - push esi - push edi - push ecx - mov ecx,edx //; ulWhatFindSize байтов (CX используется в REPE), - repe cmpsb //; сравниваем их. - pop ecx - pop edi - pop esi - jne short find_loop //; признак ZF = 0, если сравниваемые - //; строки не совпадают (mismatch) match: - //; если мы попали сюда, значит, они - //; совпадают (match) - mov lpRet,edi //; ax=pointer to byte - end_func: - - pop esi // восстанавливаем содержимое регистра - pop edi // восстанавливаем содержимое регистра - pop ebx // восстанавливаем содержимое регистра - } -return(lpRet); -} - - -#endif // !defined(AFX_MEMORYFIND__H__INCLUDED_) diff --git a/plugins/SMS/src/AdditionalFunctions/MemoryFindByte.h b/plugins/SMS/src/AdditionalFunctions/MemoryFindByte.h index 002f76e44c..83ca9c5468 100644 --- a/plugins/SMS/src/AdditionalFunctions/MemoryFindByte.h +++ b/plugins/SMS/src/AdditionalFunctions/MemoryFindByte.h @@ -5,67 +5,13 @@ #pragma once #endif // _MSC_VER > 1000 - - __inline LPVOID MemoryFindByte(SIZE_T dwFrom,LPCVOID lpcSource,SIZE_T dwSourceSize,unsigned char chWhatFind) { - LPVOID lpRet=NULL; - if (lpcSource && dwSourceSize) - { - if (dwFromdwFrom - jae short end_func - - std //; count 'up' on string this time - sub ecx,eax //; уменьшаем длинну на dwFrom(нач смещен) - add edi,ecx //; сдвигаем начало на dwSourceSize(на конец) - mov al,chWhatFind //; al=search byte - repne scasb //; find that byte - inc edi //; di points to byte which stopped scan - cmp [edi],al //; see if we have a hit - jne short end_func //; yes, point to byte - mov lpRet,edi //; ax=pointer to byte - end_func: - - cld - pop esi // восстанавливаем содержимое регистра - pop edi // восстанавливаем содержимое регистра - pop ebx // восстанавливаем содержимое регистра - } -return(lpRet); + return NULL; } - - #endif // !defined(AFX_MEMORYFINDBYTE__H__INCLUDED_) -- cgit v1.2.3