mirror of https://github.com/grpc/grpc.git
parent
67ff4053b7
commit
5c30f1cca0
5 changed files with 107 additions and 5 deletions
@ -0,0 +1,31 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2018 gRPC authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_LIB_IOMGR_ERROR_APPLE_H |
||||
#define GRPC_CORE_LIB_IOMGR_ERROR_APPLE_H |
||||
|
||||
#ifdef GPR_APPLE |
||||
// Create an error from Apple Core Foundation CFError object
|
||||
#define GRPC_ERROR_CREATE_FROM_CFERROR(error, desc) \ |
||||
grpc_error_create_from_cferror(__FILE__, __LINE__, \
|
||||
static_cast<void*>((error)), (desc)) |
||||
grpc_error* grpc_error_create_from_cferror(const char* file, int line, |
||||
void* arg, const char* desc); |
||||
#endif |
||||
|
||||
#endif /* GRPC_CORE_LIB_IOMGR_ERROR_APPLE_H */ |
@ -0,0 +1,49 @@ |
||||
/* |
||||
* |
||||
* Copyright 2018 gRPC authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* |
||||
*/ |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#ifdef GPR_APPLE |
||||
#import <Foundation/Foundation.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/string_util.h> |
||||
|
||||
#include "src/core/lib/iomgr/error.h" |
||||
|
||||
#define MAX_ERROR_DESCRIPTION 256 |
||||
|
||||
grpc_error* grpc_error_create_from_cferror(const char* file, int line, void* arg, |
||||
const char* custom_desc) { |
||||
CFErrorRef error = static_cast<CFErrorRef>(arg); |
||||
char buf_domain[MAX_ERROR_DESCRIPTION], buf_desc[MAX_ERROR_DESCRIPTION]; |
||||
char* error_msg; |
||||
CFErrorDomain domain = CFErrorGetDomain((error)); |
||||
CFIndex code = CFErrorGetCode((error)); |
||||
CFStringRef desc = CFErrorCopyDescription((error)); |
||||
CFStringGetCString(domain, buf_domain, MAX_ERROR_DESCRIPTION, kCFStringEncodingUTF8); |
||||
CFStringGetCString(desc, buf_desc, MAX_ERROR_DESCRIPTION, kCFStringEncodingUTF8); |
||||
gpr_asprintf(&error_msg, "%s (error domain:%s, code:%ld, description:%s)", custom_desc, |
||||
buf_domain, code, buf_desc); |
||||
CFRelease(desc); |
||||
grpc_error* return_error = |
||||
grpc_error_create(file, line, grpc_slice_from_copied_string(error_msg), NULL, 0); |
||||
gpr_free(error_msg); |
||||
return return_error; |
||||
} |
||||
#endif // GPR_APPLE |
Loading…
Reference in new issue