Subversion Repositories Kolibri OS

Rev

Rev 6503 | Rev 6611 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
6462 pathoswith 3
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
4
;;  Distributed under terms of the GNU General Public License.  ;;
2288 clevermous 5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
$Revision: 6534 $
9
 
2889 turbanoff 10
ERROR_SUCCESS        = 0
11
ERROR_DISK_BASE      = 1
12
ERROR_UNSUPPORTED_FS = 2
13
ERROR_UNKNOWN_FS     = 3
14
ERROR_PARTITION      = 4
15
ERROR_FILE_NOT_FOUND = 5
16
ERROR_END_OF_FILE    = 6
17
ERROR_MEMORY_POINTER = 7
18
ERROR_DISK_FULL      = 8
19
ERROR_FS_FAIL        = 9
20
ERROR_ACCESS_DENIED  = 10
21
ERROR_DEVICE         = 11
5994 pathoswith 22
ERROR_OUT_OF_MEMORY  = 12
2288 clevermous 23
 
6468 pathoswith 24
maxPathLength = 1000h
25
 
2288 clevermous 26
image_of_eax EQU esp+32
27
image_of_ebx EQU esp+20
28
 
6464 pathoswith 29
; System function 70
2288 clevermous 30
 
3296 clevermous 31
file_system_lfn_protected:
32
        pushad
33
        call    protect_from_terminate
34
        call    file_system_lfn
35
        call    unprotect_from_terminate
36
        popad
37
        mov     [image_of_eax], eax
38
        mov     [image_of_ebx], ebx
39
        ret
40
 
2288 clevermous 41
file_system_lfn:
6464 pathoswith 42
; in: ebx -> parameter structure
43
;   operation codes:
44
; 0 = read file
45
; 1 = read folder
46
; 2 = create/rewrite file
47
; 3 = write/append to file
48
; 4 = set file end
49
; 5 = get file info
50
; 6 = set file info
51
; start application
52
; 8 = delete file/folder
53
; 9 = create folder
6468 pathoswith 54
        lea     ebp, [ebx+20]
55
        cmp     byte [ebp], 0
2288 clevermous 56
        jnz     @f
6468 pathoswith 57
        mov     ebp, [ebx+21]
2288 clevermous 58
@@:
6502 pathoswith 59
        cmp     word [ebp], '/'
60
        jz      .rootdir
61
        cmp     byte [ebp], 4
62
        jnc     @f
63
        cmp     byte [ebp], 0
64
        jz      @f
65
        cmp     word [ebp+1], '/'
66
        jnz     @f
67
        cmp     byte [ebp], 2
68
        jnz     .rootdir
69
        cmp     word [ebp+3], 0
70
        jz      .rootdir
71
@@:
6464 pathoswith 72
        cmp     dword[ebx], 7   ; start application
6502 pathoswith 73
        jnz     @f
6333 serge 74
        mov     edx, [ebx+4]
75
        mov     ebx, [ebx+8]
6464 pathoswith 76
        call    fs_execute      ; ebp, ebx, edx
6333 serge 77
        mov     [image_of_eax], eax
78
        ret
6464 pathoswith 79
 
6333 serge 80
@@:
6468 pathoswith 81
        stdcall kernel_alloc, maxPathLength
82
        push    ebx
83
        mov     ebx, ebp
84
        mov     ebp, eax
6502 pathoswith 85
        stdcall get_full_file_name, eax, maxPathLength
6468 pathoswith 86
        pop     ebx
6471 pathoswith 87
        test    eax, eax
88
        jz      .notfound
6502 pathoswith 89
        lea     esi, [ebp+2]
90
        mov     ax, [esi]
6464 pathoswith 91
        or      ax, 2020h
92
        cmp     ax, 'cd'
93
        jz      .CD
94
        call    dyndisk_handler ; not returns if success
95
.notfound:
6468 pathoswith 96
        stdcall kernel_free, ebp
6464 pathoswith 97
        mov     dword[image_of_eax], ERROR_FILE_NOT_FOUND
98
        ret
99
 
100
.CD:
101
        add     esi, 2
102
        xor     eax, eax
103
        lodsb       ; disk number
104
        sub     eax, '0'
105
        cmp     eax, 10
106
        jnc     .notfound
107
        mov     edi, eax
2288 clevermous 108
        lodsb
