/* 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 #include #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 * .. */ 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