blob: a343bd413780e899bc51296286becbd5e5c8df46 [file] [log] [blame]
/*
* Copyright (C) 2016 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 BUB_UTIL_H_
#define BUB_UTIL_H_
#ifdef __cplusplus
extern "C" {
#endif
/* Converts a UTF-8 string, |utf8_data|, to UCS-2 stored in |ucs2_data|. Caller
* must specify |utf8_num_bytes| as the number of bytes of the null-terminated
* |utf8_data|. Caller must have allocated enough bytes for the resulting UCS-2
* specified by |ucs2_data_capacity_num_bytes|. 2 * len(|utf8_data|) + 1 would
* be the upper bound of |ucs2_data_capacity_num_bytes|.
*
*/
int utf8_to_ucs2(const uint8_t* utf8_data,
size_t utf8_num_bytes,
uint16_t* ucs2_data,
size_t ucs2_data_capacity_num_bytes);
/* Allocates |size| bytes set to all zeros. Returns NULL if no memory is
* available, otherwise a pointer to the allocated memory.
*
* The memory is not initialized.
*
* The pointer returned is guaranteed to be word-aligned.
*
* The memory should be freed with bub_free() when you are done with it.
*/
void* bub_calloc(size_t size);
/* Converts a 32-bit unsigned integer from big-endian to host byte order. */
uint32_t bub_be32toh(uint32_t in);
/* Converts a 64-bit unsigned integer from big-endian to host byte order. */
uint64_t bub_be64toh(uint64_t in);
/* Calculates and returns crc32 value of |data| given byte size, |data_size|. */
uint32_t bub_crc32(uint32_t crc_in, const void *buf, int size);
#ifdef __cplusplus
}
#endif
#endif /* BUB_UTIL_H_ */