avb_sysdeps.h revision c612e2e353444f6ad714e43702c2afd057516254
121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* 221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Copyright (C) 2016 The Android Open Source Project 321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 4c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * Permission is hereby granted, free of charge, to any person 5c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * obtaining a copy of this software and associated documentation 6c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * files (the "Software"), to deal in the Software without 7c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * restriction, including without limitation the rights to use, copy, 8c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * modify, merge, publish, distribute, sublicense, and/or sell copies 9c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * of the Software, and to permit persons to whom the Software is 10c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * furnished to do so, subject to the following conditions: 1121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 12c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * The above copyright notice and this permission notice shall be 13c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * included in all copies or substantial portions of the Software. 1421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 15c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 19c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 20c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * SOFTWARE. 2321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 2421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 2521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#if !defined(AVB_INSIDE_LIBAVB_H) && !defined(AVB_COMPILATION) 2621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#error "Never include this file directly, include libavb.h instead." 2721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif 2821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 2921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifndef AVB_SYSDEPS_H_ 3021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_SYSDEPS_H_ 3121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 3221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifdef __cplusplus 3321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenextern "C" { 3421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif 3521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 3621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Change these includes to match your platform to bring in the 3721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * equivalent types available in a normal C runtime. At least things 3821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * like uint8_t, uint64_t, and bool (with |false|, |true| keywords) 3921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * must be present. 4021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 4121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include <inttypes.h> 4221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include <stdbool.h> 4321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include <stddef.h> 4421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include <stdint.h> 4521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 4621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* If you don't have gcc or clang, these attribute macros may need to 4721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * be adjusted. 4821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 4921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 5021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_ATTR_PACKED __attribute__((packed)) 5121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_ATTR_NO_RETURN __attribute__((noreturn)) 5221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_ATTR_SENTINEL __attribute__((__sentinel__)); 5321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 5421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Size in bytes used for word-alignment. 5521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 5621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Change this to match your architecture - must be a power of two. 5721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 5821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_WORD_ALIGNMENT_SIZE 8 5921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 6021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Compare |n| bytes in |src1| and |src2|. 6121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 6221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Returns an integer less than, equal to, or greater than zero if the 6321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * first |n| bytes of |src1| is found, respectively, to be less than, 6421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * to match, or be greater than the first |n| bytes of |src2|. */ 6521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenint avb_memcmp(const void* src1, const void* src2, 6621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen size_t n) AVB_ATTR_WARN_UNUSED_RESULT; 6721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 6821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Compare two strings. 6921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 7021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Return an integer less than, equal to, or greater than zero if |s1| 7121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * is found, respectively, to be less than, to match, or be greater 7221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * than |s2|. 7321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 7421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenint avb_strcmp(const char* s1, const char* s2); 7521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 7621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Copy |n| bytes from |src| to |dest|. */ 7721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid* avb_memcpy(void* dest, const void* src, size_t n); 7821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 7921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Set |n| bytes starting at |s| to |c|. Returns |dest|. */ 8021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid* avb_memset(void* dest, const int c, size_t n); 8121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 8221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Prints out a message. The string passed must be a NUL-terminated 8321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * UTF-8 string. 8421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 8521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_print(const char* message); 8621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 8721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Prints out a vector of strings. Each argument must point to a 8821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * NUL-terminated UTF-8 string and NULL should be the last argument. 8921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 9021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_printv(const char* message, ...) AVB_ATTR_SENTINEL; 9121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 9221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Aborts the program or reboots the device. */ 9321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_abort(void) AVB_ATTR_NO_RETURN; 9421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 9521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Allocates |size| bytes. Returns NULL if no memory is available, 9621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * otherwise a pointer to the allocated memory. 9721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 9821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * The memory is not initialized. 9921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 10021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * The pointer returned is guaranteed to be word-aligned. 10121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 10221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * The memory should be freed with avb_free() when you are done with it. 10321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 10421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid* avb_malloc_(size_t size) AVB_ATTR_WARN_UNUSED_RESULT; 10521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 10621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Frees memory previously allocated with avb_malloc(). */ 10721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_free(void* ptr); 10821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 10921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Returns the lenght of |str|, excluding the terminating NUL-byte. */ 11021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthensize_t avb_strlen(const char* str) AVB_ATTR_WARN_UNUSED_RESULT; 11121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 11221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifdef __cplusplus 11321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen} 11421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif 11521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 11621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif /* AVB_SYSDEPS_H_ */ 117