Rev 133 | Rev 321 | 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 |