6464 pathoswith 109
        test    eax, eax
110
        jz      .maindir
2288 clevermous 111
        cmp     al, '/'
6464 pathoswith 112
        jnz     .notfound
113
        lodsb       ; partition number
114
        test    eax, eax
115
        jz      .maindir
116
        cmp     al, '1'
117
        jnz     .notfound
118
        cmp     byte [esi], '/'
119
        jnz     @f
120
        inc     esi
121
@@:
122
        call    reserve_cd
123
        mov     eax, edi
124
        bt      eax, 0
125
        setc    [DiskNumber]
126
        bt      eax, 1
127
        setc    [ChannelNumber]
128
        inc     [ChannelNumber]
129
        inc     eax
130
        mov     [cdpos], eax
131
        call    reserve_cd_channel
132
        mov     eax, edi
133
        not     eax
134
        and     eax, 3
135
        shl     eax, 1
136
        inc     eax
137
        shr     edi, 2
138
        mov     dword[image_of_eax], ERROR_FILE_NOT_FOUND
139
        bt      [edi*5+DRIVE_DATA+1], ax
140
        jnc     @f
141
        mov     ecx, [ebx+12]
142
        mov     edx, [ebx+16]
143
        mov     eax, [ebx]
144
        mov     dword[image_of_eax], ERROR_UNSUPPORTED_FS
145
        cmp     eax, fs_NumCdServices
146
        jae     @f
147
        add     ebx, 4
148
        call    dword[fs_CdServices + eax*4]
149
        mov     [image_of_eax], eax
150
        mov     [image_of_ebx], ebx
151
@@:
152
        call    free_cd_channel
153
        and     [cd_status], 0
6468 pathoswith 154
        stdcall kernel_free, ebp
6464 pathoswith 155
        ret
156
 
157
.nextCD:
158
        test    eax, eax    ; partition number
159
        stc
160
        jnz     @f      ; no more partitions
161
        mov     al, 1   ; /cdX/1
162
        clc
163
@@:
164
        ret
165
 
166
.maindir:   ; list partitions
167
        mov     esi, .nextCD
168
.maindir_noesi:     ; backjump from dyndisk_handler
6468 pathoswith 169
        push    ebp
170
        mov     ebp, ecx
171
        call    kernel_free
6464 pathoswith 172
        cmp     dword[ebx], 1
173
        jnz     .access_denied  ; read folder?
6468 pathoswith 174
        push    ebp
175
        pushd   [ebx+4]         ; first block
6464 pathoswith 176
        mov     ebp, [ebx+12]   ; the number of blocks to read
6468 pathoswith 177
        mov     edx, [ebx+16]   ; buffer
2288 clevermous 178
        mov     ebx, [ebx+8]    ; flags
6464 pathoswith 179
        mov     ecx, 32/4
2288 clevermous 180
        mov     edi, edx
6464 pathoswith 181
        xor     eax, eax
2288 clevermous 182
        rep stosd
183
        mov     byte [edx], 1   ; version
184
.maindir_loop:
185
        call    esi
186
        jc      .maindir_done
6464 pathoswith 187
        inc     dword[edx+8]
188
        dec     dword[esp]
2288 clevermous 189
        jns     .maindir_loop
190
        dec     ebp
191
        js      .maindir_loop
6464 pathoswith 192
        inc     dword[edx+4]
193
        mov     dword[edi], 16      ; attributes: folder
194
        mov     dword[edi+4], ebx   ; name encoding
2288 clevermous 195
        push    eax
6464 pathoswith 196
        mov     ecx, 32/4
197
        add     edi, 8
2288 clevermous 198
        xor     eax, eax
199
        rep stosd
200
        pop     eax
6464 pathoswith 201
        push    eax edx edi
202
; convert number in eax to decimal string
2288 clevermous 203
        push    -'0'
204
        mov     ecx, 10
205
@@:
206
        xor     edx, edx
207
        div     ecx
208
        push    edx
209
        test    eax, eax
210
        jnz     @b
6464 pathoswith 211
        cmp     ebx, 1
212
        jz      .uni
2288 clevermous 213
@@:
214
        pop     eax
6464 pathoswith 215
        add     eax, '0'
2288 clevermous 216
        stosb
6464 pathoswith 217
        test    eax, eax
2288 clevermous 218
        jnz     @b
6464 pathoswith 219
        pop     edi edx eax
