1,29 → 1,46 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2013-2015. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; Copyright (C) KolibriOS team 2013-2016. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License. ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
$Revision$ |
|
; XFS external functions |
; in: |
; ebx -> parameter structure of sysfunc 70 |
; ebp -> XFS structure |
; [esi]+[[esp+4]] = name |
; out: |
; eax, ebx = return values for sysfunc 70 |
iglobal |
align 4 |
xfs_user_functions: |
dd xfs_free |
dd (xfs_user_functions_end - xfs_user_functions - 4) / 4 |
dd xfs_ReadFile |
dd xfs_ReadFolder |
dd 0;xfs_CreateFile |
dd 0;xfs_WriteFile |
dd 0;xfs_SetFileEnd |
dd xfs_GetFileInfo |
dd 0;xfs_SetFileInfo |
dd 0 |
dd 0;xfs_Delete |
dd 0;xfs_CreateFolder |
xfs_user_functions_end: |
endg |
|
include 'xfs.inc' |
|
; |
; This file contains XFS related code. |
; For more information on XFS check sources below. |
; |
; 1. XFS Filesystem Structure, 2nd Edition, Revision 1. Silicon Graphics Inc. 2006 |
; 2. Linux source http://kernel.org |
; |
|
|
; test partition type (valid XFS one?) |
; alloc and fill XFS (see xfs.inc) structure |
; this function is called for each partition |
; returns 0 (not XFS or invalid) / pointer to partition structure |
; Mount if it's a valid XFS partition. |
xfs_create_partition: |
; in: |
; ebp -> PARTITION structure |
; ebx -> boot sector |
; out: |
; eax -> XFS structure, 0 = not XFS |
push ebx ecx edx esi edi |
cmp dword [esi+DISK.MediaInfo.SectorSize], 512 |
jnz .error |
211,25 → 228,6 |
ret |
|
|
iglobal |
align 4 |
xfs_user_functions: |
dd xfs_free |
dd (xfs_user_functions_end - xfs_user_functions - 4) / 4 |
dd xfs_Read |
dd xfs_ReadFolder |
dd 0;xfs_Rewrite |
dd 0;xfs_Write |
dd 0;xfs_SetFileEnd |
dd xfs_GetFileInfo |
dd 0;xfs_SetFileInfo |
dd 0 |
dd 0;xfs_Delete |
dd 0;xfs_CreateFolder |
xfs_user_functions_end: |
endg |
|
|
; lock partition access mutex |
proc xfs_lock |
;DEBUGF 1,"xfs_lock\n" |
1739,28 → 1737,22 |
mov eax, [edx + xfs_inode.di_core.di_ctime.t_sec] |
bswap eax |
push edx |
xor edx, edx |
add eax, 3054539008 ;(369 * 365 + 89) * 24 * 3600 |
adc edx, 2 |
call ntfs_datetime_to_bdfe.sec |
sub eax, 978307200 ; 01.01.1970-01.01.2001 = (365*31+8)*24*60*60 |
call fsTime2bdfe |
pop edx |
|
mov eax, [edx + xfs_inode.di_core.di_atime.t_sec] |
bswap eax |
push edx |
xor edx, edx |
add eax, 3054539008 ;(369 * 365 + 89) * 24 * 3600 |
adc edx, 2 |
call ntfs_datetime_to_bdfe.sec |
sub eax, 978307200 |
call fsTime2bdfe |
pop edx |
|
mov eax, [edx + xfs_inode.di_core.di_mtime.t_sec] |
bswap eax |
push edx |
xor edx, edx |
add eax, 3054539008 ;(369 * 365 + 89) * 24 * 3600 |
adc edx, 2 |
call ntfs_datetime_to_bdfe.sec |
sub eax, 978307200 |
call fsTime2bdfe |
pop edx |
|
.quit: |
1947,18 → 1939,16 |
|
|
;---------------------------------------------------------------- |
; xfs_Read - XFS implementation of reading a file |
; xfs_ReadFile - XFS implementation of reading a file |
; in: ebp = pointer to XFS structure |
; in: esi+[esp+4] = name |
; in: ebx = pointer to parameters from sysfunc 70 |
; out: eax, ebx = return values for sysfunc 70 |
;---------------------------------------------------------------- |
xfs_Read: |
xfs_ReadFile: |
push ebx ecx edx esi edi |
call xfs_lock |
|
add esi, [esp + 24] |
;DEBUGF 1,"xfs_Read: %d %d |%s|\n",[ebx+4],[ebx+12],esi |
stdcall xfs_get_inode, esi |
mov ecx, edx |
or ecx, eax |