Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / base / files / file.h
index a8cb16c..f1a8377 100644 (file)
 #include <windows.h>
 #endif
 
-#include <string>
+#if defined(OS_POSIX)
+#include <sys/stat.h>
+#endif
 
 #include "base/base_export.h"
 #include "base/basictypes.h"
-#include "base/files/file_path.h"
+#include "base/files/scoped_file.h"
 #include "base/move.h"
 #include "base/time/time.h"
 
 
 namespace base {
 
+class FilePath;
+
 #if defined(OS_WIN)
 typedef HANDLE PlatformFile;
 #elif defined(OS_POSIX)
 typedef int PlatformFile;
-#endif
 
+#if defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL)
+typedef struct stat stat_wrapper_t;
+#else
+typedef struct stat64 stat_wrapper_t;
+#endif
+#endif  // defined(OS_POSIX)
 
 // Thin wrapper around an OS-level file.
 // Note that this class does not provide any support for asynchronous IO, other
@@ -120,6 +129,10 @@ class BASE_EXPORT File {
   struct BASE_EXPORT Info {
     Info();
     ~Info();
+#if defined(OS_POSIX)
+    // Fills this struct with values from |stat_info|.
+    void FromStat(const stat_wrapper_t& stat_info);
+#endif
 
     // The size of the file in bytes.  Undefined when is_directory is true.
     int64 size;
@@ -149,6 +162,9 @@ class BASE_EXPORT File {
   // Takes ownership of |platform_file|.
   explicit File(PlatformFile platform_file);
 
+  // Creates an object with a specific error_details code.
+  explicit File(Error error_details);
+
   // Move constructor for C++03 move emulation of this type.
   File(RValue other);
 
@@ -171,10 +187,14 @@ class BASE_EXPORT File {
   // FLAG_CREATE_ALWAYS), and false otherwise.
   bool created() const { return created_; }
 
-  // Returns the OS result of opening this file.
+  // Returns the OS result of opening this file. Note that the way to verify
+  // the success of the operation is to use IsValid(), not this method:
+  //   File file(name, flags);
+  //   if (!file.IsValid())
+  //     return;
   Error error_details() const { return error_details_; }
 
-  PlatformFile GetPlatformFile() const { return file_; }
+  PlatformFile GetPlatformFile() const;
   PlatformFile TakePlatformFile();
 
   // Destroying this object closes the file automatically.
@@ -261,6 +281,8 @@ class BASE_EXPORT File {
   // Unlock a file previously locked.
   Error Unlock();
 
+  bool async() const { return async_; }
+
 #if defined(OS_WIN)
   static Error OSErrorToFileError(DWORD last_error);
 #elif defined(OS_POSIX)
@@ -273,7 +295,7 @@ class BASE_EXPORT File {
 #if defined(OS_WIN)
   win::ScopedHandle file_;
 #elif defined(OS_POSIX)
-  PlatformFile file_;
+  ScopedFD file_;
 #endif
 
   Error error_details_;