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