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
119
absl::Status statusAfterFileError(int code) {
17
119
  const std::string str = Envoy::errorDetails(code);
18
119
  switch (code) {
19
1
  case EACCES:
20
2
  case EPERM:
21
3
  case EROFS:
22
3
    return absl::PermissionDeniedError(str);
23
8
  case EBADF:
24
9
  case EBUSY:
25
10
  case EISDIR:
26
11
  case ELOOP:
27
12
  case ENOTDIR:
28
13
  case ETXTBSY:
29
14
  case EWOULDBLOCK:
30
14
    return absl::FailedPreconditionError(str);
31
1
  case EDQUOT:
32
4
  case EMFILE:
33
5
  case ENFILE:
34
6
  case ENOMEM:
35
7
  case ENOSPC:
36
7
    return absl::ResourceExhaustedError(str);
37
2
  case EEXIST:
38
2
    return absl::AlreadyExistsError(str);
39
1
  case EFAULT:
40
2
  case EINVAL:
41
3
  case ENAMETOOLONG:
42
3
    return absl::InvalidArgumentError(str);
43
1
  case EFBIG:
44
2
  case EOVERFLOW:
45
2
    return absl::OutOfRangeError(str);
46
1
  case EINTR:
47
1
    return absl::UnavailableError(str);
48
1
  case ENODEV:
49
83
  case ENOENT:
50
84
  case ENXIO:
51
84
    return absl::NotFoundError(str);
52
1
  case EOPNOTSUPP:
53
1
    return absl::UnimplementedError(str);
54
1
  case 0:
55
1
    return absl::OkStatus();
56
1
  default:
57
1
    ENVOY_BUG(false, absl::StrCat("Unrecognized error code ", code));
58
1
    return absl::UnknownError(str);
59
119
  }
60
119
}
61

            
62
} // namespace AsyncFiles
63
} // namespace Common
64
} // namespace Extensions
65
} // namespace Envoy