12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "libhdfs++/status.h"
- #include <cassert>
- #include <cstring>
- namespace hdfs {
- Status::Status(int code, const char *msg1)
- : state_(ConstructState(code, msg1, nullptr))
- {}
- Status::Status(int code, const char *msg1, const char *msg2)
- : state_(ConstructState(code, msg1, msg2))
- {}
- const char *Status::ConstructState(int code, const char *msg1, const char *msg2) {
- assert(code != kOk);
- const uint32_t len1 = strlen(msg1);
- const uint32_t len2 = msg2 ? strlen(msg2) : 0;
- const uint32_t size = len1 + (len2 ? (2 + len2) : 0);
- char* result = new char[size + 8 + 2];
- *reinterpret_cast<uint32_t*>(result) = size;
- *reinterpret_cast<uint32_t*>(result + 4) = code;
- memcpy(result + 8, msg1, len1);
- if (len2) {
- result[8 + len1] = ':';
- result[9 + len1] = ' ';
- memcpy(result + 10 + len1, msg2, len2);
- }
- return result;
- }
- std::string Status::ToString() const {
- if (!state_) {
- return "OK";
- } else {
- uint32_t length = *reinterpret_cast<const uint32_t*>(state_);
- return std::string(state_ + 8, length);
- }
- }
- const char* Status::CopyState(const char* state) {
- uint32_t size;
- memcpy(&size, state, sizeof(size));
- char* result = new char[size + 8];
- memcpy(result, state, size + 8);
- return result;
- }
- }
|