Line data Source code
1 : #include "source/extensions/common/async_files/status_after_file_error.h" 2 : 3 : #include <cerrno> 4 : #include <string> 5 : 6 : #include "source/common/common/assert.h" 7 : #include "source/common/common/utility.h" 8 : 9 : #include "absl/status/status.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace Common { 14 : namespace AsyncFiles { 15 : 16 0 : absl::Status statusAfterFileError(int code) { 17 0 : const std::string str = Envoy::errorDetails(code); 18 0 : switch (code) { 19 0 : case EACCES: 20 0 : case EPERM: 21 0 : case EROFS: 22 0 : return absl::PermissionDeniedError(str); 23 0 : case EBADF: 24 0 : case EBUSY: 25 0 : case EISDIR: 26 0 : case ELOOP: 27 0 : case ENOTDIR: 28 0 : case ETXTBSY: 29 0 : case EWOULDBLOCK: 30 0 : return absl::FailedPreconditionError(str); 31 0 : case EDQUOT: 32 0 : case EMFILE: 33 0 : case ENFILE: 34 0 : case ENOMEM: 35 0 : case ENOSPC: 36 0 : return absl::ResourceExhaustedError(str); 37 0 : case EEXIST: 38 0 : return absl::AlreadyExistsError(str); 39 0 : case EFAULT: 40 0 : case EINVAL: 41 0 : case ENAMETOOLONG: 42 0 : return absl::InvalidArgumentError(str); 43 0 : case EFBIG: 44 0 : case EOVERFLOW: 45 0 : return absl::OutOfRangeError(str); 46 0 : case EINTR: 47 0 : return absl::UnavailableError(str); 48 0 : case ENODEV: 49 0 : case ENOENT: 50 0 : case ENXIO: 51 0 : return absl::NotFoundError(str); 52 0 : case EOPNOTSUPP: 53 0 : return absl::UnimplementedError(str); 54 0 : case 0: 55 0 : return absl::OkStatus(); 56 0 : default: 57 0 : ENVOY_BUG(false, absl::StrCat("Unrecognized error code ", code)); 58 0 : return absl::UnknownError(str); 59 0 : } 60 0 : } 61 : 62 : } // namespace AsyncFiles 63 : } // namespace Common 64 : } // namespace Extensions 65 : } // namespace Envoy