/* * Copyright (C) 2019 The Android Open Source Project * * Licensed 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. */ #ifndef ART_LIBPROFILE_PROFILE_PROFILE_HELPERS_H_ #define ART_LIBPROFILE_PROFILE_PROFILE_HELPERS_H_ #include #include #include "base/globals.h" namespace art { // Returns true if all the bytes were successfully written to the file descriptor. inline bool WriteBuffer(int fd, const uint8_t* buffer, size_t byte_count) { while (byte_count > 0) { int bytes_written = TEMP_FAILURE_RETRY(write(fd, buffer, byte_count)); if (bytes_written == -1) { return false; } byte_count -= bytes_written; // Reduce the number of remaining bytes. buffer += bytes_written; // Move the buffer forward. } return true; } // Add the string bytes to the buffer. inline void AddStringToBuffer(std::vector* buffer, const std::string& value) { buffer->insert(buffer->end(), value.begin(), value.end()); } // Insert each byte, from low to high into the buffer. template inline void AddUintToBuffer(std::vector* buffer, T value) { for (size_t i = 0; i < sizeof(T); i++) { buffer->push_back((value >> (i * kBitsPerByte)) & 0xff); } } } // namespace art #endif // ART_LIBPROFILE_PROFILE_PROFILE_HELPERS_H_