------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - FULLPATH() FUNCTION
January 2025
------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), sometimes the FULLPATH("") function returns wrong result.
The bug occurs when SET("COMPATIBLE")="OFF" (the default setting), it does not occur when SET("COMPATIBLE")="ON".
The bug occurs when !SET("PATH")=="" (SET PATH TO cPath), it does not occur when SET("PATH")=="" (SET PATH TO).
2. CAUSE:
For example, for the following code:
SET PATH TO C:\MYPATH
CD D:\MYPATH
?FULLPATH("")
Usually the FULLPATH("") function returns "D:\MYPATH\", ok.
Please refer to the memory dump data:
0019F7EC 00 3A 54 45 53 54 2E 54 58 54 00 00 00 00 00 00 .:TEST.TXT......
byte [0019F7EC] is the path name or the file name, now it is an empty string.
If the file "TEST.TXT" is located in the Visual FoxPro path "C:\MYPATH",
the FULLPATH("") function returns the full file name "C:\MYPATH\TEST.TXT", it's wrong!
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun435040 :: ; proc near
cmp byte ptr [esi] , 05Ch ;0x00435040 : 803e5c
je Label598a95 ;0x00435043 : 0f844c3a1600
;
; -------------------------------------------------
; VFP 9.0 FIX - FULLPATH() FUNCTION
; November 2023
; -------------------------------------------------
; CCB
;
; In vfp9, sometimes the FULLPATH("") function returns wrong result.
;
; 2023/11/19, by ccb
;
cmp byte ptr [esi] , 00h
je Label435052
Label435049 ::
cmp byte ptr [ esi + 1 ] , 03Ah ;0x00435049 : 807e013a
lea eax , dword ptr [ esi + 2 ] ;0x0043504d : 8d4602
je Label435054 ;0x00435050 : 7402
Label435052 ::
mov eax , esi ;0x00435052 : 8bc6
Label435054 ::
ret ;0x00435054 : c3
4. APPLIES TO:
VFP 6.0.8167.0
VFP 6.0.8961.0 (SP5)
VFP 7.0.0.9262
VFP 7.0.0.9465 (SP1)
VFP 8.0.0.2521
VFP 8.0.0.3117 (SP1)
VFP 9.0.0.2412
VFP 9.0.0.3504 (SP1)
VFP 9.0.0.4611 (SP2)
VFP 9.0.0.5015 (SP2)
VFP 9.0.0.5411 (SP2)
VFP 9.0.0.5721 (SP2)
VFP 9.0.0.5815 (SP2)
VFP 9.0.0.6303 (SP2)
VFP 9.0.0.6602 (SP2)
VFP 9.0.0.7423 (SP2)
The bug has been fixed in VFP Advanced.
IMPORTANT NOTE:
In vfp9 (and vfp6, vfp7, vfp8), we can use the following code:
m.q_file=FULLPATH(IIF(ALLTRIM(m.q_file)=="",ADDBS(SYS(5)+SYS(2003)),m.q_file))
and then there is no the bug.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix28.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix100.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix102.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix103.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix354.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix355.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix356.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix357.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix386.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix387.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix388.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix389.asp
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|