$search
00001 00009 /***************************************************************************** 00010 ** Cross platform 00011 *****************************************************************************/ 00012 00013 #include <ecl/config/ecl.hpp> 00014 #ifdef ECL_IS_POSIX 00015 00016 /***************************************************************************** 00017 ** Includes 00018 *****************************************************************************/ 00019 00020 #include <errno.h> 00021 #include <ecl/errors/handlers.hpp> 00022 #include "../../../include/ecl/devices/detail/error_handler_pos.hpp" 00023 00024 /***************************************************************************** 00025 ** Namespaces 00026 *****************************************************************************/ 00027 00028 namespace ecl { 00029 namespace devices { 00030 00031 /***************************************************************************** 00032 ** Implementation [Exception Handlers] 00033 *****************************************************************************/ 00034 00035 ecl::Error open_error() { 00036 int error_result = errno; 00037 switch (error_result) { 00038 case ( EINVAL ) : return ecl::Error(ecl::InvalidArgError); 00039 case ( EACCES ) : return ecl::Error(ecl::PermissionsError); 00040 case ( EFBIG ) : case (EOVERFLOW) : 00041 return ecl::Error(ecl::OutOfResourcesError); 00042 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00043 case ( EISDIR ) : return ecl::Error(ecl::InvalidObjectError); 00044 case ( ELOOP ) : return ecl::Error(ecl::SystemFailureError); 00045 case ( EMFILE ) : return ecl::Error(ecl::OutOfResourcesError); 00046 case ( ENFILE ) : return ecl::Error(ecl::OutOfResourcesError); 00047 case ( ENAMETOOLONG ) : return ecl::Error(ecl::InvalidArgError); 00048 case ( ENOMEM ) : return ecl::Error(ecl::MemoryError); 00049 case ( ENOSPC ) : return ecl::Error(ecl::OutOfResourcesError); 00050 case ( ENOTDIR ): return ecl::Error(ecl::InvalidObjectError); 00051 case ( EROFS ) : return ecl::Error(ecl::PermissionsError); 00052 case ( ETXTBSY ): return ecl::Error(ecl::UsageError); 00053 default : return ecl::Error(ecl::UnknownError); 00054 } 00055 } 00056 00057 00058 ecl::Error write_error() { 00059 int error_result = errno; 00060 switch (error_result) { 00061 case ( EAGAIN ) : return ecl::Error(ecl::BlockingError); 00062 case ( EBADF ) : case (EINVAL) 00063 : return ecl::Error(ecl::InvalidObjectError); 00064 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError); 00065 case ( EFBIG ) : return ecl::Error(ecl::MemoryError); 00066 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00067 case ( EIO ) : return ecl::Error(ecl::SystemFailureError); 00068 case ( ENOSPC ) : return ecl::Error(ecl::OutOfResourcesError); 00069 case ( EPIPE ) : return ecl::Error(ecl::PermissionsError); 00070 default : return ecl::Error(ecl::UnknownError); 00071 } 00072 } 00073 00074 00075 ecl::Error read_error() { 00076 int error_result = errno; 00077 switch (error_result) { 00078 case ( EAGAIN ) : return ecl::Error(ecl::BlockingError); 00079 case ( EBADF ) : case (EINVAL) 00080 : return ecl::Error(ecl::PermissionsError); 00081 case ( EFAULT ) : return ecl::Error(ecl::OutOfRangeError); 00082 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00083 case ( EIO ) : return ecl::Error(ecl::SystemFailureError); 00084 case ( EISDIR ) : return ecl::Error(ecl::InvalidObjectError); 00085 default : return ecl::Error(ecl::UnknownError); 00086 } 00087 } 00088 ecl::Error sync_error() { 00089 int error_result = errno; 00090 switch (error_result) { 00091 case ( EBADF ) : return ecl::Error(ecl::InvalidArgError); 00092 case ( EIO ) : return ecl::Error(ecl::CloseError); 00093 case ( EROFS ) : case ( EINVAL ) 00094 : return ecl::Error(ecl::NotSupportedError); 00095 default : return ecl::Error(ecl::UnknownError); 00096 } 00097 } 00098 ecl::Error close_error() { 00099 int error_result = errno; 00100 switch (error_result) { 00101 case ( EBADF ) : return ecl::Error(ecl::InvalidArgError); 00102 case ( EIO ) : return ecl::Error(ecl::SystemFailureError); 00103 case ( EINTR ) : return ecl::Error(ecl::InterruptedError); 00104 default : return ecl::Error(ecl::UnknownError); 00105 } 00106 } 00107 00108 } // namespace devices 00109 } // namespace ecl 00110 00111 #endif /* ECL_IS_POSIX */ 00112