1 // Copyright (c) 2012 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 "nacl_io/pepper_interface.h" 6 #include <errno.h> 7 #include <ppapi/c/pp_errors.h> 8 9 namespace nacl_io { 10 11 void PepperInterface::AddRefResource(PP_Resource resource) { 12 GetCoreInterface()->AddRefResource(resource); 13 } 14 15 void PepperInterface::ReleaseResource(PP_Resource resource) { 16 GetCoreInterface()->ReleaseResource(resource); 17 } 18 19 ScopedResource::ScopedResource(PepperInterface* ppapi) 20 : ppapi_(ppapi), resource_(0) { 21 } 22 23 ScopedResource::ScopedResource(PepperInterface* ppapi, PP_Resource resource) 24 : ppapi_(ppapi), resource_(resource) { 25 } 26 27 ScopedResource::~ScopedResource() { 28 if (resource_) 29 ppapi_->ReleaseResource(resource_); 30 } 31 32 void ScopedResource::Reset(PP_Resource resource) { 33 if (resource_) 34 ppapi_->ReleaseResource(resource_); 35 36 resource_ = resource; 37 } 38 39 PP_Resource ScopedResource::Release() { 40 PP_Resource result = resource_; 41 resource_ = 0; 42 return result; 43 } 44 45 ScopedVar::ScopedVar(PepperInterface* ppapi) 46 : ppapi_(ppapi), var_(PP_MakeUndefined()) {} 47 48 ScopedVar::ScopedVar(PepperInterface* ppapi, PP_Var var) 49 : ppapi_(ppapi), var_(var) {} 50 51 ScopedVar::~ScopedVar() { 52 ppapi_->GetVarInterface()->Release(var_); 53 } 54 55 void ScopedVar::Reset(PP_Var var) { 56 ppapi_->GetVarInterface()->Release(var_); 57 var_ = var; 58 } 59 60 PP_Var ScopedVar::Release() { 61 PP_Var result = var_; 62 var_ = PP_MakeUndefined(); 63 return result; 64 } 65 66 int PPErrorToErrno(int32_t err) { 67 // If not an error, then just return it. 68 if (err >= PP_OK) 69 return err; 70 71 switch (err) { 72 case PP_OK_COMPLETIONPENDING: return 0; 73 case PP_ERROR_FAILED: return EPERM; 74 case PP_ERROR_ABORTED: return EPERM; 75 case PP_ERROR_BADARGUMENT: return EINVAL; 76 case PP_ERROR_BADRESOURCE: return EBADF; 77 case PP_ERROR_NOINTERFACE: return ENOSYS; 78 case PP_ERROR_NOACCESS: return EACCES; 79 case PP_ERROR_NOMEMORY: return ENOMEM; 80 case PP_ERROR_NOSPACE: return ENOSPC; 81 case PP_ERROR_NOQUOTA: return ENOSPC; 82 case PP_ERROR_INPROGRESS: return EBUSY; 83 case PP_ERROR_NOTSUPPORTED: return ENOSYS; 84 case PP_ERROR_BLOCKS_MAIN_THREAD: return EPERM; 85 case PP_ERROR_FILENOTFOUND: return ENOENT; 86 case PP_ERROR_FILEEXISTS: return EEXIST; 87 case PP_ERROR_FILETOOBIG: return EFBIG; 88 case PP_ERROR_FILECHANGED: return EINVAL; 89 case PP_ERROR_TIMEDOUT: return EBUSY; 90 case PP_ERROR_USERCANCEL: return EPERM; 91 case PP_ERROR_NO_USER_GESTURE: return EPERM; 92 case PP_ERROR_CONTEXT_LOST: return EPERM; 93 case PP_ERROR_NO_MESSAGE_LOOP: return EPERM; 94 case PP_ERROR_WRONG_THREAD: return EPERM; 95 case PP_ERROR_CONNECTION_ABORTED: return ECONNABORTED; 96 case PP_ERROR_CONNECTION_REFUSED: return ECONNREFUSED; 97 case PP_ERROR_CONNECTION_FAILED: return ECONNREFUSED; 98 case PP_ERROR_CONNECTION_TIMEDOUT: return ETIMEDOUT; 99 case PP_ERROR_ADDRESS_UNREACHABLE: return ENETUNREACH; 100 case PP_ERROR_ADDRESS_IN_USE: return EADDRINUSE; 101 } 102 103 return EINVAL; 104 } 105 106 } // namespace nacl_io 107