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 |