userlibandfileserver/fileserver/sfile/sf_file.cpp
changeset 134 95847726fe57
parent 132 e4a7b1cbe40c
child 140 2ac1c5c27758
equal deleted inserted replaced
133:2a0ada0a1bf8 134:95847726fe57
    14 //
    14 //
    15  
    15  
    16 #include "sf_std.h"
    16 #include "sf_std.h"
    17 #include "sf_file_cache.h"
    17 #include "sf_file_cache.h"
    18 #include "cl_std.h"
    18 #include "cl_std.h"
    19 
    19 #ifdef OST_TRACE_COMPILER_IN_USE
       
    20 #include "sf_fileTraces.h"
       
    21 #endif
    20 #if defined(_DEBUG) || defined(_DEBUG_RELEASE)
    22 #if defined(_DEBUG) || defined(_DEBUG_RELEASE)
    21 
    23 
    22 TInt OutputTraceInfo(CFsRequest* aRequest,TCorruptNameRec* aNameRec)
    24 TInt OutputTraceInfo(CFsRequest* aRequest,TCorruptNameRec* aNameRec)
    23 	{	
    25 	{	
    24 	RThread tT;
    26 	RThread tT;
  1492 	if ((share->iMode&EFileWrite)==0)
  1494 	if ((share->iMode&EFileWrite)==0)
  1493 		return(KErrAccessDenied);
  1495 		return(KErrAccessDenied);
  1494 	r=share->CheckMount();
  1496 	r=share->CheckMount();
  1495 	if (r!=KErrNone)
  1497 	if (r!=KErrNone)
  1496 		return(r);
  1498 		return(r);
  1497 
  1499 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBFLUSHDATAL1, "this %x", &share->File());
  1498 	TRACE1(UTF::EBorder, UTraceModuleFileSys::ECFileCBFlushDataL, EF32TraceUidFileSys, &share->File());
       
  1499 	TRAP(r,share->File().FlushDataL());
  1500 	TRAP(r,share->File().FlushDataL());
  1500 	TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECFileCBFlushDataLRet, EF32TraceUidFileSys, r);
  1501 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBFLUSHDATAL1RET, "r %d", r);
  1501 
       
  1502 	return(r);
  1502 	return(r);
  1503 	}
  1503 	}
  1504 
  1504 
  1505 TInt TFsFileFlush::Initialise(CFsRequest* aRequest)
  1505 TInt TFsFileFlush::Initialise(CFsRequest* aRequest)
  1506 //
  1506 //
  1665 		return(KErrAccessDenied);
  1665 		return(KErrAccessDenied);
  1666 	
  1666 	
  1667     TUint setAttMask=(TUint)(aRequest->Message().Int0());
  1667     TUint setAttMask=(TUint)(aRequest->Message().Int0());
  1668 	TUint clearAttMask=(TUint)aRequest->Message().Int1();
  1668 	TUint clearAttMask=(TUint)aRequest->Message().Int1();
  1669 	ValidateAtts(share->File().Att(),setAttMask,clearAttMask);
  1669 	ValidateAtts(share->File().Att(),setAttMask,clearAttMask);
  1670 
  1670 	OstTraceExt3(TRACE_FILESYSTEM, FSYS_ECFILECBSETENTRYL1, "this %x aSetAttMask %x aClearAttMask %x", (TUint) &share->File(), (TUint) setAttMask, (TUint) clearAttMask);
  1671 	TRACE5(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetEntryL, EF32TraceUidFileSys, &share->File(), 0, 0, setAttMask,clearAttMask);
       
  1672 	TRAP(r,share->File().SetEntryL(TTime(0),setAttMask,clearAttMask))
  1671 	TRAP(r,share->File().SetEntryL(TTime(0),setAttMask,clearAttMask))
  1673 	TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetEntryLRet, EF32TraceUidFileSys, r);
  1672 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBSETENTRYL1RET, "r %d", r);
  1674 
       
  1675 	return(r);
  1673 	return(r);
  1676 	}
  1674 	}
  1677 
  1675 
  1678 
  1676 
  1679 TInt TFsFileSetAtt::Initialise(CFsRequest* aRequest)
  1677 TInt TFsFileSetAtt::Initialise(CFsRequest* aRequest)
  1731 		return(KErrAccessDenied);
  1729 		return(KErrAccessDenied);
  1732 	
  1730 	
  1733 	TTime time;
  1731 	TTime time;
  1734 	TPtr8 t((TUint8*)&time,sizeof(TTime));
  1732 	TPtr8 t((TUint8*)&time,sizeof(TTime));
  1735 	aRequest->ReadL(KMsgPtr0,t);
  1733 	aRequest->ReadL(KMsgPtr0,t);
  1736 
  1734 	OstTraceExt3(TRACE_FILESYSTEM, FSYS_ECFILECBSETENTRYL2, "this %x aSetAttMask %x aClearAttMask %x", (TUint) &share->File(), (TUint) KEntryAttModified, (TUint) 0);
  1737 	TRACE5(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetEntryL, EF32TraceUidFileSys, &share->File(), 0, 0, KEntryAttModified,0);
       
  1738 	TRAP(r,share->File().SetEntryL(time,KEntryAttModified,0))
  1735 	TRAP(r,share->File().SetEntryL(time,KEntryAttModified,0))
  1739 	TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetEntryLRet, EF32TraceUidFileSys, r);
  1736 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBSETENTRYL2RET, "r %d", r);
  1740 
       
  1741 	return(r);
  1737 	return(r);
  1742 	}
  1738 	}
  1743 
  1739 
  1744 
  1740 
  1745 TInt TFsFileSetModified::Initialise(CFsRequest* aRequest)
  1741 TInt TFsFileSetModified::Initialise(CFsRequest* aRequest)
  1780 	aRequest->ReadL(KMsgPtr0,t);
  1776 	aRequest->ReadL(KMsgPtr0,t);
  1781 	TUint setAttMask=(TUint)(aRequest->Message().Int1()|KEntryAttModified);
  1777 	TUint setAttMask=(TUint)(aRequest->Message().Int1()|KEntryAttModified);
  1782 	TUint clearAttMask=(TUint)aRequest->Message().Int2();
  1778 	TUint clearAttMask=(TUint)aRequest->Message().Int2();
  1783 	ValidateAtts(share->File().Att(),setAttMask,clearAttMask);//	Validate attributes
  1779 	ValidateAtts(share->File().Att(),setAttMask,clearAttMask);//	Validate attributes
  1784 
  1780 
  1785 	TRACE5(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetEntryL, EF32TraceUidFileSys, &share->File(), 0, 0, setAttMask,clearAttMask);
  1781 	OstTraceExt3(TRACE_FILESYSTEM, FSYS_ECFILECBSETENTRYL3, "this %x aSetAttMask %x aClearAttMask %x", (TUint) &share->File(), (TUint) setAttMask, (TUint) clearAttMask);
  1786 	TRAP(r,share->File().SetEntryL(time,setAttMask,clearAttMask))
  1782 	TRAP(r,share->File().SetEntryL(time,setAttMask,clearAttMask))
  1787 	TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetEntryLRet, EF32TraceUidFileSys, r);
  1783 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBSETENTRYL3RET, "r %d", r);
  1788 
       
  1789 	return(r);
  1784 	return(r);
  1790 	}
  1785 	}
  1791 
  1786 
  1792 TInt TFsFileSet::Initialise(CFsRequest* aRequest)
  1787 TInt TFsFileSet::Initialise(CFsRequest* aRequest)
  1793 //
  1788 //
  1885 	if ((share->iMode&EFileWrite)==0)
  1880 	if ((share->iMode&EFileWrite)==0)
  1886 		return(KErrAccessDenied); // File must have write permission
  1881 		return(KErrAccessDenied); // File must have write permission
  1887 
  1882 
  1888 	TPtrC filePath = aRequest->Dest().FullName().Mid(2);
  1883 	TPtrC filePath = aRequest->Dest().FullName().Mid(2);
  1889 	CFileCB& file = share->File();
  1884 	CFileCB& file = share->File();
  1890 
  1885 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBRENAMEL, "this %x", (TUint) &file);
  1891 	TRACEMULT2(UTF::EBorder, UTraceModuleFileSys::ECFileCBRenameL, EF32TraceUidFileSys, 
  1886 	OstTraceData(TRACE_FILESYSTEM, FSYS_ECFILECBRENAMELYS_EFILENAME, "FileName %S", filePath.Ptr(), filePath.Length()<<1);
  1892 		(TUint) &file, filePath);
       
  1893 	TRAP(r,file.RenameL(filePath));
  1887 	TRAP(r,file.RenameL(filePath));
  1894 	TRACERETMULT1(UTF::EBorder, UTraceModuleFileSys::ECFileCBRenameLRet, EF32TraceUidFileSys, r);
  1888 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBRENAMELRET, "r %d", r);
  1895 
       
  1896 	// Re-write the file's folded name & re-calculate the hash
  1889 	// Re-write the file's folded name & re-calculate the hash
  1897 	if (r == KErrNone)
  1890 	if (r == KErrNone)
  1898 		{
  1891 		{
  1899 		TFileName filePathF;
  1892 		TFileName filePathF;
  1900 		filePathF.CopyF(filePath);
  1893 		filePathF.CopyF(filePath);
  2335 	// as CFileCache may steal it (!)
  2328 	// as CFileCache may steal it (!)
  2336 	if (FileCache())
  2329 	if (FileCache())
  2337 		FileCache()->Close();
  2330 		FileCache()->Close();
  2338 	if (iBody && iBody->iDeleteOnClose)
  2331 	if (iBody && iBody->iDeleteOnClose)
  2339 		{
  2332 		{
  2340 		TRACEMULT2(UTF::EBorder, UTraceModuleFileSys::ECMountCBDeleteL, EF32TraceUidFileSys, DriveNumber(), FileName());
  2333 		OstTrace1(TRACE_FILESYSTEM, FSYS_ECMOUNTCBDELETEL2, "drive %d", DriveNumber());
       
  2334 		OstTraceData(TRACE_FILESYSTEM, FSYS_ECMOUNTCBDELETEL2_EFILENAME, "FileName %S", FileName().Ptr(), FileName().Length()<<1);
  2341 		TInt r;
  2335 		TInt r;
  2342 		TRAP(r, iMount->DeleteL(FileName()));
  2336 		TRAP(r, iMount->DeleteL(FileName()));
  2343 		TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECMountCBDeleteLRet, EF32TraceUidFileSys, r);
  2337 		OstTrace1(TRACE_FILESYSTEM, FSYS_ECMOUNTCBDELETEL2RET, "r %d", r);
  2344 		}
  2338 		}
  2345 
  2339 
  2346 	if(iMount)
  2340 	if(iMount)
  2347 		iMount->Close();
  2341 		iMount->Close();
  2348 	if (iMountLink.iNext!=NULL)
  2342 	if (iMountLink.iNext!=NULL)
  2956 	}
  2950 	}
  2957 
  2951 
  2958 void CFileCB::ReadL(TInt64 aPos,TInt& aLength,TDes8* aDes,const RMessagePtr2& aMessage, TInt aOffset)
  2952 void CFileCB::ReadL(TInt64 aPos,TInt& aLength,TDes8* aDes,const RMessagePtr2& aMessage, TInt aOffset)
  2959 	{
  2953 	{
  2960 	TRACETHREADID(aMessage);
  2954 	TRACETHREADID(aMessage);
  2961 	TRACE7(UTF::EBorder, UTraceModuleFileSys::ECFileCBReadL, EF32TraceUidFileSys, 
  2955 	OstTraceExt5(TRACE_FILESYSTEM, FSYS_ECFILECBREADLA, "this %x clientThreadId %x aPos %x:%x aLength %d", (TUint) this, (TUint) threadId, (TUint) I64HIGH(aPos), (TUint) I64LOW(aPos), (TUint) aLength);
  2962 		this, I64LOW(aPos), I64HIGH(aPos), aLength, aDes, threadId, aOffset);
       
  2963 
       
  2964 	iBody->iExtendedFileInterface->ReadL(aPos,aLength,aDes,aMessage,aOffset);
  2956 	iBody->iExtendedFileInterface->ReadL(aPos,aLength,aDes,aMessage,aOffset);
  2965 
  2957 
  2966 	TRACE1(UTF::EBorder, UTraceModuleFileSys::ECFileCBReadLRet, EF32TraceUidFileSys, KErrNone);
  2958 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBREADLRET, "r %d", KErrNone);
  2967 	}
  2959 	}
  2968 
  2960 
  2969 void CFileCB::WriteL(TInt64 aPos,TInt& aLength,const TDesC8* aDes,const RMessagePtr2& aMessage, TInt aOffset)
  2961 void CFileCB::WriteL(TInt64 aPos,TInt& aLength,const TDesC8* aDes,const RMessagePtr2& aMessage, TInt aOffset)
  2970 	{
  2962 	{
  2971 	TRACETHREADID(aMessage);
  2963 	TRACETHREADID(aMessage);
  2972 	TRACE7(UTF::EBorder, UTraceModuleFileSys::ECFileCBWriteL, EF32TraceUidFileSys, 
  2964 	OstTraceExt5(TRACE_FILESYSTEM, FSYS_ECFILECBWRITEL, "this %x clientThreadId %x aPos %x:%x aLength %d", (TUint) this, (TUint) threadId, (TUint) I64HIGH(aPos), (TUint) I64LOW(aPos), (TUint) aLength);
  2973 		this, I64LOW(aPos), I64HIGH(aPos), aLength, aDes, threadId, aOffset);
       
  2974 
       
  2975 	iBody->iExtendedFileInterface->WriteL(aPos,aLength,aDes,aMessage,aOffset);
  2965 	iBody->iExtendedFileInterface->WriteL(aPos,aLength,aDes,aMessage,aOffset);
  2976 
  2966 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBWRITELRET, "r %d", KErrNone);
  2977 	TRACE1(UTF::EBorder, UTraceModuleFileSys::ECFileCBWriteLRet, EF32TraceUidFileSys, KErrNone);
       
  2978 	}
  2967 	}
  2979 
  2968 
  2980 void CFileCB::SetSizeL(TInt64 aSize)
  2969 void CFileCB::SetSizeL(TInt64 aSize)
  2981 	{
  2970 	{
  2982 	TRACE3(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetSizeL, EF32TraceUidFileSys, this, I64LOW(aSize), I64HIGH(aSize));
  2971 	OstTraceExt3(TRACE_FILESYSTEM, FSYS_ECFILECBSETSIZEL, "this %x aSize %x:%x", (TUint) this, (TUint) I64HIGH(aSize), (TUint) I64LOW(aSize));
  2983 
       
  2984 	iBody->iExtendedFileInterface->SetSizeL(aSize);
  2972 	iBody->iExtendedFileInterface->SetSizeL(aSize);
  2985 
  2973 	OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBSETSIZELRET, "r %d", KErrNone);
  2986 	TRACE1(UTF::EBorder, UTraceModuleFileSys::ECFileCBSetSizeLRet, EF32TraceUidFileSys, KErrNone);
       
  2987 	}
  2974 	}
  2988 
  2975 
  2989 TBool CFileCB::ExtendedFileInterfaceSupported()
  2976 TBool CFileCB::ExtendedFileInterfaceSupported()
  2990 	{
  2977 	{
  2991 	return iBody->ExtendedFileInterfaceSupported();
  2978 	return iBody->ExtendedFileInterfaceSupported();
  3027 	return iBody->iDeleteOnClose;
  3014 	return iBody->iDeleteOnClose;
  3028 	}
  3015 	}
  3029 
  3016 
  3030 TInt CFileCB::GetInterfaceTraced(TInt aInterfaceId, TAny*& aInterface, TAny* aInput)
  3017 TInt CFileCB::GetInterfaceTraced(TInt aInterfaceId, TAny*& aInterface, TAny* aInput)
  3031 	{
  3018 	{
  3032 	TRACE2(UTF::EBorder, UTraceModuleFileSys::ECFileCBGetInterface, EF32TraceUidFileSys, aInterfaceId, aInput);
  3019 	OstTraceExt2(TRACE_FILESYSTEM, FSYS_ECFILECBGETINTERFACE, "aInterfaceId %d aInput %x", (TUint) aInterfaceId, (TUint) aInput);
  3033 
       
  3034 	TInt r = GetInterface(aInterfaceId, aInterface, aInput);
  3020 	TInt r = GetInterface(aInterfaceId, aInterface, aInput);
  3035 
  3021 	OstTraceExt2(TRACE_FILESYSTEM, FSYS_ECFILECBGETINTERFACERET, "r %d aInterface %x", (TUint) r, (TUint) aInterface);
  3036 	TRACERET2(UTF::EBorder, UTraceModuleFileSys::ECFileCBGetInterfaceRet, EF32TraceUidFileSys, r, aInterface);
       
  3037 
       
  3038 	return r;
  3022 	return r;
  3039 	}
  3023 	}
  3040 
  3024 
  3041 CFileBody::CFileBody(CFileCB* aFileCB, CFileCB::MExtendedFileInterface* aExtendedFileInterface)
  3025 CFileBody::CFileBody(CFileCB* aFileCB, CFileCB::MExtendedFileInterface* aExtendedFileInterface)
  3042   : iFileCB(aFileCB),
  3026   : iFileCB(aFileCB),
  3113 	if (((share->iMode&EFileWrite)) || ((share->File().Att()&KEntryAttModified)))
  3097 	if (((share->iMode&EFileWrite)) || ((share->File().Att()&KEntryAttModified)))
  3114 		{
  3098 		{
  3115 		r=share->CheckMount();
  3099 		r=share->CheckMount();
  3116 		if (r!=KErrNone)
  3100 		if (r!=KErrNone)
  3117 			return(r);
  3101 			return(r);
  3118 
  3102 		OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBFLUSHDATAL2, "this %x", &share->File());
  3119 		TRACE1(UTF::EBorder, UTraceModuleFileSys::ECFileCBFlushDataL, EF32TraceUidFileSys, &share->File());
       
  3120 		TRAP(r,share->File().FlushDataL());
  3103 		TRAP(r,share->File().FlushDataL());
  3121 		TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECFileCBFlushDataLRet, EF32TraceUidFileSys, r);
  3104 		OstTrace1(TRACE_FILESYSTEM, FSYS_ECFILECBFLUSHDATAL2RET, "r %d", r);
  3122 
       
  3123 		if(r!=KErrNone)
  3105 		if(r!=KErrNone)
  3124 			return(r);
  3106 			return(r);
  3125 		}
  3107 		}
  3126 
  3108 
  3127 	RFileClamp clamp;
  3109 	RFileClamp clamp;
  3696 
  3678 
  3697 
  3679 
  3698 
  3680 
  3699 
  3681 
  3700 
  3682 
  3701