220
        add     edi, 264
221
        jmp     .maindir_loop
222
 
223
.uni:
224
        pop     eax
225
        add     eax, '0'
226
        stosw
227
        test    eax, eax
228
        jnz     .uni
229
        pop     edi edx eax
2288 clevermous 230
        add     edi, 520
231
        jmp     .maindir_loop
6464 pathoswith 232
 
2288 clevermous 233
.maindir_done:
6464 pathoswith 234
        pop     eax eax
2288 clevermous 235
        mov     ebx, [edx+4]
236
        xor     eax, eax
237
        dec     ebp
238
        js      @f
239
        mov     al, ERROR_END_OF_FILE
240
@@:
241
        mov     [image_of_eax], eax
242
        mov     [image_of_ebx], ebx
243
        ret
6464 pathoswith 244
 
2288 clevermous 245
.access_denied:
6464 pathoswith 246
        mov     dword[image_of_eax], ERROR_ACCESS_DENIED
2288 clevermous 247
        ret
248
 
6464 pathoswith 249
.rootdir:   ; / - virtual root folder
250
        cmp     dword[ebx], 1   ; read folder?
251
        jnz     .access_denied
252
        mov     ebp, [ebx+12]   ; number of blocks
253
        mov     edx, [ebx+16]   ; return area
254
        push    dword[ebx+4]    ; first block
2288 clevermous 255
        mov     ebx, [ebx+8]    ; flags
6464 pathoswith 256
        mov     ecx, 32/4
257
        mov     edi, edx
2288 clevermous 258
        xor     eax, eax
259
        rep stosd
260
        mov     byte [edx], 1   ; version
4277 clevermous 261
        sub     esp, 16
6464 pathoswith 262
.rootdir_loop:
4277 clevermous 263
        push    edi
264
        lea     edi, [esp+4]
265
        call    dyndisk_enum_root
266
        pop     edi
267
        test    eax, eax
6464 pathoswith 268
        jz      .rootdirCD
269
        inc     dword[edx+8]
270
        dec     dword[esp+16]
271
        jns     .rootdir_loop
4277 clevermous 272
        dec     ebp
6464 pathoswith 273
        js      .rootdir_loop
274
        inc     dword[edx+4]
275
        mov     dword[edi], 16      ; attributes: folder
276
        mov     dword[edi+4], ebx   ; name encoding
4277 clevermous 277
        push    eax
6464 pathoswith 278
        mov     ecx, 32/4
279
        add     edi, 8
4277 clevermous 280
        xor     eax, eax
281
        rep stosd
6468 pathoswith 282
        push    edi
283
        lea     esi, [esp+8]
6464 pathoswith 284
        cmp     ebx, 1
285
        jz      .uni2
4277 clevermous 286
@@:
287
        lodsb
288
        stosb
6464 pathoswith 289
        test    eax, eax
4277 clevermous 290
        jnz     @b
6468 pathoswith 291
        pop     edi eax
6464 pathoswith 292
        add     edi, 264
293
        jmp     .rootdir_loop
294
 
295
.uni2:
296
        lodsb
297
        stosw
298
        test    eax, eax
299
        jnz     .uni2
6468 pathoswith 300
        pop     edi eax
4277 clevermous 301
        add     edi, 520
6464 pathoswith 302
        jmp     .rootdir_loop
303
 
304
.rootdirCD:
4277 clevermous 305
        add     esp, 16
6464 pathoswith 306
        or      esi, -1
307
.rootdirCD_loop:
308
        inc     esi
309
        cmp     esi, 10
310
        jnc     .rootdir_done
311
        mov     eax, esi
312
        not     eax
313
        and     eax, 3
314
        shl     eax, 1
315
        inc     eax
316
        mov     ecx, esi
317
        shr     ecx, 2
318
        bt      [ecx*5+DRIVE_DATA+1], ax
319
        jnc     .rootdirCD_loop
320
        inc     dword[edx+8]
321
        dec     dword[esp]
322
        jns     .rootdirCD_loop
2288 clevermous 323
        dec     ebp
6464 pathoswith 324
        js      .rootdirCD_loop
325
        inc     dword[edx+4]
326
        mov     dword[edi], 16      ; attributes: folder
327
        mov     dword[edi+4], ebx   ; name encoding
328
        mov     ecx, 32/4
2288 clevermous 329
        add     edi, 8
