C API: catch exceptions in OrtCreateStatus (#821)

This commit is contained in:
Changming Sun 2019-04-23 14:41:44 -07:00 committed by GitHub
parent 11806529d0
commit 80d69515ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -15,7 +15,8 @@ struct OrtStatus {
ORT_API(OrtStatus*, OrtCreateStatus, OrtErrorCode code, _In_ const char* msg) {
assert(!(code == 0 && msg != nullptr));
size_t clen = strlen(msg);
OrtStatus* p = reinterpret_cast<OrtStatus*>(new char[sizeof(OrtStatus) + clen]);
OrtStatus* p = reinterpret_cast<OrtStatus*>(::malloc(sizeof(OrtStatus) + clen));
if (p == nullptr) return nullptr; // OOM
p->code = code;
memcpy(p->msg, msg, clen);
p->msg[clen] = '\0';
@ -27,7 +28,7 @@ OrtStatus* ToOrtStatus(const Status& st) {
if (st.IsOK())
return nullptr;
size_t clen = st.ErrorMessage().length();
OrtStatus* p = reinterpret_cast<OrtStatus*>(new char[sizeof(OrtStatus) + clen]);
OrtStatus* p = reinterpret_cast<OrtStatus*>(::malloc(sizeof(OrtStatus) + clen));
p->code = static_cast<OrtErrorCode>(st.Code());
memcpy(p->msg, st.ErrorMessage().c_str(), clen);
p->msg[clen] = '\0';
@ -42,4 +43,4 @@ ORT_API(const char*, OrtGetErrorMessage, _In_ const OrtStatus* status) {
return status->msg;
}
ORT_API(void, OrtReleaseStatus, _Frees_ptr_opt_ OrtStatus* value) { delete[] reinterpret_cast<char*>(value); }
ORT_API(void, OrtReleaseStatus, _Frees_ptr_opt_ OrtStatus* value) { ::free(value); }