| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BIN_DIRECTORY_H_ | 5 #ifndef BIN_DIRECTORY_H_ |
| 6 #define BIN_DIRECTORY_H_ | 6 #define BIN_DIRECTORY_H_ |
| 7 | 7 |
| 8 #include "bin/builtin.h" | 8 #include "bin/builtin.h" |
| 9 #include "bin/dartutils.h" | 9 #include "bin/dartutils.h" |
| 10 #include "bin/thread.h" | 10 #include "bin/thread.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 ~PathBuffer() { | 28 ~PathBuffer() { |
| 29 free(data_); | 29 free(data_); |
| 30 } | 30 } |
| 31 | 31 |
| 32 bool Add(const char* name); | 32 bool Add(const char* name); |
| 33 bool AddW(const wchar_t* name); | 33 bool AddW(const wchar_t* name); |
| 34 | 34 |
| 35 char* AsString() const; | 35 char* AsString() const; |
| 36 wchar_t* AsStringW() const; | 36 wchar_t* AsStringW() const; |
| 37 | 37 |
| 38 void Reset(int new_length); | 38 // Makes a scope allocated copy of the string. |
| 39 const char* AsScopedString() const; |
| 39 | 40 |
| 40 int length() const { | 41 void Reset(intptr_t new_length); |
| 42 |
| 43 intptr_t length() const { |
| 41 return length_; | 44 return length_; |
| 42 } | 45 } |
| 43 | 46 |
| 44 private: | 47 private: |
| 45 void* data_; | 48 void* data_; |
| 46 int length_; | 49 intptr_t length_; |
| 47 | 50 |
| 48 DISALLOW_COPY_AND_ASSIGN(PathBuffer); | 51 DISALLOW_COPY_AND_ASSIGN(PathBuffer); |
| 49 }; | 52 }; |
| 50 | 53 |
| 51 class DirectoryListing; | 54 class DirectoryListing; |
| 52 | 55 |
| 53 struct LinkList; | 56 struct LinkList; |
| 54 | 57 |
| 55 // DirectoryListingEntry is used as a stack item, when performing recursive | 58 // DirectoryListingEntry is used as a stack item, when performing recursive |
| 56 // directory listing. By using DirectoryListingEntry as stack elements, a | 59 // directory listing. By using DirectoryListingEntry as stack elements, a |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 } | 108 } |
| 106 Push(new DirectoryListingEntry(NULL)); | 109 Push(new DirectoryListingEntry(NULL)); |
| 107 } | 110 } |
| 108 | 111 |
| 109 virtual ~DirectoryListing() { | 112 virtual ~DirectoryListing() { |
| 110 while (!IsEmpty()) { | 113 while (!IsEmpty()) { |
| 111 Pop(); | 114 Pop(); |
| 112 } | 115 } |
| 113 } | 116 } |
| 114 | 117 |
| 115 virtual bool HandleDirectory(char* dir_name) = 0; | 118 virtual bool HandleDirectory(const char* dir_name) = 0; |
| 116 virtual bool HandleFile(char* file_name) = 0; | 119 virtual bool HandleFile(const char* file_name) = 0; |
| 117 virtual bool HandleLink(char* link_name) = 0; | 120 virtual bool HandleLink(const char* link_name) = 0; |
| 118 virtual bool HandleError(const char* dir_name) = 0; | 121 virtual bool HandleError() = 0; |
| 119 virtual void HandleDone() {} | 122 virtual void HandleDone() {} |
| 120 | 123 |
| 121 void Push(DirectoryListingEntry* directory) { | 124 void Push(DirectoryListingEntry* directory) { |
| 122 top_ = directory; | 125 top_ = directory; |
| 123 } | 126 } |
| 124 | 127 |
| 125 void Pop() { | 128 void Pop() { |
| 126 ASSERT(!IsEmpty()); | 129 ASSERT(!IsEmpty()); |
| 127 DirectoryListingEntry* current = top_; | 130 DirectoryListingEntry* current = top_; |
| 128 top_ = top_->parent(); | 131 top_ = top_->parent(); |
| 129 delete current; | 132 delete current; |
| 130 } | 133 } |
| 131 | 134 |
| 132 bool IsEmpty() const { | 135 bool IsEmpty() const { |
| 133 return top_ == NULL; | 136 return top_ == NULL; |
| 134 } | 137 } |
| 135 | 138 |
| 136 DirectoryListingEntry* top() const { | 139 DirectoryListingEntry* top() const { |
| 137 return top_; | 140 return top_; |
| 138 } | 141 } |
| 139 | 142 |
| 140 bool recursive() const { | 143 bool recursive() const { |
| 141 return recursive_; | 144 return recursive_; |
| 142 } | 145 } |
| 143 | 146 |
| 144 bool follow_links() const { | 147 bool follow_links() const { |
| 145 return follow_links_; | 148 return follow_links_; |
| 146 } | 149 } |
| 147 | 150 |
| 148 char* CurrentPath() { | 151 const char* CurrentPath() { |
| 149 return path_buffer_.AsString(); | 152 return path_buffer_.AsScopedString(); |
| 150 } | 153 } |
| 151 | 154 |
| 152 PathBuffer& path_buffer() { | 155 PathBuffer& path_buffer() { |
| 153 return path_buffer_; | 156 return path_buffer_; |
| 154 } | 157 } |
| 155 | 158 |
| 156 bool error() const { | 159 bool error() const { |
| 157 return error_; | 160 return error_; |
| 158 } | 161 } |
| 159 | 162 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 175 kListError = 3, | 178 kListError = 3, |
| 176 kListDone = 4 | 179 kListDone = 4 |
| 177 }; | 180 }; |
| 178 | 181 |
| 179 AsyncDirectoryListing(const char* dir_name, | 182 AsyncDirectoryListing(const char* dir_name, |
| 180 bool recursive, | 183 bool recursive, |
| 181 bool follow_links) | 184 bool follow_links) |
| 182 : DirectoryListing(dir_name, recursive, follow_links) {} | 185 : DirectoryListing(dir_name, recursive, follow_links) {} |
| 183 | 186 |
| 184 virtual ~AsyncDirectoryListing() {} | 187 virtual ~AsyncDirectoryListing() {} |
| 185 virtual bool HandleDirectory(char* dir_name); | 188 virtual bool HandleDirectory(const char* dir_name); |
| 186 virtual bool HandleFile(char* file_name); | 189 virtual bool HandleFile(const char* file_name); |
| 187 virtual bool HandleLink(char* file_name); | 190 virtual bool HandleLink(const char* file_name); |
| 188 virtual bool HandleError(const char* dir_name); | 191 virtual bool HandleError(); |
| 189 virtual void HandleDone(); | 192 virtual void HandleDone(); |
| 190 | 193 |
| 191 void SetArray(CObjectArray* array, intptr_t length) { | 194 void SetArray(CObjectArray* array, intptr_t length) { |
| 192 ASSERT(length % 2 == 0); | 195 ASSERT(length % 2 == 0); |
| 193 array_ = array; | 196 array_ = array; |
| 194 index_ = 0; | 197 index_ = 0; |
| 195 length_ = length; | 198 length_ = length; |
| 196 } | 199 } |
| 197 | 200 |
| 198 intptr_t index() const { | 201 intptr_t index() const { |
| 199 return index_; | 202 return index_; |
| 200 } | 203 } |
| 201 | 204 |
| 202 private: | 205 private: |
| 203 bool AddFileSystemEntityToResponse(Response response, char* arg); | 206 bool AddFileSystemEntityToResponse(Response response, const char* arg); |
| 204 CObjectArray* array_; | 207 CObjectArray* array_; |
| 205 intptr_t index_; | 208 intptr_t index_; |
| 206 intptr_t length_; | 209 intptr_t length_; |
| 207 | 210 |
| 208 DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncDirectoryListing); | 211 DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncDirectoryListing); |
| 209 }; | 212 }; |
| 210 | 213 |
| 211 | 214 |
| 212 class SyncDirectoryListing: public DirectoryListing { | 215 class SyncDirectoryListing: public DirectoryListing { |
| 213 public: | 216 public: |
| 214 SyncDirectoryListing(Dart_Handle results, | 217 SyncDirectoryListing(Dart_Handle results, |
| 215 const char* dir_name, | 218 const char* dir_name, |
| 216 bool recursive, | 219 bool recursive, |
| 217 bool follow_links) | 220 bool follow_links) |
| 218 : DirectoryListing(dir_name, recursive, follow_links), | 221 : DirectoryListing(dir_name, recursive, follow_links), |
| 219 results_(results) { | 222 results_(results) { |
| 220 add_string_ = DartUtils::NewString("add"); | 223 add_string_ = DartUtils::NewString("add"); |
| 221 directory_type_ = | 224 directory_type_ = |
| 222 DartUtils::GetDartType(DartUtils::kIOLibURL, "Directory"); | 225 DartUtils::GetDartType(DartUtils::kIOLibURL, "Directory"); |
| 223 file_type_ = | 226 file_type_ = |
| 224 DartUtils::GetDartType(DartUtils::kIOLibURL, "File"); | 227 DartUtils::GetDartType(DartUtils::kIOLibURL, "File"); |
| 225 link_type_ = | 228 link_type_ = |
| 226 DartUtils::GetDartType(DartUtils::kIOLibURL, "Link"); | 229 DartUtils::GetDartType(DartUtils::kIOLibURL, "Link"); |
| 227 } | 230 } |
| 228 virtual ~SyncDirectoryListing() {} | 231 virtual ~SyncDirectoryListing() {} |
| 229 virtual bool HandleDirectory(char* dir_name); | 232 virtual bool HandleDirectory(const char* dir_name); |
| 230 virtual bool HandleFile(char* file_name); | 233 virtual bool HandleFile(const char* file_name); |
| 231 virtual bool HandleLink(char* file_name); | 234 virtual bool HandleLink(const char* file_name); |
| 232 virtual bool HandleError(const char* dir_name); | 235 virtual bool HandleError(); |
| 233 | 236 |
| 234 private: | 237 private: |
| 235 Dart_Handle results_; | 238 Dart_Handle results_; |
| 236 Dart_Handle add_string_; | 239 Dart_Handle add_string_; |
| 237 Dart_Handle directory_type_; | 240 Dart_Handle directory_type_; |
| 238 Dart_Handle file_type_; | 241 Dart_Handle file_type_; |
| 239 Dart_Handle link_type_; | 242 Dart_Handle link_type_; |
| 240 | 243 |
| 241 DISALLOW_IMPLICIT_CONSTRUCTORS(SyncDirectoryListing); | 244 DISALLOW_IMPLICIT_CONSTRUCTORS(SyncDirectoryListing); |
| 242 }; | 245 }; |
| 243 | 246 |
| 244 | 247 |
| 245 class Directory { | 248 class Directory { |
| 246 public: | 249 public: |
| 247 enum ExistsResult { | 250 enum ExistsResult { |
| 248 UNKNOWN, | 251 UNKNOWN, |
| 249 EXISTS, | 252 EXISTS, |
| 250 DOES_NOT_EXIST | 253 DOES_NOT_EXIST |
| 251 }; | 254 }; |
| 252 | 255 |
| 253 static void List(DirectoryListing* listing); | 256 static void List(DirectoryListing* listing); |
| 254 static ExistsResult Exists(const char* path); | 257 static ExistsResult Exists(const char* path); |
| 255 static char* Current(); | 258 |
| 259 // Returns the current working directory. The caller must call |
| 260 // free() on the result. |
| 261 static char* CurrentNoScope(); |
| 262 |
| 263 // Returns the current working directory. The returned string is allocated |
| 264 // with Dart_ScopeAllocate(). It lasts only as long as the current API scope. |
| 265 static const char* Current(); |
| 266 static const char* SystemTemp(); |
| 267 static const char* CreateTemp(const char* path); |
| 256 static bool SetCurrent(const char* path); | 268 static bool SetCurrent(const char* path); |
| 257 static bool Create(const char* path); | 269 static bool Create(const char* path); |
| 258 static char* SystemTemp(); | |
| 259 static char* CreateTemp(const char* path); | |
| 260 static bool Delete(const char* path, bool recursive); | 270 static bool Delete(const char* path, bool recursive); |
| 261 static bool Rename(const char* path, const char* new_path); | 271 static bool Rename(const char* path, const char* new_path); |
| 262 | 272 |
| 263 static CObject* CreateRequest(const CObjectArray& request); | 273 static CObject* CreateRequest(const CObjectArray& request); |
| 264 static CObject* DeleteRequest(const CObjectArray& request); | 274 static CObject* DeleteRequest(const CObjectArray& request); |
| 265 static CObject* ExistsRequest(const CObjectArray& request); | 275 static CObject* ExistsRequest(const CObjectArray& request); |
| 266 static CObject* CreateTempRequest(const CObjectArray& request); | 276 static CObject* CreateTempRequest(const CObjectArray& request); |
| 267 static CObject* CreateSystemTempRequest(const CObjectArray& request); | 277 static CObject* CreateSystemTempRequest(const CObjectArray& request); |
| 268 static CObject* ListStartRequest(const CObjectArray& request); | 278 static CObject* ListStartRequest(const CObjectArray& request); |
| 269 static CObject* ListNextRequest(const CObjectArray& request); | 279 static CObject* ListNextRequest(const CObjectArray& request); |
| 270 static CObject* ListStopRequest(const CObjectArray& request); | 280 static CObject* ListStopRequest(const CObjectArray& request); |
| 271 static CObject* RenameRequest(const CObjectArray& request); | 281 static CObject* RenameRequest(const CObjectArray& request); |
| 272 | 282 |
| 273 private: | 283 private: |
| 274 DISALLOW_ALLOCATION(); | 284 DISALLOW_ALLOCATION(); |
| 275 DISALLOW_IMPLICIT_CONSTRUCTORS(Directory); | 285 DISALLOW_IMPLICIT_CONSTRUCTORS(Directory); |
| 276 }; | 286 }; |
| 277 | 287 |
| 278 } // namespace bin | 288 } // namespace bin |
| 279 } // namespace dart | 289 } // namespace dart |
| 280 | 290 |
| 281 #endif // BIN_DIRECTORY_H_ | 291 #endif // BIN_DIRECTORY_H_ |
| OLD | NEW |