--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/fileutils/src.s60/s60filesystemutilities.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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: S60FileSystemUtilities
+ *
+*/
+
+
+#include <f32file.h>
+#include "logger.h"
+#include "jstringutils.h"
+#include "s60filesystemutilities.h"
+#include "fileutilities.h"
+
+using namespace java::fileutils;
+
+/*
+ * Implementation of S60FileSystemUtilities.h
+ *
+ */
+using namespace std;
+
+void S60FileSystemUtilities::GetAvailableSizeL(TInt64& aRetSize,
+ TChar& aDriveChar)
+{
+ JELOG2(EJavaFile);
+ //Note: Uri type check is not needed here.
+ TVolumeInfo volumeInfo;
+ RFs iRFs;
+ User::LeaveIfError(iRFs.Connect());
+ TInt drive = EDriveC;
+ RFs::CharToDrive(aDriveChar, drive);
+
+ // If it is not a valid root, return immediately
+ int error = 0;
+ if (RFs::IsValidDrive(drive))
+ {
+ error = iRFs.Volume(volumeInfo, drive);
+ }
+ else
+ {
+ iRFs.Close();
+ User::Leave(KErrArgument);
+ }
+
+ if (KErrNone != error)
+ {
+ iRFs.Close();
+ User::Leave(error);
+ }
+
+ aRetSize = volumeInfo.iFree;
+ iRFs.Close();
+}
+
+/**
+ *
+ */
+void S60FileSystemUtilities::GetUsedSizeL(TInt64& aRetSize, TChar& aDriveChar)
+{
+ JELOG2(EJavaFile);
+ //Note: Uri type check is not needed here.
+ TVolumeInfo volumeInfo;
+ RFs iRFs;
+ User::LeaveIfError(iRFs.Connect());
+ TInt drive = EDriveC;
+ RFs::CharToDrive(aDriveChar, drive);
+
+ // If it is not a valid root, return immediately
+ int error = 0;
+ if (RFs::IsValidDrive(drive))
+ {
+ error = iRFs.Volume(volumeInfo, drive);
+ }
+ else
+ {
+ iRFs.Close();
+ User::Leave(KErrArgument);
+ }
+
+ if (KErrNone != error)
+ {
+ iRFs.Close();
+ User::Leave(error);
+ }
+
+ aRetSize = volumeInfo.iSize - volumeInfo.iFree;
+ iRFs.Close();
+}
+
+void S60FileSystemUtilities::IsHiddenL(TBool& aIsHidden, const TDesC &aFile)
+{
+ JELOG2(EJavaFile);
+ RFs iRFs;
+ User::LeaveIfError(iRFs.Connect());
+ TEntry entry;
+
+ TInt length = aFile.Length();
+
+ HBufC* fileUrl = HBufC::NewL(length);
+ *fileUrl = aFile;
+
+ TPtr uriBufPtr(fileUrl->Des());
+ ReplaceCharacters(uriBufPtr, '/', '\\');
+
+ User::LeaveIfError(iRFs.Entry(uriBufPtr, entry));
+ aIsHidden = entry.IsHidden();
+ iRFs.Close();
+
+ delete fileUrl; //allocated on heap, so deleting it
+}
+
+void S60FileSystemUtilities::GetTotalSizeL(TInt64& aRetSize, TChar& aDriveChar)
+{
+ JELOG2(EJavaFile);
+ //Note: Uri type check is not needed here.
+ TVolumeInfo volumeInfo;
+ RFs iRFs;
+ User::LeaveIfError(iRFs.Connect());
+ TInt drive = EDriveC;
+ RFs::CharToDrive(aDriveChar, drive);
+
+ // If it is not a valid root, return immediately
+ int error = 0;
+ if (RFs::IsValidDrive(drive))
+ {
+ error = iRFs.Volume(volumeInfo, drive);
+ }
+ else
+ {
+ iRFs.Close();
+ User::Leave(KErrArgument);
+ }
+
+ if (KErrNone != error)
+ {
+ iRFs.Close();
+ User::Leave(error);
+ }
+ aRetSize = volumeInfo.iSize;
+ iRFs.Close();
+}
+
+EXPORT_C void S60FileSystemUtilities::SetHiddenL(TDesC& aFile, TBool aHide)
+{
+ JELOG2(EJavaFile);
+ //Might need to close the file before attempting to change att.
+ //need to verify it
+ RFs iRFs;
+ TInt err = KErrNone;
+ User::LeaveIfError(iRFs.Connect());
+
+ HBufC* fileUrl = HBufC::NewL(aFile.Length());
+ *fileUrl = aFile;
+
+ TPtr uriBufPtr(fileUrl->Des());
+ ReplaceCharacters(uriBufPtr, '/', '\\');
+
+ if (aHide)
+ err = iRFs.SetAtt(uriBufPtr, KEntryAttHidden, 0);
+ else
+ err = iRFs.SetAtt(uriBufPtr, 0, KEntryAttHidden);
+
+ iRFs.Close();
+ delete fileUrl;
+ User::LeaveIfError(err);
+}
+
+void S60FileSystemUtilities::ReplaceCharacters(TPtr& aPtr,
+ TUint8 aReplacedChar, TUint8 aNewChar)
+{
+ ReplaceCharacters(aPtr, aReplacedChar, aNewChar, EFalse);
+}
+
+/**
+ *
+ */
+void S60FileSystemUtilities::ReplaceCharacters(TPtr& aPtr,
+ TUint8 aReplacedChar, TUint8 aNewChar, TBool aOnlyFirstMatch)
+{
+ for (TInt i = 0; i < aPtr.Length(); ++i)
+ {
+ if (aReplacedChar == aPtr[i])
+ {
+ aPtr[i] = aNewChar;
+ if (aOnlyFirstMatch)
+ return;
+ }
+ }
+}
+
+TDesC16& S60FileSystemUtilities::GetSupportedDrives()
+{
+ JELOG2(EJavaFile);
+ //TBuf16<80> driveString;
+ HBufC* driveString = HBufC::NewMax(80);
+ TDriveList driveList;
+ TInt driveNumber = EDriveA;
+ TChar driveChar;
+ TChar colon = ':';
+ TChar separator = '*';
+
+ RFs session;
+ int error = session.Connect();
+ if (KErrNone == error)
+ {
+ error = session.DriveList(driveList);
+ if (KErrNone == error)
+ {
+ for (; driveNumber <= EDriveZ; driveNumber++)
+ {
+ if (driveList[driveNumber])
+ {
+ session.DriveToChar(driveNumber, driveChar);
+ (driveString->Des()).Append(driveChar);
+ (driveString->Des()).Append(colon);
+ (driveString->Des()).Append(separator);
+ }
+ }
+ }
+ }
+ session.Close();
+ return *driveString;
+}