diff -r 0fd27995241b -r 9ac0a0a7da70 javacommons/fileutils/src.linux/filesystemutils.cpp --- a/javacommons/fileutils/src.linux/filesystemutils.cpp Tue May 11 16:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,255 +0,0 @@ -/* -* 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: FileSystemUtils - * -*/ - - -#include -#include -#include -#include -#include -#include -#include - -#include "javajniutils.h" -#include "javacommonutils.h" -#include "logger.h" - -#include "fileutilities.h" -#include "linuxfilesystemutils.h" - -using namespace std; -using namespace java::fileutils; -using namespace java::util; - -/* - * Implementation of FileUtilities methods - * - */ -OS_EXPORT long long FileUtilities::availableSize(const std::wstring& aDrive) -{ - JELOG2(EJavaFile); - char* mbDrive = JavaCommonUtils::wstringToUtf8(aDrive); - long retVal = 0; - try - { - retVal = LinuxFileSystemUtils::getAvailableSize(mbDrive); - } - catch (...) - { - // We need not report this error. If there was some problem, return -1 - retVal = -1; - } - delete[] mbDrive; - return retVal; -} - -OS_EXPORT long long FileUtilities::totalSize(const std::wstring& aDrive) -{ - JELOG2(EJavaFile); - char* mbDrive = JavaCommonUtils::wstringToUtf8(aDrive); - long retVal = 0; - try - { - retVal = LinuxFileSystemUtils::getTotalSize(mbDrive); - } - catch (...) - { - // We need not report this error. If there was some problem, return -1 - retVal = -1; - } - delete[] mbDrive; - return retVal; -} - -OS_EXPORT long long FileUtilities::usedSize(const std::wstring& aDrive) -{ - JELOG2(EJavaFile); - char* mbDrive = JavaCommonUtils::wstringToUtf8(aDrive); - long retVal = 0; - try - { - retVal = LinuxFileSystemUtils::getUsedSize(mbDrive); - } - catch (...) - { - // We need not report this error. If there was some problem, return -1 - retVal = -1; - } - delete[] mbDrive; - return retVal; -} - -OS_EXPORT bool FileUtilities::isHidden(const std::wstring& aFile) -{ - JELOG2(EJavaFile); - std::wstring file = aFile; - if (aFile.at(aFile.length()-1) == L'/') - { - file = aFile.substr(0, aFile.length()-1); - } - char* mbDrive = JavaCommonUtils::wstringToUtf8(file); - - bool retVal = LinuxFileSystemUtils::isHidden(mbDrive); - delete[] mbDrive; - return retVal; -} - -OS_EXPORT std::wstring FileUtilities::listRoots() -{ - JELOG2(EJavaFile); - std::string retString = LinuxFileSystemUtils::listRoots(); - std::wstring wcRetString = JavaCommonUtils::utf8ToWstring(retString.c_str()); - return wcRetString; - -} - -OS_EXPORT int FileUtilities::setReadable(const std::wstring& aFile, bool aReadable) -{ - JELOG2(EJavaFile); - int result = 0; - char* utf8Name = JavaCommonUtils::wstringToUtf8(aFile); - - struct stat fileStat; - int error = lstat(utf8Name, &fileStat); - - if (0!=error) - { - return -1; - } - mode_t currentMode = fileStat.st_mode; - - if (aReadable) - { - currentMode = currentMode | S_IRUSR; - } - else - { - currentMode = currentMode & (~S_IRUSR); - } - - result = chmod(utf8Name, currentMode); - - delete[] utf8Name; - return result; -} - -OS_EXPORT int FileUtilities::setWritable(const std::wstring& aFile, bool aWritable) -{ - JELOG2(EJavaFile); - int result = 0; - char* utf8Name = JavaCommonUtils::wstringToUtf8(aFile); - - struct stat fileStat; - int error = lstat(utf8Name, &fileStat); - - if (0!=error) - { - return -1; - } - - mode_t currentMode = fileStat.st_mode; - - if (aWritable) - { - currentMode = currentMode | S_IWUSR; - } - else - { - currentMode = currentMode & (~S_IWUSR); - } - - result = chmod(utf8Name, currentMode); - - delete[] utf8Name; - return result; -} - -OS_EXPORT std::wstring FileUtilities::getDirContents(const std::wstring& dName, - bool aIncludeHidden) -{ - JELOG2(EJavaFile); - std::wstring origDirName = dName; - if (origDirName.at(origDirName.length() - 1) == L'/') - { - int len = origDirName.length(); - std::wstring trimName = origDirName.substr(0, len -1); - origDirName = trimName; - } - - //since there are no unicode variants of openDir and readDir in linux, we will use basic strings - char* multiByteDirName = new char[ origDirName.length()+1 ]; - multiByteDirName = java::util::JavaCommonUtils::wstringToUtf8(origDirName); - std::string dirName(multiByteDirName); - std::string origMbsDirName(multiByteDirName); - std::wstring iFileListWrapper; - - DIR* wDirHandle = opendir(dirName.c_str()); - if (wDirHandle) - { - struct dirent* dir = readdir(wDirHandle); - while (dir) - { - //keep reading directory - dirName = origMbsDirName; - - std::string name(dirName); - name += "/"; - name += std::string(dir->d_name); - - if (!aIncludeHidden) - { - std::wstring wName = java::util::JavaCommonUtils::utf8ToWstring(name.c_str()); - if (isHidden(wName)) - { - // If it is hidden, continue. - dir = readdir(wDirHandle); - continue; - } - } - - LOG1(EJavaFile, EInfo, " FileUtilities::getDirContents(): Trying to Stat :%s: ",name.c_str()); - struct stat buf; - if (stat(name.c_str() , &buf) == 0) - { - iFileListWrapper += java::util::JavaCommonUtils::utf8ToWstring(dir->d_name); - if (S_ISDIR(buf.st_mode)) - { //it is directory - LOG1(EJavaFile, EInfo, " FileUtilities::getDirContents(): Directory: %s",dir->d_name); - iFileListWrapper += std::wstring(L"/*"); - } - else - { - LOG1(EJavaFile, EInfo, " FileUtilities::getDirContents(): File: %s",dir->d_name); - iFileListWrapper += std::wstring(L"*"); - } - } - else - { - WLOG1(EJavaFile, " FileUtilities::getDirContents(): Error in Stat: %d ",errno); - } - dir = readdir(wDirHandle); - } - closedir(wDirHandle); - } - else - { - ELOG1(EJavaFile," FileUtilities::getDirContents(): Error Opening Dir: %d",errno); - } - - delete[] multiByteDirName; - return iFileListWrapper; -}