6464 pathoswith 330
        xor     eax, eax
2288 clevermous 331
        rep stosd
6464 pathoswith 332
        mov     eax, esi
333
        add     eax, '0'
334
        cmp     ebx, 1
335
        jz      @f
336
        mov     word [edi], 'cd'
337
        mov     [edi+2], ax
338
        add     edi, 264
339
        jmp     .rootdirCD_loop
340
 
2288 clevermous 341
@@:
6464 pathoswith 342
        mov     dword[edi], 640063h
343
        mov     [edi+4], eax
2288 clevermous 344
        add     edi, 520
6464 pathoswith 345
        jmp     .rootdirCD_loop
346
 
347
.rootdir_done:
2288 clevermous 348
        pop     eax
349
        mov     ebx, [edx+4]
350
        xor     eax, eax
351
        dec     ebp
352
        js      @f
353
        mov     al, ERROR_END_OF_FILE
354
@@:
355
        mov     [image_of_eax], eax
356
        mov     [image_of_ebx], ebx
357
        ret
358
 
4700 mario79 359
;-----------------------------------------------------------------------------
2288 clevermous 360
process_replace_file_name:
6464 pathoswith 361
; in: [esi] = virtual path
362
; out: [esi]+[ebp] = physical path
3689 mario79 363
        xor     edi, edi
6471 pathoswith 364
        xor     ebp, ebp
2288 clevermous 365
.loop:
3711 clevermous 366
        cmp     edi, [full_file_name_table.size]
3689 mario79 367
        jae     .notfound
2288 clevermous 368
        push    esi edi
6464 pathoswith 369
        shl     edi, 7
6471 pathoswith 370
        add     edi, [full_file_name_table]
2288 clevermous 371
@@:
6464 pathoswith 372
        cmp     byte [edi], 0
2288 clevermous 373
        jz      .dest_done
374
        lodsb
375
        test    al, al
376
        jz      .cont
6464 pathoswith 377
        or      al, 20h
2288 clevermous 378
        scasb
379
        jz      @b
6464 pathoswith 380
.cont:
381
        pop     edi esi
382
        inc     edi
383
        jmp     .loop
384
 
2288 clevermous 385
.dest_done:
386
        cmp     byte [esi], 0
387
        jz      .found
388
        cmp     byte [esi], '/'
389
        jnz     .cont
390
.found:
391
        pop     edi eax
6464 pathoswith 392
        shl     edi, 7
6471 pathoswith 393
        add     edi, [full_file_name_table]
2288 clevermous 394
        mov     ebp, esi
395
        lea     esi, [edi+64]
396
.notfound:
397
        ret
6464 pathoswith 398
 
3689 mario79 399
;-----------------------------------------------------------------------------
3663 mario79 400
uglobal
6471 pathoswith 401
addDirSeal db  ?
3663 mario79 402
endg
6338 serge 403
 
6464 pathoswith 404
sys_current_directory:  ; sysfunction 30
2288 clevermous 405
        mov     eax, [current_slot]
406
        mov     edi, [eax+APPDATA.cur_dir]
407
        dec     ebx
408
        jz      .set
409
        dec     ebx
410
        jz      .get
3663 mario79 411
        dec     ebx
412
        jz      .mount_additional_directory
6471 pathoswith 413
        dec     ebx
414
        jz      .get16
415
@@:
2288 clevermous 416
        ret
3663 mario79 417
 
418
.mount_additional_directory:
6464 pathoswith 419
; in: ecx -> dir name+dir path (128)
6471 pathoswith 420
        mov     al, 1
421
        xchg    [addDirSeal], al
422
        test    al, al
423
        jnz     @b
3663 mario79 424
        mov     esi, ecx
425
        mov     edi, sysdir_name1
426
        mov     ecx, 63
6464 pathoswith 427
        rep movsb   ; copying fake directory name
3663 mario79 428
        inc     esi
429
        xor     eax, eax
6464 pathoswith 430
        stosb       ; terminator of name, in case if we get the inlet trash
6471 pathoswith 431
        mov     cl, 63
432
        cmp     word [esi], 2
433
        jz      .utf16
434
        call    cp866toUTF8_string
435
@@:
436
        mov     byte [edi], 0
3663 mario79 437
        mov     [full_file_name_table.size], 2
438
        ret
6338 serge 439
 
