PP(pp_ftis)
{
I32 result = my_stat();
dSP;
if (result < 0)
RETPUSHUNDEF;
RETPUSHYES;
}
####
Disassembly of Function _stat64 (0x78018226)
;********************************************************************************
; *** _stat64 (456) ***
; SYM:_stat64
0x78018226: push ebp
0x78018227: mov ebp,esp
0x78018229: sub esp,0x24c
0x7801822F: push ebx
0x78018230: mov ebx,dword ptr [ebp+0x8] ; ARG:0x8
0x78018233: push esi
0x78018234: push edi
0x78018235: push 0x78034c00 ; DATA:?*
0x7801823A: push ebx
0x7801823B: call 0x7800edaa ; SYM:_mbspbrk
0x78018240: pop ecx
0x78018241: test eax,eax
0x78018243: pop ecx
0x78018244: jnz 0x78018398 ; (*+0x154)
0x7801824A: cmp byte ptr [ebx+0x1],0x3a
0x7801824E: jnz 0x7801838e ; (*+0x140)
0x78018254: mov eax,dword ptr [ebx]
0x78018256: test al,al
0x78018258: jz 0x78018264 ; (*+0xC)
0x7801825A: cmp byte ptr [ebx+0x2],0x0
0x7801825E: jz 0x78018398 ; (*+0x13A)
0x78018264: movsx al,al ; <==0x78018258(*-0xC)
0x78018267: push eax
0x78018268: call 0x7801eceb ; SYM:_mbctolower
0x7801826D: pop ecx
0x7801826E: sub eax,0x60
0x78018271: mov dword ptr [ebp-0x4],eax ; VAR:0x4; <==0x78018393(*+0x122)
0x78018274: lea eax,dword ptr [ebp-0x148] ; VAR:0x148
0x7801827A: push eax
0x7801827B: push ebx
0x7801827C: call dword ptr [0x78033080] ; EXT:KERNEL32.DLL!FindFirstFileA
0x78018282: cmp eax,0xff
0x78018285: mov dword ptr [ebp-0x8],eax ; VAR:0x8
0x78018288: jnz 0x780183b1 ; (*+0x129)
0x7801828E: push 0x78034bfc ; DATA:./\
0x78018293: push ebx
0x78018294: call 0x7800edaa ; SYM:_mbspbrk
0x78018299: pop ecx
0x7801829A: test eax,eax
0x7801829C: pop ecx
0x7801829D: jz 0x78018398 ; (*+0xFB)
0x780182A3: push 0x104
0x780182A8: lea eax,dword ptr [ebp-0x24c] ; VAR:0x24
0x780182AE: push ebx
0x780182AF: push eax
0x780182B0: call 0x78017bbf ; SYM:_fullpath
0x780182B5: mov esi,eax
0x780182B7: xor edi,edi
0x780182B9: add esp,0xc
0x780182BC: cmp esi,edi
0x780182BE: jz 0x78018398 ; (*+0xDA)
0x780182C4: push esi
0x780182C5: call 0x78003a9f ; SYM:strlen
0x780182CA: cmp eax,0x3
0x780182CD: pop ecx
0x780182CE: jz 0x780182df ; (*+0x11)
0x780182D0: push esi
0x780182D1: call 0x7801874b
0x780182D6: test eax,eax
0x780182D8: pop ecx
0x780182D9: jz 0x78018398 ; (*+0xBF)
0x780182DF: push esi ; <==0x780182CE(*-0x11)
0x780182E0: call dword ptr [0x78033170] ; EXT:KERNEL32.DLL!GetDriveTypeA
0x780182E6: cmp eax,0x1
0x780182E9: jbe 0x78018398 ; (*+0xAF)
0x780182EF: and byte ptr [ebp-0x11c],0x0 ; VAR:0x11
0x780182F6: mov esi,dword ptr [ebp+0xc] ; ARG:0x
0x780182F9: push 0xff
0x780182FB: push edi
0x780182FC: push edi
0x780182FD: push edi
0x780182FE: push 0x1
0x78018300: push 0x1
0x78018302: push 0x7bc
0x78018307: mov dword ptr [ebp-0x148],0x10 ; VAR:0x148
0x78018311: mov dword ptr [ebp-0x12c],edi ; VAR:0x12
0x78018317: mov dword ptr [ebp-0x128],edi ; VAR:0x128
0x7801831D: call 0x7802ab02
0x78018322: mov dword ptr [esi+0x28],eax
0x78018325: mov dword ptr [esi+0x2c],edx
0x78018328: mov eax,dword ptr [esi+0x28]
0x7801832B: mov ecx,edx
0x7801832D: mov dword ptr [esi+0x20],eax
0x78018330: mov dword ptr [esi+0x30],eax
0x78018333: add esp,0x1c
0x78018336: mov dword ptr [esi+0x24],ecx
0x78018339: mov dword ptr [esi+0x34],ecx
0x7801833C: push ebx ; <==0x7801842E(*+0xF2)
0x7801833D: push dword ptr [ebp-0x148] ; VAR:0x148
0x78018343: call 0x78017ea1
0x78018348: pop ecx
0x78018349: mov word ptr [esi+0x6],ax
0x7801834D: pop ecx
0x7801834E: mov word ptr [esi+0x8],0x1
0x78018354: push 0x1
0x78018356: push edi
0x78018357: push edi
0x78018358: push dword ptr [ebp-0x12c] ; VAR:0x12
0x7801835E: call 0x78003e1a
0x78018363: mov ecx,dword ptr [ebp-0x128] ; VAR:0x128
0x78018369: xor ebx,ebx
0x7801836B: add eax,ecx
0x7801836D: mov word ptr [esi+0x4],di
0x78018371: mov dword ptr [esi+0x18],eax
0x78018374: mov eax,dword ptr [ebp-0x4] ; VAR:0x4
0x78018377: adc edx,ebx
0x78018379: dec eax
0x7801837A: mov dword ptr [esi],eax
0x7801837C: mov dword ptr [esi+0x10],eax
0x7801837F: mov dword ptr [esi+0x1c],edx
0x78018382: mov word ptr [esi+0xc],di
0x78018386: mov word ptr [esi+0xa],di
0x7801838A: xor eax,eax
0x7801838C: jmp 0x780183ac ; (*+0x20)
0x7801838E: call 0x78017a8f ; SYM:_getdrive; <==0x7801824E(*-0x140)
0x78018393: jmp 0x78018271 ; (*-0x122)
0x78018398: call 0x7800c9ac ; SYM:_errno; <==0x78018244(*-0x154), 0x7801829D(*-0xFB), 0x780182BE(*-0xDA), 0x780182D9(*-0xBF), 0x7801825E(*-0x13A), 0x780182E9(*-0xAF)
0x7801839D: push 0x2
0x7801839F: pop esi
0x780183A0: mov dword ptr [eax],esi
0x780183A2: call 0x7800c9b5 ; SYM:__doserrno
0x780183A7: mov dword ptr [eax],esi
0x780183A9: or eax,0xff
0x780183AC: pop edi ; <==0x7801838C(*-0x20)
0x780183AD: pop esi
0x780183AE: pop ebx
0x780183AF: leave
0x780183B0: ret
;********************************************************************************
####
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;