-------------------------------------------------------------------------------------------- [ENHANCED] VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE SET PATH COMMAND January 2024 -------------------------------------------------------------------------------------------- CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 4095, now the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 8191. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Label4b66d6 :: inc ebx ;0x004b66d6 : 43 cmp byte ptr [ebx] , 0FEh ;0x004b66d7 : 803bfe mov dword ptr [ Data9393ac ] , ebx ;0x004b66da : 891dac939300 je Label5e1c10 ;0x004b66e0 : 0f842ab51200 xor eax , eax ;0x004b66e6 : 33c0 call Fun42c118 ;0x004b66e8 : e82b5af7ff mov eax , esp ;0x004b66ed : 8bc4 sub eax , dword ptr [ Data9370c4 ] ;0x004b66ef : 2b05c4709300 ; ; --------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE SET PATH COMMAND ; November 2019 ; --------------------------------------------------------------------------------- ; CCB ; ; In vfp9, the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 4095, ; now the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 8191. ; ; 2019/11/20, by ccb ; ; mov esi , 01000h ;0x004b66f5 : be00100000 mov esi , 02000h ;0x004b66f5 : be00100000 cmp eax , esi ;0x004b66fa : 3bc6 jle Label5e1c2d ;0x004b66fc : 0f8e2bb51200 mov eax , esi ;0x004b6702 : 8bc6 call Fun42c118 ;0x004b6704 : e80f5af7ff mov dword ptr [ ebp + 0FFFFFC30h ] , esp ;0x004b6709 : 89a530fcffff Label4b670f :: mov ebx , dword ptr [ ebp + 0FFFFFC30h ] ;0x004b670f : 8b9d30fcffff test ebx , ebx ;0x004b6715 : 85db mov edi , 0B6h ;0x004b6717 : bfb6000000 je Label5e1c39 ;0x004b671c : 0f8417b51200 pushd 00h ;0x004b6722 : 6a00 push ebx ;0x004b6724 : 53 mov eax , esi ;0x004b6725 : 8bc6 call Fun5463b6 ;0x004b6727 : e88afc0800 cmp byte ptr [ Data93a8c0 ] , 00h ;0x004b672c : 803dc0a8930000 je Label4b6742 ;0x004b6733 : 740d call Fun4b837c ;0x004b6735 : e8421c0000 test eax , eax ;0x004b673a : 85c0 jne Label5e1c40 ;0x004b673c : 0f85feb41200 Label4b6742 :: mov eax , ebx ;0x004b6742 : 8bc3 lea edx , dword ptr [ eax + 1 ] ;0x004b6744 : 8d5001 Label4b6747 :: mov cl , byte ptr [eax] ;0x004b6747 : 8a08 inc eax ;0x004b6749 : 40 test cl , cl ;0x004b674a : 84c9 jne Label4b6747 ;0x004b674c : 75f9 ; ; --------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE SET PATH COMMAND ; November 2019 ; --------------------------------------------------------------------------------- ; CCB ; ; In vfp9, the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 4095, ; now the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 8191. ; ; 2019/11/20, by ccb ; ; mov dword ptr vfpa_setpath_issetpath,01h sub eax , edx ;0x004b674e : 2bc2 mov edi , offset Data93a8c0 ;0x004b6750 : bfc0a89300 mov edx , ebx ;0x004b6755 : 8bd3 call Fun414b0d ;0x004b6757 : e8b1e3f5ff ; ; --------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE SET PATH COMMAND ; November 2019 ; --------------------------------------------------------------------------------- ; CCB ; ; In vfp9, the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 4095, ; now the maximum number of characters for the SET PATH command (and the SET("PATH") function) is 8191. ; ; 2019/11/20, by ccb ; Label4b675b :: ; mov dword ptr vfpa_setpath_issetpath,00h Label4b675c :: jmp Label52c900 ;0x004b675c : e99f610700 Label52c900 :: xor eax , eax ;0x0052c900 : 33c0 lea esp , dword ptr [ ebp + 0FFFFF964h ] ;0x0052c902 : 8da564f9ffff mov ecx , dword ptr [ ebp + 116 ] ;0x0052c908 : 8b4d74 call Fun42bf1d ;0x0052c90b : e80df6efff pop edi ;0x0052c910 : 5f pop esi ;0x0052c911 : 5e pop ebx ;0x0052c912 : 5b add ebp , 078h ;0x0052c913 : 83c578 leave ;0x0052c916 : c9 ret ;0x0052c917 : 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: If there are 2 or more semicolons (:) in a path, for example, c:\aaac:\bbb, or there are only 2 backslashes (\\) in a path, or the length of a path > 260, and there is no the config file (config.fpw) in the application folder, vfp will cause an error "Error locating config file-bad path?". For more information, please refer to: https://jeffpar.github.io/kbarchive/kb/163/Q163801/ Q163801: PRB: "Error Locating Config File-Bad Path?" in Visual FoxPro In vfp9 (and vfp6, vfp7, vfp8), it locates the config file (config.fpw) in the following folders: 1, the compiled executable file (in VFP Runtime or VFP Multi-threaded Runtime), 2, the application folder, 3, the PATH environment variable to the specified folder. if there is no the config file (config.fpw) in the compiled executable file and the application folder, and there are some problems in the MS-DOS environment variable PATH, vfp will cause an error "Error locating config file-bad path?". In VFP Advanced, it locates the config file (config.fpw) in the following folders: 1, the compiled executable file (in VFP Runtime or VFP Multi-threaded Runtime), 2, the application folder, 3, the PATH environment variable to the specified folder. if there is no the config file (config.fpw) in the compiled executable file and the application folder, and there are some problems in the MS-DOS environment variable PATH, vfp will cause an error "Error locating config file--bad path in the MS-DOS environment variable PATH or the SET PATH command?". There are some methods to solve the problem: 1, recommend to edit the bad path in the MS-DOS environment variable PATH or the SET PATH command, 2, include the config file (config.fpw) in the compiled executable file, 3, create the config file (config.fpw) in the application folder. In vfp9 (and vfp6, vfp7, vfp8), it locates the resource file (foxuser.dbf) in the following folders: 1, the application folder, 2, the PATH environment variable to the specified folder. if there is no the resource file (foxuser.dbf) in the application folder, and there are some problems in the MS-DOS environment variable PATH, vfp will cause an error "Program Error: Invalid path or file name.", and then vfp will cancel the executable file. In VFP Advanced, it locates the resource file (foxuser.dbf) in the following folders: 1, the compiled executable file (in VFP Runtime or VFP Multi-threaded Runtime), 2, the application folder, 3, the PATH environment variable to the specified folder. if there is no the resource file (foxuser.dbf) in the compiled executable file and the application folder, and there are some problems in the MS-DOS environment variable PATH, vfp will cause an error "Invalid path or file name--bad path in the MS-DOS environment variable PATH or the SET PATH command?", and then vfp will locates the resource file (foxuser.dbf) in the rest paths, and then vfp will run the executable file continue. There are some methods to solve the problem: 1, recommend to edit the bad path in the MS-DOS environment variable PATH or the SET PATH command, 2, include the resource files (foxuser.dbf and foxuser.fpt) in the compiled executable file, 3, create the resource files (foxuser.dbf and foxuser.fpt) in the application folder. 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix100.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix102.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix287.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 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |