diff -r 3673b591050c -r ef55b168cedb mtpdataproviders/mtpimagedp/src/cmtpimagedpsendobjectinfo.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedpsendobjectinfo.cpp Wed Apr 14 16:49:36 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedpsendobjectinfo.cpp Tue Apr 27 17:30:23 2010 +0300 @@ -20,9 +20,9 @@ #include #include +#include #include - #include #include #include @@ -322,7 +322,11 @@ { iStorageId = iFramework.StorageMgr().DefaultStorageId(); } - + + if(IsTooLarge(iObjectSize)) + { + *ret = EMTPRespCodeObjectTooLarge; + } } __FLOG(_L8("CMTPImageDpSendObjectInfo::CheckObjectPropListParamsL - Exit")); @@ -608,6 +612,11 @@ if (result) { iObjectSize = iObjectInfo->Uint32L(CMTPTypeObjectInfo::EObjectCompressedSize); + if(IsTooLarge(iObjectSize)) + { + SendResponseL(EMTPRespCodeObjectTooLarge); + result = EFalse; + } } if (result) @@ -1277,3 +1286,40 @@ return resp; } + +/** +Check if the object is too large +@return ETrue if yes, otherwise EFalse +*/ +TBool CMTPImageDpSendObjectInfo::IsTooLarge(TUint64 aObjectSize) const + { + __FLOG(_L8("IsTooLarge - Entry")); + TBool ret(aObjectSize > KMaxTInt64); + + if(!ret) + { + TBuf<255> fsname; + TUint32 storageId = iStorageId; + if (storageId == KMTPStorageDefault) + { + storageId = iFramework.StorageMgr().DefaultStorageId(); + } + TInt drive( iFramework.StorageMgr().DriveNumber(storageId) ); + if(drive != KErrNotFound) + { + iFramework.Fs().FileSystemSubType(drive, fsname); + + const TUint64 KMaxFatFileSize = 0xFFFFFFFF; //Maximal file size supported by all FAT filesystems (4GB-1) + _LIT(KFsFAT16, "FAT16"); + _LIT(KFsFAT32, "FAT32"); + + if((fsname.CompareF(KFsFAT16) == 0 || fsname.CompareF(KFsFAT32) == 0) && aObjectSize > KMaxFatFileSize) + { + ret = ETrue; + } + } + } + __FLOG_VA((_L8("Result = %d"), ret)); + __FLOG(_L8("IsTooLarge - Exit")); + return ret; + }