Symbian platform (C++)
SDK native APIs, runtime and tooling
Loading...
Searching...
No Matches
native_status.h
Go to the documentation of this file.
1// Copyright 2026 The Symbian SDK Authors.
2// Licensed under the Apache License, Version 2.0.
3// Keep Symbian's TInt result contract at the OS boundary. Application logic
4// uses the original guest Abseil Status and StatusOr types.
5
6#ifndef SYMBIAN_NATIVE_STATUS_H_
7#define SYMBIAN_NATIVE_STATUS_H_
8
9#include <cerrno>
10#include <climits>
11#include <cstdlib>
12#include <string>
13
14#include "absl/status/status.h"
15#include "absl/strings/cord.h"
16#include "absl/strings/string_view.h"
17
18namespace symbian {
19
20// Frozen system-wide TInt values from the original e32err.h contract.
21// Keep them in this boundary header so application logic need not include
22// the old platform declarations beside modern libc++ headers.
23namespace native_error {
24inline constexpr int kNone = 0;
25inline constexpr int kNotFound = -1;
26inline constexpr int kGeneral = -2;
27inline constexpr int kCancel = -3;
28inline constexpr int kNoMemory = -4;
29inline constexpr int kNotSupported = -5;
30inline constexpr int kArgument = -6;
31inline constexpr int kAlreadyExists = -11;
32inline constexpr int kInUse = -14;
33inline constexpr int kNotReady = -18;
34inline constexpr int kAccessDenied = -21;
35inline constexpr int kTimedOut = -33;
36inline constexpr int kPermissionDenied = -46;
37} // namespace native_error
38
39inline constexpr absl::string_view kNativeErrorPayload =
40 "symbian.sdk/native-error";
41
42inline absl::Status StatusFromNativeError(int native_code,
43 absl::string_view operation) {
44 if (native_code == native_error::kNone) {
45 return absl::OkStatus();
46 }
47 absl::StatusCode code = absl::StatusCode::kInternal;
48 switch (native_code) {
50 code = absl::StatusCode::kNotFound;
51 break;
53 code = absl::StatusCode::kCancelled;
54 break;
56 code = absl::StatusCode::kResourceExhausted;
57 break;
59 code = absl::StatusCode::kUnimplemented;
60 break;
62 code = absl::StatusCode::kInvalidArgument;
63 break;
65 code = absl::StatusCode::kAlreadyExists;
66 break;
69 code = absl::StatusCode::kFailedPrecondition;
70 break;
73 code = absl::StatusCode::kPermissionDenied;
74 break;
76 code = absl::StatusCode::kDeadlineExceeded;
77 break;
78 }
79 std::string message(operation);
80 message += ": native error ";
81 message += std::to_string(native_code);
82 absl::Status result(code, message);
83 result.SetPayload(kNativeErrorPayload,
84 absl::Cord(absl::string_view(std::to_string(native_code))));
85 return result;
86}
87
88inline int NativeErrorFromStatus(const absl::Status& status) {
89 if (status.ok()) {
91 }
92 if (auto payload = status.GetPayload(kNativeErrorPayload)) {
93 const std::string text(payload->Flatten());
94 char* end = nullptr;
95 errno = 0;
96 const long value = std::strtol(text.c_str(), &end, 10);
97 if (errno == 0 && end != text.c_str() && *end == '\0' && value >= INT_MIN &&
98 value <= INT_MAX && value < 0) {
99 return static_cast<int>(value);
100 }
101 }
102 switch (status.code()) {
103 case absl::StatusCode::kCancelled:
105 case absl::StatusCode::kNotFound:
107 case absl::StatusCode::kInvalidArgument:
109 case absl::StatusCode::kDeadlineExceeded:
111 case absl::StatusCode::kAlreadyExists:
113 case absl::StatusCode::kPermissionDenied:
115 case absl::StatusCode::kResourceExhausted:
117 case absl::StatusCode::kFailedPrecondition:
119 case absl::StatusCode::kUnimplemented:
121 default:
123 }
124}
125
126} // namespace symbian
127
128#endif // SYMBIAN_NATIVE_STATUS_H_
std::vector< uint32_t > code
Definition e32.cc:70
constexpr int kArgument
Definition native_status.h:30
constexpr int kGeneral
Definition native_status.h:26
constexpr int kAlreadyExists
Definition native_status.h:31
constexpr int kCancel
Definition native_status.h:27
constexpr int kAccessDenied
Definition native_status.h:34
constexpr int kNotSupported
Definition native_status.h:29
constexpr int kTimedOut
Definition native_status.h:35
constexpr int kPermissionDenied
Definition native_status.h:36
constexpr int kNotFound
Definition native_status.h:25
constexpr int kNone
Definition native_status.h:24
constexpr int kNoMemory
Definition native_status.h:28
constexpr int kInUse
Definition native_status.h:32
constexpr int kNotReady
Definition native_status.h:33
Definition control.cc:11
int NativeErrorFromStatus(const absl::Status &status)
Definition native_status.h:88
absl::Status StatusFromNativeError(int native_code, absl::string_view operation)
Definition native_status.h:42
constexpr absl::string_view kNativeErrorPayload
Definition native_status.h:39
std::string_view payload
Definition sis.cc:139
libusb_context * value
Definition usb.cc:35