// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ppapi/shared_impl/file_type_conversion.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/ppb_file_io.h" namespace ppapi { int PlatformFileErrorToPepperError(base::PlatformFileError error_code) { switch (error_code) { case base::PLATFORM_FILE_OK: return PP_OK; case base::PLATFORM_FILE_ERROR_EXISTS: return PP_ERROR_FILEEXISTS; case base::PLATFORM_FILE_ERROR_NOT_FOUND: return PP_ERROR_FILENOTFOUND; case base::PLATFORM_FILE_ERROR_ACCESS_DENIED: case base::PLATFORM_FILE_ERROR_SECURITY: return PP_ERROR_NOACCESS; case base::PLATFORM_FILE_ERROR_NO_MEMORY: return PP_ERROR_NOMEMORY; case base::PLATFORM_FILE_ERROR_NO_SPACE: return PP_ERROR_NOSPACE; case base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY: return PP_ERROR_FAILED; case base::PLATFORM_FILE_ERROR_NOT_A_FILE: return PP_ERROR_NOTAFILE; default: return PP_ERROR_FAILED; } } bool PepperFileOpenFlagsToPlatformFileFlags(int32_t pp_open_flags, int* flags_out) { if (!flags_out) return false; bool pp_read = !!(pp_open_flags & PP_FILEOPENFLAG_READ); bool pp_write = !!(pp_open_flags & PP_FILEOPENFLAG_WRITE); bool pp_create = !!(pp_open_flags & PP_FILEOPENFLAG_CREATE); bool pp_truncate = !!(pp_open_flags & PP_FILEOPENFLAG_TRUNCATE); bool pp_exclusive = !!(pp_open_flags & PP_FILEOPENFLAG_EXCLUSIVE); int flags = 0; if (pp_read) flags |= base::PLATFORM_FILE_READ; if (pp_write) { flags |= base::PLATFORM_FILE_WRITE; flags |= base::PLATFORM_FILE_WRITE_ATTRIBUTES; } if (pp_truncate && !pp_write) return false; if (pp_create) { if (pp_exclusive) { flags |= base::PLATFORM_FILE_CREATE; } else if (pp_truncate) { flags |= base::PLATFORM_FILE_CREATE_ALWAYS; } else { flags |= base::PLATFORM_FILE_OPEN_ALWAYS; } } else if (pp_truncate) { flags |= base::PLATFORM_FILE_OPEN_TRUNCATED; } else { flags |= base::PLATFORM_FILE_OPEN; } *flags_out = flags; return true; } } // namespace ppapi