Re: [Freedos-devel] Porting the FAT filesystem (16)
Hi Enrico, The function works if I rewrite get_f_node() in the following way: ... for(i = 0; i NFILES; i++) ... if(f_nodes[i].f_count == 0) ... return f_nodes[i]; ... This was the implementation present in the source tree four years ago. The difference in the current implementation is that we now have a cache with two near fnodes in the kernel data segment. That way, fewer far pointers are needed, but several functions got more complicated. For example get_f_node. The other difference is that you use NFILES instead of a configurable number set by FILES=... in config sys :-). [after] dos_cd (C:\hello\world); dos_open (C:\hello\world\my_file.txt, O_RDWR | O_CREAT, 0); [ok] dos_open (my_file.txt, O_RDWR | O_CREAT, 0); [fails] As discussed earlier, dos_open is a bit lowlevel if you look at DosOpenSft, you will find that it calls truename. The truename function does things like add the current drive letter and current directory name, resolve .. and ., and make name handling case insensitive. As with your previous upper / lower case problem, the solution is again to use more truename code in your dos_open. I noticed that the implementation of dos_cd() doesn't write or read CDSp of the drives... That might be an explanation for why directory access sometimes fails with SUBST drives or similar? I seem to remember that we have a bug report about this in Bugzilla, please check! Eric PS: findfirst / findnext use special data structures. You first put your query in a buffer, then call findfirst, and to get followup results to the same query, you repeatedly call findnext. A bit ugly but we have to be MS DOS compatible :-p. - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ___ Freedos-devel mailing list Freedos-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-devel
Re: [Freedos-devel] Porting the FAT filesystem (16)
Hi Eric, The difference in the current implementation is that we now have a cache with two near fnodes in the kernel data segment. That way, fewer far pointers are needed, but several functions got more complicated. For example get_f_node. The other difference is that you use NFILES instead of a configurable number set by FILES=... in config sys :-). ok, got it! I'll use the old implementation :-) [after] dos_cd (C:\hello\world); dos_open (C:\hello\world\my_file.txt, O_RDWR | ... dos_open (my_file.txt, O_RDWR | O_CREAT, 0); As discussed earlier, dos_open is a bit lowlevel if you look at DosOpenSft, you will find that it calls truename. The truename function does things like add the current drive letter and current directory name, resolve .. and ., and make name handling case insensitive. As with your previous upper / lower case problem, the solution is again to use more truename code in your dos_open. Ok, I'll borrow some parts from DosOpenSft() I noticed that the implementation of dos_cd() doesn't write or read CDSp of the drives... That might be an explanation for why directory access sometimes fails with SUBST drives or similar? I seem to remember that we have a bug report about this in Bugzilla, please check! I'll take a look at the bug report.. Eric PS: findfirst / findnext use special data structures. You first put your query in a buffer, then call findfirst, and to get followup results to the same query, you repeatedly call findnext. A bit ugly but we have to be MS DOS compatible :-p. Your answers are always helpful and complete :-) Enrico -- Passa a Infostrada. ADSL e Telefono senza limiti e senza canone Telecom http://i-mode.wind.it/ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ___ Freedos-devel mailing list Freedos-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-devel
Re: [Freedos-devel] Porting the FAT filesystem (16)
Hi Enrico, [after] dos_cd (C:\hello\world); dos_open (C:\hello\world\my_file.txt, O_RDWR | O_CREAT, 0); [ok] dos_open (my_file.txt, O_RDWR | O_CREAT, 0); [fails] As discussed earlier, dos_open is a bit lowlevel if you look at DosOpenSft, you will find that it calls truename. The truename function does things like add the current drive letter and current directory name, resolve .. and ., and make name handling case insensitive. As with your previous upper / lower case problem, the solution is again to use more truename code in your dos_open. Why don't you implement the Truename functions, AFAIU it is essencial to dos working and are used a lot by bot freedos internals, but also by compilers' librariyes. Alain - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ___ Freedos-devel mailing list Freedos-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-devel