diff --git a/tensorflow/c/tf_status.cc b/tensorflow/c/tf_status.cc index 43c0d9e1fe4..3144f2c1900 100644 --- a/tensorflow/c/tf_status.cc +++ b/tensorflow/c/tf_status.cc @@ -17,7 +17,9 @@ limitations under the License. #include "tensorflow/c/tf_status_internal.h" #include "tensorflow/core/lib/core/status.h" +#include "tensorflow/core/platform/error.h" +using ::tensorflow::IOError; using ::tensorflow::Status; using ::tensorflow::error::Code; @@ -33,6 +35,12 @@ void TF_SetStatus(TF_Status* s, TF_Code code, const char* msg) { s->status = Status(static_cast(code), tensorflow::StringPiece(msg)); } +void TF_SetStatusFromIOError(TF_Status* s, int error_code, + const char* context) { + // TODO(mihaimaruseac): Handle windows when changing its filesystem + s->status = IOError(context, error_code); +} + TF_Code TF_GetCode(const TF_Status* s) { return static_cast(s->status.code()); } diff --git a/tensorflow/c/tf_status.h b/tensorflow/c/tf_status.h index 937f6bed2d7..614f660eaf8 100644 --- a/tensorflow/c/tf_status.h +++ b/tensorflow/c/tf_status.h @@ -72,6 +72,12 @@ TF_CAPI_EXPORT extern void TF_DeleteStatus(TF_Status*); TF_CAPI_EXPORT extern void TF_SetStatus(TF_Status* s, TF_Code code, const char* msg); +// Convert from an I/O error code (e.g., errno) to a TF_Status value. +// Any previous information is lost. Prefer to use this instead of TF_SetStatus +// when the error comes from I/O operations. +TF_CAPI_EXPORT extern void TF_SetStatusFromIOError(TF_Status* s, int error_code, + const char* context); + // Return the code record in *s. TF_CAPI_EXPORT extern TF_Code TF_GetCode(const TF_Status* s);