OK, I've done a bit more research on this problem.  The relevant
portion of the delete function appears to be, removing some
extraneous code:

if (FINDFIRST(fullname, &f, FA_ARCH)) {
                                error_sfile_not_found(fullname);
                        } else do {
                                strcpy(p, f.ff_name);       /* Make the full 
path */
[...]

                                if(verbose && !optP)
                                        displayString(TEXT_DELETE_FILE, 
fullname);
                                if(unlink(fullname) != 0) {
                                        perror(fullname);   /* notify the user 
*/
                                } else
                                        ++count;
                        } while (FINDNEXT(&f) == 0);

FINDFIRST and FINDNEXT are suppl calls to findfirst and findnext which
invoke DOS calls (respectively):

        r.r_ax = 0x4e00;
        rv = invokeDOS(&r);

        r.r_ax = 0x4f00;
        rv = invokeDOS(&r);

Is it legal to do an invokeDOS on this interrupt on a non-existent file?
The unlink is done before the findnext.  There's a test case I may 
be able to duplicate...

I have run this in verbose mode and it only shows the files it is
deleting.  After the problem initially occurs, it quite consistently
deletes the first, third, fifth, etc. files on every subsequent del *.*.

This is very repeatable with NTFS4DOS and lots of files to start with.

Mark






> Good day, all:
> 
> I am having a repeatable problem with
> "del *.*" on an NTFS partition mounted by NTFS4DOS.
> 
> I can do a DIR on the directory I am using (\TEMP) and see
> 86 files.  A "del *.*" deletes 74 of them and yields two
> errors:
> 
> E:\TEMP\LICENSE.D32: Invalid Argument
> E:\TEMP\SAVE.DBG: Invalid Argument
> 
> (Oddly, these two files ARE deleted).  This is with the 
> development kernel...the debug kernel does not print
> these two errors but behaves the same way).
> 
> A subsequent "del *.*" deletes 6 of the twelve files.
> A subsequent "del *.*" deletes 3 of the remaining 6 files.
> A subsequent "del *.*" deletes 2 of the remaining files.
> A subsequent "del *.*" gets the last one.
> 
> This is repeatable.  I will start reading FreeCOM code, but does
> anyone have any ideas?  I also have a report of a wildcard
> copy hanging a computer, but I cannot reproduce that one yet.
> 
> This is on the "Haunted HP Pavilion", so clustersize is 2MB.
> However, I haven't found any more accesses to bytes_per_sector
> in FreeCOM.
> 
> Any ideas?
> 
> Mark Bailey
> 
> 
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> Freedos-user mailing list
> Freedos-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/freedos-user


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to