• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/files/file.h"
6 
7 // TODO(rvargas): remove this (needed for kInvalidPlatformFileValue).
8 #include "base/platform_file.h"
9 
10 namespace base {
11 
Info()12 File::Info::Info()
13     : size(0),
14       is_directory(false),
15       is_symbolic_link(false) {
16 }
17 
~Info()18 File::Info::~Info() {
19 }
20 
File()21 File::File()
22     : file_(kInvalidPlatformFileValue),
23       error_details_(FILE_ERROR_FAILED),
24       created_(false),
25       async_(false) {
26 }
27 
28 #if !defined(OS_NACL)
File(const FilePath & name,uint32 flags)29 File::File(const FilePath& name, uint32 flags)
30     : file_(kInvalidPlatformFileValue),
31       error_details_(FILE_OK),
32       created_(false),
33       async_(false) {
34   Initialize(name, flags);
35 }
36 #endif
37 
File(PlatformFile platform_file)38 File::File(PlatformFile platform_file)
39     : file_(platform_file),
40       error_details_(FILE_OK),
41       created_(false),
42       async_(false) {
43 #if defined(OS_POSIX)
44   DCHECK_GE(platform_file, -1);
45 #endif
46 }
47 
File(Error error_details)48 File::File(Error error_details)
49     : file_(kInvalidPlatformFileValue),
50       error_details_(error_details),
51       created_(false),
52       async_(false) {
53 }
54 
File(RValue other)55 File::File(RValue other)
56     : file_(other.object->TakePlatformFile()),
57       error_details_(other.object->error_details()),
58       created_(other.object->created()),
59       async_(other.object->async_) {
60 }
61 
~File()62 File::~File() {
63   // Go through the AssertIOAllowed logic.
64   Close();
65 }
66 
operator =(RValue other)67 File& File::operator=(RValue other) {
68   if (this != other.object) {
69     Close();
70     SetPlatformFile(other.object->TakePlatformFile());
71     error_details_ = other.object->error_details();
72     created_ = other.object->created();
73     async_ = other.object->async_;
74   }
75   return *this;
76 }
77 
78 #if !defined(OS_NACL)
Initialize(const FilePath & name,uint32 flags)79 void File::Initialize(const FilePath& name, uint32 flags) {
80   if (name.ReferencesParent()) {
81     error_details_ = FILE_ERROR_ACCESS_DENIED;
82     return;
83   }
84   InitializeUnsafe(name, flags);
85 }
86 #endif
87 
ErrorToString(Error error)88 std::string File::ErrorToString(Error error) {
89   switch (error) {
90     case FILE_OK:
91       return "FILE_OK";
92     case FILE_ERROR_FAILED:
93       return "FILE_ERROR_FAILED";
94     case FILE_ERROR_IN_USE:
95       return "FILE_ERROR_IN_USE";
96     case FILE_ERROR_EXISTS:
97       return "FILE_ERROR_EXISTS";
98     case FILE_ERROR_NOT_FOUND:
99       return "FILE_ERROR_NOT_FOUND";
100     case FILE_ERROR_ACCESS_DENIED:
101       return "FILE_ERROR_ACCESS_DENIED";
102     case FILE_ERROR_TOO_MANY_OPENED:
103       return "FILE_ERROR_TOO_MANY_OPENED";
104     case FILE_ERROR_NO_MEMORY:
105       return "FILE_ERROR_NO_MEMORY";
106     case FILE_ERROR_NO_SPACE:
107       return "FILE_ERROR_NO_SPACE";
108     case FILE_ERROR_NOT_A_DIRECTORY:
109       return "FILE_ERROR_NOT_A_DIRECTORY";
110     case FILE_ERROR_INVALID_OPERATION:
111       return "FILE_ERROR_INVALID_OPERATION";
112     case FILE_ERROR_SECURITY:
113       return "FILE_ERROR_SECURITY";
114     case FILE_ERROR_ABORT:
115       return "FILE_ERROR_ABORT";
116     case FILE_ERROR_NOT_A_FILE:
117       return "FILE_ERROR_NOT_A_FILE";
118     case FILE_ERROR_NOT_EMPTY:
119       return "FILE_ERROR_NOT_EMPTY";
120     case FILE_ERROR_INVALID_URL:
121       return "FILE_ERROR_INVALID_URL";
122     case FILE_ERROR_IO:
123       return "FILE_ERROR_IO";
124     case FILE_ERROR_MAX:
125       break;
126   }
127 
128   NOTREACHED();
129   return "";
130 }
131 
132 }  // namespace base
133