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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/**************************************************************************
*
* Copyright 2010 VMware, Inc.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
/*
* Miscellaneous OS services.
*/
#ifndef _OS_MISC_H_
#define _OS_MISC_H_
#include <stdint.h>
#include <stdbool.h>
#include "util/detect.h"
#if DETECT_OS_POSIX
# include <signal.h> /* for kill() */
# include <unistd.h> /* getpid() */
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* Trap into the debugger.
*/
#if (DETECT_ARCH_X86 || DETECT_ARCH_X86_64) && DETECT_CC_GCC
# define os_break() __asm("int3")
#elif DETECT_CC_MSVC
# define os_break() __debugbreak()
#elif DETECT_OS_POSIX
# define os_break() kill(getpid(), SIGTRAP)
#else
# define os_break() abort()
#endif
/*
* Abort the program.
*/
#if MESA_DEBUG
# define os_abort() do { os_break(); abort(); } while(0)
#else
# define os_abort() abort()
#endif
/*
* Output a message. Message should preferably end in a newline.
*/
void
os_log_message(const char *message);
/*
* Get an option. Should return NULL if specified option is not set.
* It has the same disadvantage as getenv, see
* https://wiki.sei.cmu.edu/confluence/display/c/ENV34-C.+Do+not+store+pointers+returned+by+certain+functions
*/
const char *
os_get_option(const char *name);
/*
* Equivalent to os_get_option except the return value need to be `free()`
* os_get_option is not safe when the returned value is not immediately used.
* E.g.
* 1. when multiple consecutive calls to os_get_option are performed before using the returned values
* 2. when the value returned by os_get_option is assigned to a struct member
*/
char *
os_get_option_dup(const char *name);
/*
* Get an option. Should return NULL if specified option is not set.
* Same as `os_get_option()` but uses `secure_getenv()` instead of `getenv()`
*/
const char *
os_get_option_secure(const char *name);
/*
* Equivalent to os_get_option_secure except the return value need to be `free()`
* os_get_option_secure is not safe when the returned value is not immediately used.
* E.g.
* 1. when multiple consecutive calls to os_get_option_secure are performed before using the returned values
* 2. when the value returned by os_get_option_secure is assigned to a struct member
*/
char *
os_get_option_secure_dup(const char *name);
/*
* Get an option. Should return NULL if specified option is not set.
* It's will save the option into hash table for the first time, and
* for latter calling, it's will return the value comes from hash table
* directly, and the returned value will always be valid before program exit
* The disadvantage is that setenv, unsetenv, putenv won't take effect
* after this function is called
*/
const char *
os_get_option_cached(const char *name);
/*
* Get the total amount of physical memory available on the system.
*/
bool
os_get_total_physical_memory(uint64_t *size);
/*
* Amount of physical memory available to a process
*/
bool
os_get_available_system_memory(uint64_t *size);
/*
* Size of a page
*/
bool
os_get_page_size(uint64_t *size);
#ifdef __cplusplus
}
#endif
#endif /* _OS_MISC_H_ */
|