1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/files/file.h" 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// TODO(rvargas): remove this (needed for kInvalidPlatformFileValue). 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/platform_file.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace base { 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File::Info::Info() 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : size(0), 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) is_directory(false), 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) is_symbolic_link(false) { 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File::Info::~Info() { 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File::File() 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : file_(kInvalidPlatformFileValue), 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch error_details_(FILE_ERROR_FAILED), 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) created_(false), 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) async_(false) { 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_NACL) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File::File(const FilePath& name, uint32 flags) 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : file_(kInvalidPlatformFileValue), 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_details_(FILE_OK), 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) created_(false), 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) async_(false) { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Initialize(name, flags); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)File::File(PlatformFile platform_file) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : file_(platform_file), 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_details_(FILE_OK), 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) created_(false), 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) async_(false) { 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_POSIX) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_GE(platform_file, -1); 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 48effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochFile::File(Error error_details) 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : file_(kInvalidPlatformFileValue), 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch error_details_(error_details), 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch created_(false), 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch async_(false) { 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File::File(RValue other) 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : file_(other.object->TakePlatformFile()), 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_details_(other.object->error_details()), 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) created_(other.object->created()), 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) async_(other.object->async_) { 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File::~File() { 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Go through the AssertIOAllowed logic. 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Close(); 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)File& File::operator=(RValue other) { 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (this != other.object) { 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Close(); 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SetPlatformFile(other.object->TakePlatformFile()); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_details_ = other.object->error_details(); 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) created_ = other.object->created(); 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) async_ = other.object->async_; 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return *this; 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_NACL) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void File::Initialize(const FilePath& name, uint32 flags) { 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (name.ReferencesParent()) { 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_details_ = FILE_ERROR_ACCESS_DENIED; 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) InitializeUnsafe(name, flags); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string File::ErrorToString(Error error) { 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (error) { 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_OK: 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_OK"; 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_FAILED: 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_FAILED"; 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_IN_USE: 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_IN_USE"; 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_EXISTS: 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_EXISTS"; 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_NOT_FOUND: 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_NOT_FOUND"; 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_ACCESS_DENIED: 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_ACCESS_DENIED"; 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_TOO_MANY_OPENED: 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_TOO_MANY_OPENED"; 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_NO_MEMORY: 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_NO_MEMORY"; 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_NO_SPACE: 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_NO_SPACE"; 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_NOT_A_DIRECTORY: 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_NOT_A_DIRECTORY"; 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_INVALID_OPERATION: 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_INVALID_OPERATION"; 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_SECURITY: 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_SECURITY"; 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_ABORT: 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_ABORT"; 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_NOT_A_FILE: 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_NOT_A_FILE"; 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_NOT_EMPTY: 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_NOT_EMPTY"; 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_INVALID_URL: 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_INVALID_URL"; 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_IO: 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return "FILE_ERROR_IO"; 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case FILE_ERROR_MAX: 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NOTREACHED(); 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return ""; 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace base 133