lkml.org 
[lkml]   [1998]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] Speeding up FAT operations
    On 23 Sep 1998, H. Peter Anvin wrote:

    > Followup to: <Pine.LNX.3.95.980923084335.832D-100000@chaos.analogic.com>
    > By author: "Richard B. Johnson" <root@chaos.analogic.com>
    > In newsgroup: linux.dev.kernel
    > >
    > > > This may not mean much, but two years ago when I first started learning a
    > > > computer I was learning QBASIC. And I read a post somewhere of an error in
    > > > QBASIC that would allow you to make a space in the name that no other program
    > > > could read except another QBASIC program that opened it the same way. It was
    > > > something like the following... (I haven't touched it for over a year and a
    > > > half so it may not be completely accurate)
    > > >
    > > > open "blah hi" as binary #1 (or something like this)
    > > > print #1, "jkfsdjlkfsdjkl"
    > > > close #1
    > > >
    > > > Then you can open "blah hi" with the QBASIC program again.
    > > >
    > > > The system never reported it as an error or anything, and it would show up as
    > > > a valid file when you did a DIR. In fact, when you got a directory listing,
    > > > it would show it with the space.
    > > >
    > >
    > > Yes. A DOS File-System emulator cannot assume that DOS file-names are
    > > all in upper case. It also can't assume that it contains "valid"
    > > characters. DOS File names are not supposed to contain '.', ' ', etc.,
    > > but they can.
    > >
    >
    > Hang on! That's a different thing -- you can't create those files
    > with DOS system calls. Space *IS* a legal character in DOS filenames
    > -- the system calls will happily accept it, although the shell won't
    > (although it will match it against ?).
    >
    > -hpa

    The systems calls will not accept a space even though a MS-DOS file-
    name of "1" is really "1 " on the physical disk. Try it.....

    pseg segment para public 'code'
    assume cs:pseg, ds:pseg, es:pseg, ss:pseg
    org 100h
    main proc near
    jmp short foo
    ;fname db ' ',0 ; Bad
    ;fname db 'z',0 ; Okay
    ;fname db '.',0 ; Bad
    ;fname db 0e5h,0e5h,0 ; Okay
    ;fname db 27,'[H',27,'[J',0 ; Bad
    ;fname db 1,2,3,4,5,0 ; Bad
    ;fname db 127,128,129,0 ; Good
    fname db '55',248,'C',0 ; Good
    badfile db 'Bad file name.',0dh,0ah,'$'
    good db 'Good!',0dh,0ah,'$'
    main endp
    ;
    foo proc near
    mov dx,offset fname ; Point to file name
    xor cx,cx ; Normal file attributes
    mov ax,3c00h ; MS-DOS Create function
    int 21h
    jc bad ; Was bad, can't create.
    mov bx,ax ; Good, get handle
    mov ax,3d00h ; MS-DOS Close function
    int 21h
    mov dx,offset good ; Point to 'Good' string.
    jmp short prnt ; Print and exit

    bad: mov dx,offset badfile ; Point to bad file name string
    prnt: mov ax,0900h ; MS-DOS print-string
    int 21h
    quit: mov ax,4c00h ; MS-DOS exit normal
    int 21h
    foo endp
    ;
    pseg ends
    end main


    What GWBASIC used to do was create a file using the FCB function call
    0x16. Then, since it had the original File-Control-Block in its
    address-space, it would put any characters it wanted, including
    lower-case, in the FCB when it closed it. This is what got written
    to the disk. This is also the way Peter Norton 'opened' a directory
    as a file so that he could sort its contents.

    The original post was a warning that one should not assume that there
    are no "incorrect" characters in a MS-DOS file-name. I can easily
    create a file called "*.*" and or "???????????", which can cause some
    problems with 'rm', etc., although such file-names are usually
    'created' during a disk error.

    Cheers,
    Dick Johnson
    ***** FILE SYSTEM WAS MODIFIED *****
    Penguin : Linux version 2.1.118 on an i586 machine (66.15 BogoMips).
    Warning : It's hard to remain at the trailing edge of technology.


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:44    [W:0.032 / U:91.844 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site