libnx
types.h
Go to the documentation of this file.
1 /**
2  * @file types.h
3  * @brief Various system types.
4  * @copyright libnx Authors
5  */
6 #pragma once
7 
8 #include <stdint.h>
9 #include <stdbool.h>
10 #include <stddef.h>
11 
12 /// The maximum value of a u64.
13 #define U64_MAX UINT64_MAX
14 
15 #ifndef SSIZE_MAX
16 #ifdef SIZE_MAX
17 #define SSIZE_MAX ((SIZE_MAX) >> 1)
18 #endif
19 #endif
20 
21 typedef uint8_t u8; ///< 8-bit unsigned integer.
22 typedef uint16_t u16; ///< 16-bit unsigned integer.
23 typedef uint32_t u32; ///< 32-bit unsigned integer.
24 typedef uint64_t u64; ///< 64-bit unsigned integer.
25 typedef __uint128_t u128; ///< 128-bit unsigned integer.
26 
27 typedef int8_t s8; ///< 8-bit signed integer.
28 typedef int16_t s16; ///< 16-bit signed integer.
29 typedef int32_t s32; ///< 32-bit signed integer.
30 typedef int64_t s64; ///< 64-bit signed integer.
31 typedef __int128_t s128; ///< 128-bit unsigned integer.
32 
33 typedef volatile u8 vu8; ///< 8-bit volatile unsigned integer.
34 typedef volatile u16 vu16; ///< 16-bit volatile unsigned integer.
35 typedef volatile u32 vu32; ///< 32-bit volatile unsigned integer.
36 typedef volatile u64 vu64; ///< 64-bit volatile unsigned integer.
37 typedef volatile u128 vu128; ///< 128-bit volatile unsigned integer.
38 
39 typedef volatile s8 vs8; ///< 8-bit volatile signed integer.
40 typedef volatile s16 vs16; ///< 16-bit volatile signed integer.
41 typedef volatile s32 vs32; ///< 32-bit volatile signed integer.
42 typedef volatile s64 vs64; ///< 64-bit volatile signed integer.
43 typedef volatile s128 vs128; ///< 128-bit volatile signed integer.
44 
45 typedef u32 Handle; ///< Kernel object handle.
46 typedef u32 Result; ///< Function error code result type.
47 typedef void (*ThreadFunc)(void *); ///< Thread entrypoint function.
48 typedef void (*VoidFn)(void); ///< Function without arguments nor return value.
49 
50 /// Creates a bitmask from a bit number.
51 #define BIT(n) (1U<<(n))
52 
53 /// Aligns a struct (and other types?) to m, making sure that the size of the struct is a multiple of m.
54 #define ALIGN(m) __attribute__((aligned(m)))
55 /// Packs a struct (and other types?) so it won't include padding bytes.
56 #define PACKED __attribute__((packed))
57 
58 #define NORETURN __attribute__((noreturn))
59 #define IGNORE_ARG(x) (void)(x)
60 
61 #ifndef LIBNX_NO_DEPRECATION
62 /// Flags a function as deprecated.
63 #define DEPRECATED __attribute__ ((deprecated))
64 #else
65 /// Flags a function as deprecated.
66 #define DEPRECATED
67 #endif
68 
69 #define INVALID_HANDLE ((Handle) 0)
volatile u64 vu64
64-bit volatile unsigned integer.
Definition: types.h:36
int8_t s8
8-bit signed integer.
Definition: types.h:27
volatile u32 vu32
32-bit volatile unsigned integer.
Definition: types.h:35
void(* ThreadFunc)(void *)
Thread entrypoint function.
Definition: types.h:47
volatile s64 vs64
64-bit volatile signed integer.
Definition: types.h:42
uint16_t u16
16-bit unsigned integer.
Definition: types.h:22
u32 Handle
Kernel object handle.
Definition: types.h:45
volatile u8 vu8
8-bit volatile unsigned integer.
Definition: types.h:33
u32 Result
Function error code result type.
Definition: types.h:46
volatile s32 vs32
32-bit volatile signed integer.
Definition: types.h:41
uint8_t u8
8-bit unsigned integer.
Definition: types.h:21
volatile u16 vu16
16-bit volatile unsigned integer.
Definition: types.h:34
uint64_t u64
64-bit unsigned integer.
Definition: types.h:24
uint32_t u32
32-bit unsigned integer.
Definition: types.h:23
volatile s128 vs128
128-bit volatile signed integer.
Definition: types.h:43
volatile s16 vs16
16-bit volatile signed integer.
Definition: types.h:40
int32_t s32
32-bit signed integer.
Definition: types.h:29
volatile s8 vs8
8-bit volatile signed integer.
Definition: types.h:39
__uint128_t u128
128-bit unsigned integer.
Definition: types.h:25
__int128_t s128
128-bit unsigned integer.
Definition: types.h:31
int64_t s64
64-bit signed integer.
Definition: types.h:30
void(* VoidFn)(void)
Function without arguments nor return value.
Definition: types.h:48
volatile u128 vu128
128-bit volatile unsigned integer.
Definition: types.h:37
int16_t s16
16-bit signed integer.
Definition: types.h:28