Subversion Repositories Kolibri OS

Rev

Rev 133 | Rev 247 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 133 Rev 171
Line 916... Line 916...
916
 
916
 
917
ramdisk_root_extend_dir:
917
ramdisk_root_extend_dir:
918
        stc
918
        stc
Line -... Line 919...
-
 
919
        ret
-
 
920
 
-
 
921
uglobal
-
 
922
; this is for delete support
-
 
923
rd_prev_sector          dd      ?
-
 
924
rd_prev_prev_sector     dd      ?
919
        ret
925
endg
920
 
926
 
921
ramdisk_notroot_next:
927
ramdisk_notroot_next:
922
        add     edi, 0x20
928
        add     edi, 0x20
923
        test    edi, 0x1FF
929
        test    edi, 0x1FF
924
        jz      ramdisk_notroot_next_sector
930
        jz      ramdisk_notroot_next_sector
925
        ret     ; CF=0
931
        ret     ; CF=0
926
ramdisk_notroot_next_sector:
932
ramdisk_notroot_next_sector:
-
 
933
        push    ecx
-
 
934
        mov     ecx, [eax]
-
 
935
        push    [rd_prev_sector]
927
        push    ecx
936
        pop     [rd_prev_prev_sector]
928
        mov     ecx, [eax]
937
        mov     [rd_prev_sector], ecx
929
        mov     ecx, [ecx*2+0x280000]
938
        mov     ecx, [ecx*2+0x280000]
930
        and     ecx, 0xFFF
939
        and     ecx, 0xFFF
931
        cmp     ecx, 2849
940
        cmp     ecx, 2849
Line 2287... Line 2296...
2287
.eof:
2296
.eof:
2288
        popad
2297
        popad
2289
        mov     eax, 6
2298
        mov     eax, 6
2290
        ret
2299
        ret
Line -... Line 2300...
-
 
2300
 
-
 
2301
;----------------------------------------------------------------
-
 
2302
;
-
 
2303
;  fs_RamdiskDelete - delete file or empty folder from ramdisk
-
 
2304
;
-
 
2305
;  esi  points to filename
-
 
2306
;
-
 
2307
;  ret  eax = 0 ok or other = errormsg
-
 
2308
;
-
 
2309
;--------------------------------------------------------------
-
 
2310
fs_RamdiskDelete:
-
 
2311
        cmp     byte [esi], 0
-
 
2312
        jnz     @f
-
 
2313
; cannot delete root!
-
 
2314
.access_denied:
-
 
2315
        push    ERROR_ACCESS_DENIED
-
 
2316
.pop_ret:
-
 
2317
        pop     eax
-
 
2318
        ret
-
 
2319
@@:
-
 
2320
        and     [rd_prev_sector], 0
-
 
2321
        and     [rd_prev_prev_sector], 0
-
 
2322
        push    edi
-
 
2323
        call    rd_find_lfn
-
 
2324
        jnc     .found
-
 
2325
        pop     edi
-
 
2326
        push    ERROR_FILE_NOT_FOUND
-
 
2327
        jmp     .pop_ret
-
 
2328
.found:
-
 
2329
        cmp     dword [edi], '.   '
-
 
2330
        jz      .access_denied2
-
 
2331
        cmp     dword [edi], '..  '
-
 
2332
        jz      .access_denied2
-
 
2333
        test    byte [edi+11], 10h
-
 
2334
        jz      .dodel
-
 
2335
; we can delete only empty folders!
-
 
2336
        movzx   eax, word [edi+26]
-
 
2337
        push    ebx
-
 
2338
        mov     ebx, eax
-
 
2339
        shl     ebx, 9
-
 
2340
        add     ebx, RAMDISK + 31*0x200 + 2*0x20
-
 
2341
.checkempty:
-
 
2342
        cmp     byte [ebx], 0
-
 
2343
        jz      .empty
-
 
2344
        cmp     byte [ebx], 0xE5
-
 
2345
        jnz     .notempty
-
 
2346
        add     ebx, 0x20
-
 
2347
        test    ebx, 0x1FF
-
 
2348
        jnz     .checkempty
-
 
2349
        movzx   eax, word [RAMDISK_FAT + eax*2]
-
 
2350
        test    eax, eax
-
 
2351
        jz      .empty
-
 
2352
        mov     ebx, eax
-
 
2353
        shl     ebx, 9
-
 
2354
        add     ebx, RAMDISK + 31*0x200
-
 
2355
        jmp     .checkempty
-
 
2356
.notempty:
-
 
2357
        pop     ebx
-
 
2358
.access_denied2:
-
 
2359
        pop     edi
-
 
2360
        jmp     .access_denied
-
 
2361
.empty:
-
 
2362
        pop     ebx
-
 
2363
.dodel:
-
 
2364
        movzx   eax, word [edi+26]
-
 
2365
; delete folder entry
-
 
2366
        mov     byte [edi], 0xE5
-
 
2367
; delete LFN (if present)
-
 
2368
.lfndel:
-
 
2369
        test    edi, 0x1FF
-
 
2370
        jnz     @f
-
 
2371
        cmp     [rd_prev_sector], 0
-
 
2372
        jz      @f
-
 
2373
        cmp     [rd_prev_sector], -1
-
 
2374
        jz      .lfndone
-
 
2375
        mov     edi, [rd_prev_sector]
-
 
2376
        push    [rd_prev_prev_sector]
-
 
2377
        pop     [rd_prev_sector]
-
 
2378
        or      [rd_prev_prev_sector], -1
-
 
2379
        shl     edi, 9
-
 
2380
        add     edi, RAMDISK + 31*0x200 + 0x200
-
 
2381
@@:
-
 
2382
        sub     edi, 0x20
-
 
2383
        cmp     byte [edi], 0xE5
-
 
2384
        jz      .lfndone
-
 
2385
        cmp     byte [edi+11], 0xF
-
 
2386
        jnz     .lfndone
-
 
2387
        mov     byte [edi], 0xE5
-
 
2388
        jmp     .lfndel
-
 
2389
.lfndone:
-
 
2390
; delete FAT chain
-
 
2391
        test    eax, eax
-
 
2392
        jz      .done
-
 
2393
        lea     eax, [RAMDISK_FAT + eax*2]
-
 
2394
        push    dword [eax]
-
 
2395
        and     word [eax], 0
-
 
2396
        pop     eax
-
 
2397
        and     eax, 0xFFF
-
 
2398
        jmp     .lfndone
-
 
2399
.done:
-
 
2400
        pop     edi
-
 
2401
        xor     eax, eax
-
 
2402
        ret
2291
 
2403