6471 pathoswith 440
.utf16:
441
        add     esi, 2
442
        call    UTF16to8_string
443
        jmp     @b
444
 
6464 pathoswith 445
.get:       ; in: ecx -> buffer, edx = length
6471 pathoswith 446
        mov     esi, edi
6534 pathoswith 447
        inc     esi
6471 pathoswith 448
        mov     edi, ecx
449
        cmp     edx, maxPathLength
450
        jc      @f
451
        mov     edx, maxPathLength
2288 clevermous 452
@@:
453
        mov     ecx, edx
6471 pathoswith 454
@@:
455
        dec     ecx
456
        js      @f
457
        call    utf8to16
458
        call    uni2ansi_char
459
        stosb
460
        test    al, al
461
        jnz     @b
462
        sub     edx, ecx
463
        mov     ecx, edx
464
@@:
465
        mov     [esp+32], ecx
2288 clevermous 466
        ret
467
 
6471 pathoswith 468
.get16:
469
        mov     esi, edi
6534 pathoswith 470
        inc     esi
6471 pathoswith 471
        mov     edi, ecx
472
        cmp     edx, maxPathLength
473
        jc      @f
474
        mov     edx, maxPathLength
475
@@:
476
        shr     edx, 1
477
        mov     ecx, edx
478
@@:
479
        dec     ecx
480
        js      @f
481
        call    utf8to16
482
        stosw
483
        test    ax, ax
484
        jnz     @b
485
        sub     edx, ecx
486
        mov     ecx, edx
487
@@:
488
        mov     [esp+32], ecx
2288 clevermous 489
        ret
6464 pathoswith 490
 
2288 clevermous 491
.set:
6464 pathoswith 492
        pop     eax
6468 pathoswith 493
        push    maxPathLength
6464 pathoswith 494
        push    edi
495
        push    eax
2288 clevermous 496
        mov     ebx, ecx
497
get_full_file_name:
6464 pathoswith 498
; in: ebx -> file name, [esp+4] -> destination, [esp+8] = max length
6502 pathoswith 499
; out: UTF-8 string, eax=0 -> out of length
6471 pathoswith 500
        push    ebp ebx
6502 pathoswith 501
        cmp     byte [ebx], 0
502
        jz      .set_relative
6471 pathoswith 503
        mov     esi, ebx
6502 pathoswith 504
        cmp     byte [ebx], 4
505
        jnc     @f
6471 pathoswith 506
        inc     esi
507
@@:
508
        cmp     byte [esi], '/'
6468 pathoswith 509
        jnz     .set_relative
6471 pathoswith 510
        inc     esi
511
        cmp     byte [ebx], 2
512
        jnz     @f
513
        inc     esi
514
@@:
6468 pathoswith 515
        call    process_replace_file_name
6471 pathoswith 516
        mov     edi, [esp+12]
517
        mov     ecx, [esp+16]
6502 pathoswith 518
        mov     al, 3
519
        mov     ah, '/'
520
        stosw
521
        sub     ecx, 2
6471 pathoswith 522
        test    ebp, ebp
523
        jz      .absolute
524
@@:
6468 pathoswith 525
        lodsb
526
        stosb
6471 pathoswith 527
        dec     ecx
6468 pathoswith 528
        test    al, al
6471 pathoswith 529
        jnz     @b
530
        mov     esi, ebp
6468 pathoswith 531
        dec     edi
6471 pathoswith 532
.absolute:
533
        cmp     byte [ebx], 2
6502 pathoswith 534
        jz      .utf16
535
        cmp     byte [ebx], 3
536
        jz      .utf8
6471 pathoswith 537
        call    cp866toUTF8_string
538
        jns     .ret
539
        jmp     .fail
540
 
6502 pathoswith 541
.utf8:
542
        dec     ecx
543
        js      .fail
544
        lodsb
545
        stosb
546
        test    al, al
547
        jz      .ret
548
        jmp     .utf8
549
 
550
.utf16:
6471 pathoswith 551
        call    UTF16to8_string
552
        jns     .ret
6468 pathoswith 553
.fail:
554
        mov     byte [edi], 0
555
        xor     eax, eax
6471 pathoswith 556
        pop     ebx ebp
6468 pathoswith 557
        ret     8
558
 
559
.set_relative:
560
        mov     edi, [current_slot]
