1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/* Miscellaneous basic definitions
* Copyright (C) 2010 Chris Hall (GMCH), Highwayman
*
* This file is part of GNU Zebra.
*
* GNU Zebra is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* GNU Zebra is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Zebra; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef _ZEBRA_MISC_H
#define _ZEBRA_MISC_H
#include "zconfig.h"
/* Stuff which we generally expect to have */
#include <limits.h>
#include <string.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include "zassert.h"
/* Bit number to bit mask */
#define BIT(b) (1 << b)
/* Just in case there are compiler issues */
#define Inline static inline
/* For things which have to be made extern -- typically because they are
* used by an inline function -- but are not for public consumption.
*/
#define Private extern
/* For use in switch/case */
#define fall_through
/* Other names of true/false */
enum on_off
{
on = true,
off = false
} ;
typedef enum on_off on_off_b ;
/* Whether to add or not on lookup. */
enum add
{
add = true,
no_add = false
} ;
typedef enum add add_b ;
/* Used in object "reset" functions (destructors) */
enum free_keep
{
free_it = true,
keep_it = false
} ;
typedef enum free_keep free_keep_b ;
/* We really want to be able to assume that an int is at least 32 bits
* and that a long is at least 64 bits !
*/
CONFIRM(UINT_MAX >= 0xFFFFFFFF) ;
CONFIRM(ULONG_MAX >= 0xFFFFFFFFFFFFFFFF) ;
/* Some useful shorthand */
typedef unsigned char byte ;
typedef unsigned char uchar ;
typedef unsigned int uint ;
typedef unsigned int usize ;
typedef unsigned int ulen ;
typedef unsigned long ulong ;
/* cvp == const void* -- ptr to constant void
* cvp* == void * const* -- ptr to ptr to constant void
* const cvp* == void const* const* -- ptr to constant ptr to constant void
*/
typedef const void* cvp ;
#endif /* _ZEBRA_MISC_H */
|