diff -r 000000000000 -r 96e5fb8b040d userlibandfileserver/fileserver/sfsrv/cl_fmt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userlibandfileserver/fileserver/sfsrv/cl_fmt.cpp Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,195 @@ +// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32\sfsrv\cl_fmt.cpp +// +// + +#include "cl_std.h" + + + + +EXPORT_C TInt RFormat::Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount) +/** +Opens a device for formatting. + +The device may be formatted either at high or low density. + +Devices which support read-only media may not be formatted. This includes +the ROM on drive Z:. All files on the drive must be closed otherwise +an error is returned. + +@param aFs The file server session. Must be connected. +@param aName The drive to be formatted, specified as a drive letter + followed by a colon. +@param aFormatMode The format mode. See TFormatMode. +@param aCount On successful return, contains the number of tracks which + remain to be formatted. This value is passed to the first + iteration of Next(), which then decrements the value on + this and subsequent calls to Next(). + +@return KErrNone, if successful, otherwise one of the other system wide error + codes. + +@see TFormatMode + +@capability DiskAdmin + +*/ + { + TRACEMULT3(UTF::EBorder, UTraceModuleEfsrv::EFormat1Open, MODULEUID, aFs.Handle(), aName, aFormatMode); + + TPtr8 c((TUint8*)&aCount,sizeof(TUint),sizeof(TUint)); + TInt r = CreateSubSession(aFs,EFsFormatOpen,TIpcArgs(&aName,aFormatMode,&c)); + + TRACERET3(UTF::EBorder, UTraceModuleEfsrv::EFormatOpen1Return, MODULEUID, r, SubSessionHandle(), aCount); + return r; + } + + +EXPORT_C TInt RFormat::Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount,const TDesC8& aInfo) +/** +Opens a device for formatting. User can specify new format parameters by anInfo. + +The device may be formatted either at high or low density. + +Devices which support read-only media may not be formatted. This includes +the ROM on drive Z:. All files on the drive must be closed otherwise +an error is returned. + +@param aFs The file server session. Must be connected. +@param aName The drive to be formatted, specified as a drive letter + followed by a colon. +@param aFormatMode The format mode. See TFormatMode. +@param aCount On successful return, contains the number of tracks which + remain to be formatted. This value is passed to the first + iteration of Next(), which then decrements the value on + this and subsequent calls to Next(). +@param anInfo Special format information specified by user. + +@return KErrNone, if successful, otherwise one of the other system wide error + codes. + +@see TFormatMode + +@capability DiskAdmin +*/ + { + TRACEMULT4(UTF::EBorder, UTraceModuleEfsrv::EFormat2Open, MODULEUID, aFs.Handle(), aName, aFormatMode, TUint(&aInfo)); + + TInt size = sizeof(TUint)+aInfo.Length(); + TUint8* buf = new TUint8[size]; + + TInt r; + if (!buf) + { + r = KErrNoMemory; + } + else + { + TPtr8 c(buf, size); + c.Append((TUint8*)&aCount, sizeof(TUint)); + c.Append(aInfo); + r = CreateSubSession(aFs,EFsFormatOpen,TIpcArgs(&aName,aFormatMode,&c)); + aCount = *(TInt*)(&c[0]); + delete[] buf; + } + + TRACERET3(UTF::EBorder, UTraceModuleEfsrv::EFormatOpen2Return, MODULEUID, r, SubSessionHandle(), aCount); + return r; + } + + + +EXPORT_C void RFormat::Close() +/** +Closes the Format subsession. + +Any open files are closed when the file server session is closed. + +Close() is guaranteed to return, and provides no indication whether +it completed successfully or not. +*/ + { + TRACE2(UTF::EBorder, UTraceModuleEfsrv::EFormatClose, MODULEUID, Session().Handle(), SubSessionHandle()); + + CloseSubSession(EFsFormatSubClose); + + TRACE0(UTF::EBorder, UTraceModuleEfsrv::EFormatCloseReturn, MODULEUID); + } + + + +EXPORT_C TInt RFormat::Next(TInt& aStep) +/** +Executes the next format step. + +This is a synchronous function, which returns when the formatting step +is complete. + +@param aStep The step number. On return, it is decremented to indicate what + stage the formatting has reached. Before the first call to this + function, this value is seeded with the number of tracks remaining + to be formatted as returned by RFormat::Open(). + The function should be called repeatedly until aStep reaches zero. + +@return KErrNone, if successful, otherwise one of the other system wide error codes. + +@see RFormat::Open + +@capability DiskAdmin + +*/ + { + TRACE2(UTF::EBorder, UTraceModuleEfsrv::EFormatNext1, MODULEUID, Session().Handle(), SubSessionHandle()); + + TPckg e(aStep); + TInt r = SendReceive(EFsFormatNext,TIpcArgs(&e)); + + TRACERET2(UTF::EBorder, UTraceModuleEfsrv::EFormatNext1Return, MODULEUID, r, aStep); + return r; + } + + + + +EXPORT_C void RFormat::Next(TPckgBuf& aStep,TRequestStatus& aStatus) +/** +Executes the next format step. + +This is an asynchronous function. + +@param aStep The step number. On return, it is decremented to indicate what + stage the formatting has reached. Before the first call to this + function, this value is seeded with the number of tracks remaining + to be formatted as returned by RFormat::Open(). + The function should be called repeatedly until aStep reaches zero. + +@param aStatus The request status. On request completion, contains a completion + code: + KErrNone, if successful, otherwise one of the other system-wide + error codes. + +@see RFormat::Open + +@capability DiskAdmin + +*/ + { + TRACE3(UTF::EBorder, UTraceModuleEfsrv::EFormatNext2, MODULEUID, Session().Handle(), SubSessionHandle(), &aStatus); + + SendReceive(EFsFormatNext,TIpcArgs(&aStep),aStatus); + + TRACE0(UTF::EBorder, UTraceModuleEfsrv::EFormatNext2Return, MODULEUID); + }