Subversion Repositories Kolibri OS

Rev

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

Rev 7736 Rev 9888
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2013-2020. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2013-2022. All rights reserved. ;;
4
;;  Distributed under terms of the GNU General Public License   ;;
4
;;  Distributed under terms of the GNU General Public License   ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 7736 $
8
$Revision: 9888 $
Line 9... Line 9...
9
 
9
 
Line 159... Line 159...
159
        xchg    al, ah
159
        xchg    al, ah
160
        mov     [edi+XFS.versionnum], eax
160
        mov     [edi+XFS.versionnum], eax
161
        and     eax, XFS_SB_VERSION_NUMBITS
161
        and     eax, XFS_SB_VERSION_NUMBITS
162
        mov     [edi+XFS.version], eax
162
        mov     [edi+XFS.version], eax
Line -... Line 163...
-
 
163
 
-
 
164
        mov     [edi+XFS.conv_time_to_kos_epoch], xfs._.conv_time_to_kos_epoch
163
 
165
 
164
        movbe   eax, [ebx+xfs_sb.sb_features2]
166
        movbe   eax, [ebx+xfs_sb.sb_features2]
165
        mov     [edi+XFS.features2], eax
167
        mov     [edi+XFS.features2], eax
166
        cmp     [edi+XFS.version], 5
168
        cmp     [edi+XFS.version], 5
167
        jz      .v5
169
        jz      .v5
Line 196... Line 198...
196
        mov     [edi+XFS.da_node_magic], XFS_DA3_NODE_MAGIC
198
        mov     [edi+XFS.da_node_magic], XFS_DA3_NODE_MAGIC
197
        mov     [edi+XFS.bmap_magic], XFS_BMAP3_MAGIC
199
        mov     [edi+XFS.bmap_magic], XFS_BMAP3_MAGIC
198
        mov     [edi+XFS.dir_block_size], sizeof.xfs_dir3_data_hdr
200
        mov     [edi+XFS.dir_block_size], sizeof.xfs_dir3_data_hdr
199
        mov     [edi+XFS.bmbt_block_size], sizeof.xfs_bmbt3_block
201
        mov     [edi+XFS.bmbt_block_size], sizeof.xfs_bmbt3_block
200
        mov     [edi+XFS.da_blkinfo_size], sizeof.xfs_da3_blkinfo
202
        mov     [edi+XFS.da_blkinfo_size], sizeof.xfs_da3_blkinfo
-
 
203
        test    [edi+XFS.features_incompat], XFS_SB_FEAT_INCOMPAT_BIGTIME
-
 
204
        jz      @f      ; no bigtime
-
 
205
        mov     [edi+XFS.conv_time_to_kos_epoch], xfs._.conv_bigtime_to_kos_epoch
-
 
206
@@:
201
.vcommon:
207
.vcommon:
Line 202... Line 208...
202
 
208
 
203
        movzx   eax, [ebx+xfs_sb.sb_inodesize]
209
        movzx   eax, [ebx+xfs_sb.sb_inodesize]
204
        xchg    al, ah
210
        xchg    al, ah
Line 1371... Line 1377...
1371
        movbe   eax, [edx+DQ.lo]
1377
        movbe   eax, [edx+DQ.lo]
1372
        xor     edx, edx
1378
        xor     edx, edx
1373
        ret
1379
        ret
1374
endp
1380
endp
Line -... Line 1381...
-
 
1381
 
-
 
1382
proc xfs._.conv_time_to_kos_epoch
-
 
1383
        movbe   eax, [ecx+DQ.hi_be]
-
 
1384
        call    fsTime2bdfe
-
 
1385
        ret
Line -... Line 1386...
-
 
1386
endp
-
 
1387
 
-
 
1388
proc xfs._.conv_bigtime_to_kos_epoch
-
 
1389
NANOSEC_PER_SEC = 1_000_000_000
-
 
1390
BIGTIME_TO_UNIX_OFFSET = 0x80000000     ; int32 min
-
 
1391
UNIXTIME_TO_KOS_OFFSET = (365*31+8)*24*60*60  ; 01.01.1970--01.01.2001
-
 
1392
BIGTIME_TO_KOS_OFFSET = BIGTIME_TO_UNIX_OFFSET + UNIXTIME_TO_KOS_OFFSET
-
 
1393
BIGTIME_TO_KOS_OFFSET_NS = BIGTIME_TO_KOS_OFFSET * NANOSEC_PER_SEC
-
 
1394
        movbe   edx, [ecx+DQ.hi_be]
-
 
1395
        movbe   eax, [ecx+DQ.lo_be]
-
 
