2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FIo_FileImpl.h
20 * @brief This is the header file for the %_FileImpl class.
22 * This header file contains the declarations of the %_FileImpl class.
25 #ifndef _FIO_INTERNAL_FILE_IMPL_H_
26 #define _FIO_INTERNAL_FILE_IMPL_H_
28 #include <FBaseObject.h>
29 #include <FBaseInternalTypes.h>
30 #include <FOspConfig.h>
33 namespace Tizen {namespace Base
39 namespace Tizen { namespace Io
49 #define MAX_FILEPATH_APP 18
50 #define MAX_FILEPATH_MEDIA 2
51 #define MAX_FILEPATH_SYSTEM 2
55 * Defines various file path types supported.
61 FILEPATH_TYPE_INVALID, // invalid case
62 FILEPATH_TYPE_APP, // for paths like /home, /Res, /Share etc.
63 FILEPATH_TYPE_MEDIA, // for paths like /Media,/Storagecard/Media, /Media/Images, /Media/xxx etc.
64 FILEPATH_TYPE_SYSTEM // for paths like /SystemRw, /Tmp etc.
69 * Defines various file lock modes supported.
75 FILE_LOCK_MODE_INVALID, // invalid case
76 FILE_LOCK_MODE_BLOCKING, // blocking mode
77 FILE_LOCK_MODE_NON_BLOCKING // non blocking mode
80 class _OSP_EXPORT_ _FileImpl
81 : public Tizen::Base::Object
87 result Construct(const Tizen::Base::String& filePath, const Tizen::Base::String& openMode, bool createParentDirectories, const Tizen::Base::ByteBuffer* pSecretKey);
89 result Construct(const Tizen::Base::String& filePath, const char* pOpenMode, const Tizen::Base::ByteBuffer* pSecretKey);
91 virtual ~_FileImpl(void);
93 result Read(Tizen::Base::ByteBuffer& buffer);
95 int Read(void* buffer, int length);
97 result ReadN(char** buffer, int& length);
99 result Read(Tizen::Base::String& buffer);
101 result Write(const Tizen::Base::ByteBuffer& buffer);
103 result Write(const void* buffer, int length);
105 result Write(const Tizen::Base::String& buffer);
109 int Tell(void) const;
111 result Seek(FileSeekPosition position, long offset);
113 result Truncate(int length);
115 Tizen::Base::String GetName(void) const;
117 FILE* GetFilePointer(void) const;
119 FileLock* LockN(FileLockType lockType);
121 FileLock* LockN(FileLockType lockType, int offset, int length);
123 FileLock* TryToLockN(FileLockType lockType);
125 FileLock* TryToLockN(FileLockType lockType, int offset, int length);
127 static result Remove(const Tizen::Base::String& filePath);
129 static result Move(const Tizen::Base::String& oldFilePath, const Tizen::Base::String& newFilePath);
131 static result Copy(const Tizen::Base::String& srcFilePath, const Tizen::Base::String& destFilePath, bool failIfExist);
133 static result GetAttributes(const Tizen::Base::String& filePath, FileAttributes& attribute);
135 static Tizen::Base::String GetFileName(const Tizen::Base::String& filePath);
137 static Tizen::Base::String GetFileExtension(const Tizen::Base::String& filePath);
139 static bool IsFileExist(const Tizen::Base::String& filePath);
141 static result ConvertToSecureFile(const Tizen::Base::String& plainFilePath, const Tizen::Base::String& secureFilePath, const Tizen::Base::ByteBuffer& key);
143 static bool IsAppPath(const Tizen::Base::String& filePath);
145 static bool IsMediaPath(const Tizen::Base::String& filePath);
147 static bool IsSystemPath(const Tizen::Base::String& filePath);
149 static bool PrepareDataCaging(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId); // for 2.0 app
151 static bool FinalizeDataCaging(const Tizen::Base::String& appRootPath); // for 2.0 app
153 static bool CreateOspApplicationDirectories(const Tizen::Base::String& appRootpath, const Tizen::Base::String& pkgId); // for 2.1 app
155 static int GetAvailableUid(void);
157 static bool VerifyFilePathCompatibility(const Tizen::Base::String& filePath, bool ospCompat);
159 static _FileImpl* GetInstance(File& file);
161 static const _FileImpl* GetInstance(const File& file);
164 * Converts the virtual path to the physical path.
167 * @return An error code
168 * @param[in] virtualPath The path used by applications with API version 2.0
169 * @param[out] physicalPath The physical absolute path
170 * @exception E_SUCCESS The method is successful.
171 * @exception E_INVALID_ARG The specified @c virtualPath is not valid.
173 static result ConvertVirtualToPhysicalPath(const Tizen::Base::String& virtualPath, Tizen::Base::String& physicalPath);
176 * Converts the physical path to the virtual path.
179 * @return An error code
180 * @param[in] physicalPath The physical absolute path
181 * @param[out] virtualPath The path used by applications with API version 2.0
182 * @exception E_SUCCESS The method is successful.
183 * @exception E_INVALID_ARG The specified @c physicalPath is not valid.
185 static result ConvertPhysicalToVirtualPath(const Tizen::Base::String& physicalPath, Tizen::Base::String& virtualPath);
187 bool IsReadable(void) const
192 bool IsWritable(void) const
198 _FileImpl& operator =(const _FileImpl& source);
200 _FileImpl(const _FileImpl& source);
202 bool VerifyFileOpenMode(const char* pOpenMode);
204 FileLock* LockN(FileLockType lockType, _FileLockMode lockMode, int offset, int length);
206 static bool VerifyFilePath(const Tizen::Base::String& filePath, _FilePathType pathType);
208 static bool CreateOspInternalDirectories(const Tizen::Base::String& pkgId);
210 static bool CreateOspExternalDirectories(const Tizen::Base::String& pkgId);
212 static bool CreateSlpDirectories(void);
214 static bool CreateSymbolicLink(void);
216 static bool CleanDirectories(const Tizen::Base::String& appRootPath, const Tizen::Base::String& pkgId);
223 _FileLockImpl* __pFileLockImpl;
226 friend class _FileLockImpl;
232 #endif // _FIO_INTERNAL_FILE_IMPL_H_