1 // 2 // Copyright (C) 2012 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #include "update_engine/common/error_code_utils.h" 18 19 using std::string; 20 21 namespace chromeos_update_engine { 22 namespace utils { 23 ErrorCodeToString(ErrorCode code)24string ErrorCodeToString(ErrorCode code) { 25 // If the given code has both parts (i.e. the error code part and the flags 26 // part) then strip off the flags part since the switch statement below 27 // has case statements only for the base error code or a single flag but 28 // doesn't support any combinations of those. 29 if ((static_cast<int>(code) & static_cast<int>(ErrorCode::kSpecialFlags)) && 30 (static_cast<int>(code) & ~static_cast<int>(ErrorCode::kSpecialFlags))) 31 code = static_cast<ErrorCode>(static_cast<int>(code) & 32 ~static_cast<int>(ErrorCode::kSpecialFlags)); 33 switch (code) { 34 case ErrorCode::kSuccess: 35 return "ErrorCode::kSuccess"; 36 case ErrorCode::kError: 37 return "ErrorCode::kError"; 38 case ErrorCode::kOmahaRequestError: 39 return "ErrorCode::kOmahaRequestError"; 40 case ErrorCode::kOmahaResponseHandlerError: 41 return "ErrorCode::kOmahaResponseHandlerError"; 42 case ErrorCode::kFilesystemCopierError: 43 return "ErrorCode::kFilesystemCopierError"; 44 case ErrorCode::kPostinstallRunnerError: 45 return "ErrorCode::kPostinstallRunnerError"; 46 case ErrorCode::kPayloadMismatchedType: 47 return "ErrorCode::kPayloadMismatchedType"; 48 case ErrorCode::kInstallDeviceOpenError: 49 return "ErrorCode::kInstallDeviceOpenError"; 50 case ErrorCode::kKernelDeviceOpenError: 51 return "ErrorCode::kKernelDeviceOpenError"; 52 case ErrorCode::kDownloadTransferError: 53 return "ErrorCode::kDownloadTransferError"; 54 case ErrorCode::kPayloadHashMismatchError: 55 return "ErrorCode::kPayloadHashMismatchError"; 56 case ErrorCode::kPayloadSizeMismatchError: 57 return "ErrorCode::kPayloadSizeMismatchError"; 58 case ErrorCode::kDownloadPayloadVerificationError: 59 return "ErrorCode::kDownloadPayloadVerificationError"; 60 case ErrorCode::kDownloadNewPartitionInfoError: 61 return "ErrorCode::kDownloadNewPartitionInfoError"; 62 case ErrorCode::kDownloadWriteError: 63 return "ErrorCode::kDownloadWriteError"; 64 case ErrorCode::kNewRootfsVerificationError: 65 return "ErrorCode::kNewRootfsVerificationError"; 66 case ErrorCode::kNewKernelVerificationError: 67 return "ErrorCode::kNewKernelVerificationError"; 68 case ErrorCode::kSignedDeltaPayloadExpectedError: 69 return "ErrorCode::kSignedDeltaPayloadExpectedError"; 70 case ErrorCode::kDownloadPayloadPubKeyVerificationError: 71 return "ErrorCode::kDownloadPayloadPubKeyVerificationError"; 72 case ErrorCode::kPostinstallBootedFromFirmwareB: 73 return "ErrorCode::kPostinstallBootedFromFirmwareB"; 74 case ErrorCode::kDownloadStateInitializationError: 75 return "ErrorCode::kDownloadStateInitializationError"; 76 case ErrorCode::kDownloadInvalidMetadataMagicString: 77 return "ErrorCode::kDownloadInvalidMetadataMagicString"; 78 case ErrorCode::kDownloadSignatureMissingInManifest: 79 return "ErrorCode::kDownloadSignatureMissingInManifest"; 80 case ErrorCode::kDownloadManifestParseError: 81 return "ErrorCode::kDownloadManifestParseError"; 82 case ErrorCode::kDownloadMetadataSignatureError: 83 return "ErrorCode::kDownloadMetadataSignatureError"; 84 case ErrorCode::kDownloadMetadataSignatureVerificationError: 85 return "ErrorCode::kDownloadMetadataSignatureVerificationError"; 86 case ErrorCode::kDownloadMetadataSignatureMismatch: 87 return "ErrorCode::kDownloadMetadataSignatureMismatch"; 88 case ErrorCode::kDownloadOperationHashVerificationError: 89 return "ErrorCode::kDownloadOperationHashVerificationError"; 90 case ErrorCode::kDownloadOperationExecutionError: 91 return "ErrorCode::kDownloadOperationExecutionError"; 92 case ErrorCode::kDownloadOperationHashMismatch: 93 return "ErrorCode::kDownloadOperationHashMismatch"; 94 case ErrorCode::kOmahaRequestEmptyResponseError: 95 return "ErrorCode::kOmahaRequestEmptyResponseError"; 96 case ErrorCode::kOmahaRequestXMLParseError: 97 return "ErrorCode::kOmahaRequestXMLParseError"; 98 case ErrorCode::kDownloadInvalidMetadataSize: 99 return "ErrorCode::kDownloadInvalidMetadataSize"; 100 case ErrorCode::kDownloadInvalidMetadataSignature: 101 return "ErrorCode::kDownloadInvalidMetadataSignature"; 102 case ErrorCode::kOmahaResponseInvalid: 103 return "ErrorCode::kOmahaResponseInvalid"; 104 case ErrorCode::kOmahaUpdateIgnoredPerPolicy: 105 return "ErrorCode::kOmahaUpdateIgnoredPerPolicy"; 106 case ErrorCode::kOmahaUpdateDeferredPerPolicy: 107 return "ErrorCode::kOmahaUpdateDeferredPerPolicy"; 108 case ErrorCode::kOmahaErrorInHTTPResponse: 109 return "ErrorCode::kOmahaErrorInHTTPResponse"; 110 case ErrorCode::kDownloadOperationHashMissingError: 111 return "ErrorCode::kDownloadOperationHashMissingError"; 112 case ErrorCode::kDownloadMetadataSignatureMissingError: 113 return "ErrorCode::kDownloadMetadataSignatureMissingError"; 114 case ErrorCode::kOmahaUpdateDeferredForBackoff: 115 return "ErrorCode::kOmahaUpdateDeferredForBackoff"; 116 case ErrorCode::kPostinstallPowerwashError: 117 return "ErrorCode::kPostinstallPowerwashError"; 118 case ErrorCode::kUpdateCanceledByChannelChange: 119 return "ErrorCode::kUpdateCanceledByChannelChange"; 120 case ErrorCode::kUmaReportedMax: 121 return "ErrorCode::kUmaReportedMax"; 122 case ErrorCode::kOmahaRequestHTTPResponseBase: 123 return "ErrorCode::kOmahaRequestHTTPResponseBase"; 124 case ErrorCode::kResumedFlag: 125 return "Resumed"; 126 case ErrorCode::kDevModeFlag: 127 return "DevMode"; 128 case ErrorCode::kTestImageFlag: 129 return "TestImage"; 130 case ErrorCode::kTestOmahaUrlFlag: 131 return "TestOmahaUrl"; 132 case ErrorCode::kSpecialFlags: 133 return "ErrorCode::kSpecialFlags"; 134 case ErrorCode::kPostinstallFirmwareRONotUpdatable: 135 return "ErrorCode::kPostinstallFirmwareRONotUpdatable"; 136 case ErrorCode::kUnsupportedMajorPayloadVersion: 137 return "ErrorCode::kUnsupportedMajorPayloadVersion"; 138 case ErrorCode::kUnsupportedMinorPayloadVersion: 139 return "ErrorCode::kUnsupportedMinorPayloadVersion"; 140 case ErrorCode::kOmahaRequestXMLHasEntityDecl: 141 return "ErrorCode::kOmahaRequestXMLHasEntityDecl"; 142 case ErrorCode::kFilesystemVerifierError: 143 return "ErrorCode::kFilesystemVerifierError"; 144 case ErrorCode::kUserCanceled: 145 return "ErrorCode::kUserCanceled"; 146 case ErrorCode::kNonCriticalUpdateInOOBE: 147 return "ErrorCode::kNonCriticalUpdateInOOBE"; 148 case ErrorCode::kOmahaUpdateIgnoredOverCellular: 149 return "ErrorCode::kOmahaUpdateIgnoredOverCellular"; 150 case ErrorCode::kPayloadTimestampError: 151 return "ErrorCode::kPayloadTimestampError"; 152 case ErrorCode::kUpdatedButNotActive: 153 return "ErrorCode::kUpdatedButNotActive"; 154 case ErrorCode::kNoUpdate: 155 return "ErrorCode::kNoUpdate"; 156 case ErrorCode::kRollbackNotPossible: 157 return "ErrorCode::kRollbackNotPossible"; 158 case ErrorCode::kFirstActiveOmahaPingSentPersistenceError: 159 return "ErrorCode::kFirstActiveOmahaPingSentPersistenceError"; 160 case ErrorCode::kVerityCalculationError: 161 return "ErrorCode::kVerityCalculationError"; 162 case ErrorCode::kInternalLibCurlError: 163 return "ErrorCode::kInternalLibCurlError"; 164 case ErrorCode::kUnresolvedHostError: 165 return "ErrorCode::kUnresolvedHostError"; 166 case ErrorCode::kUnresolvedHostRecovered: 167 return "ErrorCode::kUnresolvedHostRecovered"; 168 case ErrorCode::kNotEnoughSpace: 169 return "ErrorCode::kNotEnoughSpace"; 170 case ErrorCode::kDeviceCorrupted: 171 return "ErrorCode::kDeviceCorrupted"; 172 case ErrorCode::kPackageExcludedFromUpdate: 173 return "ErrorCode::kPackageExcludedFromUpdate"; 174 case ErrorCode::kPostInstallMountError: 175 return "ErrorCode::kPostInstallMountError"; 176 case ErrorCode::kOverlayfsenabledError: 177 return "ErrorCode::kOverlayfsenabledError"; 178 case ErrorCode::kUpdateProcessing: 179 return "ErrorCode::kUpdateProcessing"; 180 case ErrorCode::kUpdateAlreadyInstalled: 181 return "ErrorCode::kUpdateAlreadyInstalled"; 182 // Don't add a default case to let the compiler warn about newly added 183 // error codes which should be added here. 184 } 185 186 return "Unknown error: " + std::format("{}", static_cast<unsigned>(code)); 187 } 188 189 } // namespace utils 190 } // namespace chromeos_update_engine 191