2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FIo_FileImpl.h
19 * @brief This is the header file for the %_FileImpl class.
21 * This header file contains the declarations of the %_FileImpl class.
24 #ifndef _FIO_INTERNAL_FILE_IMPL_H_
25 #define _FIO_INTERNAL_FILE_IMPL_H_
27 #include <FBaseObject.h>
28 #include <FBaseInternalTypes.h>
29 #include <FOspConfig.h>
32 namespace Tizen {namespace Base
38 namespace Tizen { namespace Io
48 #define MAX_FILEPATH_APP 18
49 #define MAX_FILEPATH_MEDIA 2
50 #define MAX_FILEPATH_SYSTEM 2
54 * Defines various file path types supported.
60 FILEPATH_TYPE_INVALID, // invalid case
61 FILEPATH_TYPE_APP, // for paths like /home, /Res, /Share etc.
62 FILEPATH_TYPE_MEDIA, // for paths like /Media,/Storagecard/Media, /Media/Images, /Media/xxx etc.
63 FILEPATH_TYPE_SYSTEM // for paths like /SystemRw, /Tmp etc.
68 * Defines various file lock modes supported.
74 FILE_LOCK_MODE_INVALID, // invalid case
75 FILE_LOCK_MODE_BLOCKING, // blocking mode
76 FILE_LOCK_MODE_NON_BLOCKING // non blocking mode
79 class _OSP_EXPORT_ _FileImpl
80 : public Tizen::Base::Object
86 result Construct(const Tizen::Base::String& filePath, const Tizen::Base::String& openMode, bool createParentDirectories, const Tizen::Base::ByteBuffer* pSecretKey);
88 result Construct(const Tizen::Base::String& filePath, const char* pOpenMode, const Tizen::Base::ByteBuffer* pSecretKey);
90 virtual ~_FileImpl(void);
92 result Read(Tizen::Base::ByteBuffer& buffer);
94 int Read(void* buffer, int length);
96 result ReadN(char** buffer, int& length);
98 result Read(Tizen::Base::String& buffer);
100 result Write(const Tizen::Base::ByteBuffer& buffer);
102 result Write(const void* buffer, int length);
104 result Write(const Tizen::Base::String& buffer);
108 int Tell(void) const;
110 result Seek(FileSeekPosition position, long offset);
112 result Truncate(int length);
114 Tizen::Base::String GetName(void) const;
116 FILE* GetFilePointer(void) const;
118 FileLock* LockN(FileLockType lockType);
120 FileLock* LockN(FileLockType lockType, int offset, int length);
122 FileLock* TryToLockN(FileLockType lockType);
124 FileLock* TryToLockN(FileLockType lockType, int offset, int length);
126 static result Remove(const Tizen::Base::String& filePath);
128 static result Move(const Tizen::Base::String& oldFilePath, const Tizen::Base::String& newFilePath);
130 static result Copy(const Tizen::Base::String& srcFilePath, const Tizen::Base::String& destFilePath, bool failIfExist);
132 static result GetAttributes(const Tizen::Base::String& filePath, FileAttributes& attribute);
134 static Tizen::Base::String GetFileName(const Tizen::Base::String& filePath);
136 static Tizen::Base::String GetFileExtension(const Tizen::Base::String& filePath);
138 static bool IsFileExist(const Tizen::Base::String& filePath);
140 static result ConvertToSecureFile(const Tizen::Base::String& plainFilePath, const Tizen::Base::String& secureFilePath, const Tizen::Base::ByteBuffer& key);
142 static bool IsAppPath(const Tizen::Base::String& filePath);
144 static bool IsMediaPath(const Tizen::Base::String& filePath);
146 static bool IsSystemPath(const Tizen::Base::String& filePath);
148 static bool PrepareDataCaging(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId); // for OSP compatible app
150 static bool FinalizeDataCaging(const Tizen::Base::String& appRootPath); // for OSP compatible app
152 static bool CreateOspApplicationDirectories(const Tizen::Base::String& appRootpath, const Tizen::Base::String& pkgId); // for Tizen 2.0 app
154 static int GetAvailableUid(void);
156 static bool VerifyFilePathCompatibility(const Tizen::Base::String& filePath, bool ospCompat);
158 static _FileImpl* GetInstance(File& file);
160 static const _FileImpl* GetInstance(const File& file);
163 * Converts the virtual path to the physical path.
166 * @return An error code
167 * @param[in] virtualPath The path used by applications with API version 2.0
168 * @param[out] physicalPath The physical absolute path
169 * @exception E_SUCCESS The method is successful.
170 * @exception E_INVALID_ARG The specified @c virtualPath is not valid.
172 static result ConvertVirtualToPhysicalPath(const Tizen::Base::String& virtualPath, Tizen::Base::String& physicalPath);
175 * Converts the physical path to the virtual path.
178 * @return An error code
179 * @param[in] physicalPath The physical absolute path
180 * @param[out] virtualPath The path used by applications with API version 2.0
181 * @exception E_SUCCESS The method is successful.
182 * @exception E_INVALID_ARG The specified @c physicalPath is not valid.
184 static result ConvertPhysicalToVirtualPath(const Tizen::Base::String& physicalPath, Tizen::Base::String& virtualPath);
186 bool IsReadable(void) const
191 bool IsWritable(void) const
197 _FileImpl& operator =(const _FileImpl& source);
199 _FileImpl(const _FileImpl& source);
201 bool VerifyFileOpenMode(const char* pOpenMode);
203 FileLock* LockN(FileLockType lockType, _FileLockMode lockMode, int offset, int length);
205 static bool VerifyFilePath(const Tizen::Base::String& filePath, _FilePathType pathType);
207 static bool CreateOspInternalDirectories(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId);
209 static bool CreateOspExternalDirectories(const Tizen::Base::String& pkgId);
211 static bool CreateSlpDirectories(void);
213 static bool CreateSymbolicLink(void);
215 static bool CleanDirectories(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId);
222 _FileLockImpl* __pFileLockImpl;
225 friend class _FileLockImpl;
231 #endif // _FIO_INTERNAL_FILE_IMPL_H_