Re: [Freedos-devel] Porting the FAT filesystem (16)

2007-06-04 Thread Eric Auer

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)

2007-06-04 Thread enrico.migli...@libero.it
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)

2007-06-04 Thread Alain M.
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