1eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* 2eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * Copyright 2017 The Android Open Source Project 3eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * 4eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * Licensed under the Apache License, Version 2.0 (the "License"); 5eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * you may not use this file except in compliance with the License. 6eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * You may obtain a copy of the License at 7eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * 8eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * http://www.apache.org/licenses/LICENSE-2.0 9eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * 10eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * Unless required by applicable law or agreed to in writing, software 11eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * distributed under the License is distributed on an "AS IS" BASIS, 12eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * See the License for the specific language governing permissions and 14eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * limitations under the License. 15eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr */ 16eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 17eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#ifndef ATAP_SYSDEPS_H_ 18eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#define ATAP_SYSDEPS_H_ 19eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 20eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#ifdef __cplusplus 21eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrextern "C" { 22eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#endif 23eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 24eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Change these includes to match your platform to bring in the 25eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * equivalent types available in a normal C runtime. At least things 26eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * like uint8_t, uint64_t, and bool (with |false|, |true| keywords) 27eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * must be present. 28eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr */ 29eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#include <inttypes.h> 30eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#include <stdbool.h> 31eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#include <stddef.h> 32eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#include <stdint.h> 33eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 34eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* If you don't have gcc or clang, these attribute macros may need to 35eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * be adjusted. 36eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr */ 37eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#define ATAP_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 38eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#define ATAP_ATTR_PACKED __attribute__((packed)) 39eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#define ATAP_ATTR_NO_RETURN __attribute__((noreturn)) 40eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#define ATAP_ATTR_SENTINEL __attribute__((__sentinel__)) 41eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 42eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Copy |n| bytes from |src| to |dest|. */ 43eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid* atap_memcpy(void* dest, const void* src, size_t n); 44eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 45eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Set |n| bytes starting at |s| to |c|. Returns |dest|. */ 46eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid* atap_memset(void* dest, const int c, size_t n); 47eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 48eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Aborts the program or reboots the device. */ 49eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid atap_abort(void) ATAP_ATTR_NO_RETURN; 50eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 51eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Prints out a message. The string passed must be a NUL-terminated 52eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * UTF-8 string. 53eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr */ 54eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid atap_print(const char* message); 55eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 56eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Prints out a vector of strings. Each argument must point to a 57eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * NUL-terminated UTF-8 string and NULL should be the last argument. 58eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr */ 59eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid atap_printv(const char* message, ...) ATAP_ATTR_SENTINEL; 60eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 61eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Allocates |size| bytes. Returns NULL if no memory is available, 62eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * otherwise a pointer to the allocated memory. 63eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * 64eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * The memory is not initialized. 65eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * 66eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * The pointer returned is guaranteed to be word-aligned. 67eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * 68eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr * The memory should be freed with atap_free() when you are done with it. 69eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr */ 70eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid* atap_malloc(size_t size) ATAP_ATTR_WARN_UNUSED_RESULT; 71eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 72eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Frees memory previously allocated with atap_malloc(). */ 73eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrvoid atap_free(void* ptr); 74eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 75eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr/* Returns the length of |str|, excluding the terminating NUL-byte. */ 76eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohrsize_t atap_strlen(const char* str) ATAP_ATTR_WARN_UNUSED_RESULT; 77eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 78eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#ifdef __cplusplus 79eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr} 80eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#endif 81eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr 82eb3a3e3eafd643fb61456dfda4eca3c61d50ff14Jocelyn Bohr#endif /* ATAP_SYSDEPS_H_ */ 83