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))
52dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich#define AVB_ATTR_SENTINEL __attribute__((__sentinel__))
5321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
54dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich/* Size in bytes used for alignment. */
55dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich#ifdef __LP64__
56dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich#define AVB_ALIGNMENT_SIZE 8
57dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich#else
58dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich#define AVB_ALIGNMENT_SIZE 4
59dc883a144a71f4d05cfa8f6f80d55390a0bca3e9Dzmitry Yatsushkevich#endif
6021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
6121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Compare |n| bytes in |src1| and |src2|.
6221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
6321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Returns an integer less than, equal to, or greater than zero if the
6421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * first |n| bytes of |src1| is found, respectively, to be less than,
6521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * to match, or be greater than the first |n| bytes of |src2|. */
664b6a634e48353da1e119ebe0287299f7b919d778David Zeuthenint avb_memcmp(const void* src1,
674b6a634e48353da1e119ebe0287299f7b919d778David Zeuthen               const void* src2,
6821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen               size_t n) AVB_ATTR_WARN_UNUSED_RESULT;
6921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
7021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Compare two strings.
7121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
7221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Return an integer less than, equal to, or greater than zero if |s1|
7321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * is found, respectively, to be less than, to match, or be greater
7421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * than |s2|.
7521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */
7621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenint avb_strcmp(const char* s1, const char* s2);
7721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
7821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Copy |n| bytes from |src| to |dest|. */
7921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid* avb_memcpy(void* dest, const void* src, size_t n);
8021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
8121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Set |n| bytes starting at |s| to |c|.  Returns |dest|. */
8221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid* avb_memset(void* dest, const int c, size_t n);
8321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
8421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Prints out a message. The string passed must be a NUL-terminated
8521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * UTF-8 string.
8621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */
8721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_print(const char* message);
8821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
8921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Prints out a vector of strings. Each argument must point to a
9021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * NUL-terminated UTF-8 string and NULL should be the last argument.
9121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */
9221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_printv(const char* message, ...) AVB_ATTR_SENTINEL;
9321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
9421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Aborts the program or reboots the device. */
9521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_abort(void) AVB_ATTR_NO_RETURN;
9621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
9721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Allocates |size| bytes. Returns NULL if no memory is available,
9821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * otherwise a pointer to the allocated memory.
9921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
10021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * The memory is not initialized.
10121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
10221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * The pointer returned is guaranteed to be word-aligned.
10321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
10421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * The memory should be freed with avb_free() when you are done with it.
10521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */
10621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid* avb_malloc_(size_t size) AVB_ATTR_WARN_UNUSED_RESULT;
10721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
10821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Frees memory previously allocated with avb_malloc(). */
10921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_free(void* ptr);
11021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
11121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Returns the lenght of |str|, excluding the terminating NUL-byte. */
11221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthensize_t avb_strlen(const char* str) AVB_ATTR_WARN_UNUSED_RESULT;
11321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
114061e33b39e2790ffda58ef8e462520199bf0570bLonnie Liu/* Divide the |dividend| by 10 and saves back to the pointer. Return the
115061e33b39e2790ffda58ef8e462520199bf0570bLonnie Liu * remainder. */
116061e33b39e2790ffda58ef8e462520199bf0570bLonnie Liuuint32_t avb_div_by_10(uint64_t* dividend);
117061e33b39e2790ffda58ef8e462520199bf0570bLonnie Liu
11821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifdef __cplusplus
11921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen}
12021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif
12121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
12221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif /* AVB_SYSDEPS_H_ */
123