blob: f75b3fcff45298e5b01e3d0bac572e9e332bf9a7 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/lib/util/status_codes.h"
namespace cobalt::util {
std::optional<StatusCode> ErrnoToStatusCode(int error_number) {
switch (error_number) {
case 0:
return OK;
case EINVAL:
return INVALID_ARGUMENT;
case ETIMEDOUT:
case ETIME:
return DEADLINE_EXCEEDED;
case ENODEV:
case ENOENT:
case ENXIO:
case ESRCH:
return NOT_FOUND;
case EEXIST:
case EADDRNOTAVAIL:
case EALREADY:
return ALREADY_EXISTS;
case EPERM:
case EACCES:
case EROFS:
return PERMISSION_DENIED;
case EMFILE:
case ENFILE:
case EMLINK:
return RESOURCE_EXHAUSTED;
case EFBIG:
case EOVERFLOW:
case ERANGE:
return OUT_OF_RANGE;
case ENOSYS:
case ENOTSUP:
return UNIMPLEMENTED;
case EAGAIN:
return UNAVAILABLE;
case ECONNABORTED:
return ABORTED;
case ECANCELED:
return CANCELLED;
default:
return std::nullopt;
}
}
} // namespace cobalt::util