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
|
/* Copyright 2013 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef __UTIL_MISC_UTIL_H
#define __UTIL_MISC_UTIL_H
#include <stddef.h>
#include <stdint.h>
#define GENERIC_MAX(x, y) ((x) > (y) ? (x) : (y))
#define GENERIC_MIN(x, y) ((x) < (y) ? (x) : (y))
#ifndef MAX
#define MAX(a, b) \
({ \
__typeof__(a) temp_a = (a); \
__typeof__(b) temp_b = (b); \
\
GENERIC_MAX(temp_a, temp_b); \
})
#endif
#ifndef MIN
#define MIN(a, b) \
({ \
__typeof__(a) temp_a = (a); \
__typeof__(b) temp_b = (b); \
\
GENERIC_MIN(temp_a, temp_b); \
})
#endif
/**
* Write a buffer to the file.
*
* @param filename Target filename
* @param buf Buffer to write
* @param size Size of buffer in bytes
* @return non-zero if error
*/
int write_file(const char *filename, const char *buf, int size);
/**
* Read a file into a newly-allocated buffer.
*
* @param filename Source filename
* @param size Size of data in bytes will be stored here on success.
* @return A newly allocated buffer with the data, which must be freed with
* free() by the caller, or NULL if error.
*/
char *read_file(const char *filename, int *size);
/**
* Check if a string contains only printable characters.
*
* @param buf Null-terminated string to check
* @return non-zero if buf contains only printable characters; zero if not.
*/
int is_string_printable(const char *buf);
/**
* Get the versions of the command supported by the EC.
*
* @param cmd Command
* @param pmask Destination for version mask; will be set to 0 on
* error.
* @return 0 if success, <0 if error
*/
int ec_get_cmd_versions(int cmd, uint32_t *pmask);
/**
* Return non-zero if the EC supports the command and version
*
* @param cmd Command to check
* @param ver Version to check
* @return non-zero if command version supported; 0 if not.
*/
int ec_cmd_version_supported(int cmd, int ver);
/**
* Return 1 is the current kernel version is greater or equal to
* <major>.<minor>.<sublevel>
*/
int kernel_version_ge(int major, int minor, int sublevel);
/**
* Prints data in hexdump canonical format.
*
* @param data Buffer of data to print
* @param len Length of data to print
* @param offset_start Starting offset added to the printed offset.
* This only affects how the offset is printed, it does not affect
* what data is printed.
*/
void hexdump_canonical(const uint8_t *data, size_t len, uint32_t offset_start);
#endif
|