561
        mov     edi, [edi+APPDATA.cur_dir]
562
        mov     edx, edi
6471 pathoswith 563
        mov     ecx, [esp+16]
6468 pathoswith 564
        xor     eax, eax
565
        repnz scasb
566
        mov     esi, edi
567
        dec     esi
6471 pathoswith 568
        mov     edi, [esp+12]
6468 pathoswith 569
        jecxz   .fail
6502 pathoswith 570
        cmp     byte [ebx], 0
571
        jz      .set_ok
572
        cmp     byte [ebx], 4
573
        jnc     .relative
574
        inc     ebx
575
        cmp     byte [ebx-1], 2
6471 pathoswith 576
        jz      .relative16
2288 clevermous 577
.relative:
578
        cmp     byte [ebx], 0
579
        jz      .set_ok
580
        cmp     word [ebx], '.'
581
        jz      .set_ok
582
        cmp     word [ebx], './'
6471 pathoswith 583
        jz      .next
2288 clevermous 584
        cmp     word [ebx], '..'
585
        jnz     .doset_relative
586
        cmp     byte [ebx+2], 0
587
        jz      @f
588
        cmp     byte [ebx+2], '/'
589
        jnz     .doset_relative
6471 pathoswith 590
        inc     ebx
2288 clevermous 591
@@:
592
        dec     esi
593
        cmp     byte [esi], '/'
594
        jnz     @b
6471 pathoswith 595
.next:
596
        add     ebx, 2
2288 clevermous 597
        jmp     .relative
6464 pathoswith 598
 
2288 clevermous 599
.set_ok:
6471 pathoswith 600
        cmp     edx, edi    ; is destination equal to cur_dir?
6468 pathoswith 601
        jz      @f
2288 clevermous 602
        mov     ecx, esi
6468 pathoswith 603
        sub     ecx, edx
2288 clevermous 604
        mov     esi, edx
605
        rep movsb
606
        mov     byte [edi], 0
6471 pathoswith 607
.ret:
6464 pathoswith 608
        mov     al, 1
6471 pathoswith 609
        pop     ebx ebp
2288 clevermous 610
        ret     8
6464 pathoswith 611
 
6468 pathoswith 612
@@:
2288 clevermous 613
        mov     byte [esi], 0
6471 pathoswith 614
        jmp     .ret
6464 pathoswith 615
 
2288 clevermous 616
.doset_relative:
6471 pathoswith 617
        cmp     edx, edi    ; is destination equal to cur_dir?
618
        mov     edi, esi
619
        jz      @f
620
        mov     edi, [esp+12]
2288 clevermous 621
        mov     ecx, esi
6468 pathoswith 622
        sub     ecx, edx
2288 clevermous 623
        mov     esi, edx
624
        mov     edx, edi
625
        rep movsb
6471 pathoswith 626
@@:
2288 clevermous 627
        mov     byte [edi], '/'
628
        inc     edi
6471 pathoswith 629
        mov     esi, ebx
630
        mov     ecx, edx
631
        add     ecx, [esp+16]
632
        sub     ecx, edi
633
        mov     ebx, [esp]
634
        jmp     .absolute
635
 
636
.relative16:
637
        cmp     word [ebx], 0
638
        jz      .set_ok
639
        cmp     word [ebx], '.'
640
        jnz     .doset_relative
641
        cmp     word [ebx+2], 0
642
        jz      .set_ok
643
        cmp     word [ebx+2], '/'
644
        jz      .next16
645
        cmp     word [ebx+2], '.'
646
        jnz     .doset_relative
647
        cmp     word [ebx+4], 0
648
        jz      @f
649
        cmp     word [ebx+4], '/'
650
        jnz     .doset_relative
651
        add     ebx, 2
2288 clevermous 652
@@:
6471 pathoswith 653
        dec     esi
654
        cmp     byte [esi], '/'
655
        jnz     @b
656
.next16:
657
        add     ebx, 4
658
        jmp     .relative16
6464 pathoswith 659
 
6462 pathoswith 660
include "parse_fn.inc"
661
include "fs_common.inc"
662
include "iso9660.inc"   ; read for CD filesystem
663
include "fat.inc"
664
include "ntfs.inc"
665
include "ext.inc"
6503 pathoswith 666
; include "xfs.asm"
667
 
668
xfs_create_partition:
669
        xor     eax, eax
670
        ret