1396
        sub     eax, BIGTIME_TO_KOS_OFFSET_NS AND 0xffffffff
-
 
1397
        sbb     edx, BIGTIME_TO_KOS_OFFSET_NS SHR 32
-
 
1398
        jnc     .after_kos_epoch_begin
-
 
1399
        xor     eax, eax        ; set to very begin of kolibrios epoch
-
 
1400
        xor     edx, edx
-
 
1401
        jmp     .time_to_bdfe
-
 
1402
.after_kos_epoch_begin:
-
 
1403
        cmp     edx, NANOSEC_PER_SEC
-
 
1404
        jb      .time_to_bdfe
-
 
1405
        mov     edx, NANOSEC_PER_SEC - 1
-
 
1406
        mov     eax, -1         ; very end of kolibrios epoch
-
 
1407
.time_to_bdfe:
-
 
1408
        mov     ecx, NANOSEC_PER_SEC
-
 
1409
        div     ecx
-
 
1410
        call    fsTime2bdfe
-
 
1411
        ret
1375
 
1412
endp
1376
 
1413
 
1377
proc xfs_get_inode_info uses ebx, _src, _dst
1414
proc xfs_get_inode_info uses ebx esi edi, _src, _dst
1378
        ; get access time and other file properties
1415
        ; get access time and other file properties
1379
        ; useful for browsing directories
1416
        ; useful for browsing directories
1380
        ; called for each dir entry
1417
        ; called for each dir entry
1381
        xor     eax, eax
1418
        xor     eax, eax
1382
        mov     edx, [_src]
1419
        mov     esi, [_src]
1383
        movzx   ecx, [edx+xfs_inode.di_core.di_mode]
1420
        movzx   ecx, [esi+xfs_inode.di_core.di_mode]
1384
        xchg    cl, ch
1421
        xchg    cl, ch
1385
        test    ecx, S_IFDIR
1422
        test    ecx, S_IFDIR
1386
        jz      @f
1423
        jz      @f
1387
        movi    eax, 0x10       ; set directory flag
1424
        movi    eax, 0x10       ; set directory flag
1388
@@:
1425
@@:
1389
        mov     edi, [_dst]
1426
        mov     edi, [_dst]
1390
        mov     [edi+bdfe.attr], eax
1427
        mov     [edi+bdfe.attr], eax
1391
        movbe   eax, [edx+xfs_inode.di_core.di_size.lo]
1428
        movbe   edx, [esi+xfs_inode.di_core.di_size.hi_be]
1392
        mov     [edi+bdfe.size.hi], eax
1429
        movbe   eax, [esi+xfs_inode.di_core.di_size.lo_be]
Line 1393... Line 1430...
1393
        movbe   eax, [edx+xfs_inode.di_core.di_size.hi]
1430
        mov     [edi+bdfe.size.hi], edx
1394
        mov     [edi+bdfe.size.lo], eax
1431
        mov     [edi+bdfe.size.lo], eax
1395
 
-
 
1396
        add     edi, 8
-
 
1397
        movbe   eax, [edx+xfs_inode.di_core.di_ctime.t_sec]
1432
 
1398
        push    edx
-
 
1399
        sub     eax, 978307200  ; 01.01.1970-01.01.2001 = (365*31+8)*24*60*60
-
 
1400
        call    fsTime2bdfe
1433
        add     edi, bdfe.ctime
1401
        pop     edx
-
 
1402
 
-
 
1403
        movbe   eax, [edx+xfs_inode.di_core.di_atime.t_sec]
1434
        lea     ecx, [esi+xfs_inode.di_core.di_ctime]
1404
        push    edx
-
 
1405
        sub     eax, 978307200  ; 01.01.1970-01.01.2001 = (365*31+8)*24*60*60
-
 
1406
        call    fsTime2bdfe
1435
        call    [ebp+XFS.conv_time_to_kos_epoch]
1407
        pop     edx
-
 
1408
 
-
 
1409
        movbe   eax, [edx+xfs_inode.di_core.di_mtime.t_sec]
1436
        lea     ecx, [esi+xfs_inode.di_core.di_atime]
1410
        push    edx
-
 
Line 1411... Line 1437...
1411
        sub     eax, 978307200  ; 01.01.1970-01.01.2001 = (365*31+8)*24*60*60
1437
        call    [ebp+XFS.conv_time_to_kos_epoch]
1412
        call    fsTime2bdfe
1438
        lea     ecx, [esi+xfs_inode.di_core.di_mtime]
1413
        pop     edx
1439
        call    [ebp+XFS.conv_time_to_kos_epoch]
1414
 
1440