| /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| * | |
| * Host-side misc functions for verified boot. | |
| */ | |
| #ifndef VBOOT_REFERENCE_HOST_MISC_H_ | |
| #define VBOOT_REFERENCE_HOST_MISC_H_ | |
| #include "utility.h" | |
| #include "vboot_struct.h" | |
| /* Copy up to dest_size-1 characters from src to dest, ensuring null | |
| termination (which strncpy() doesn't do). Returns the destination | |
| string. */ | |
| char* StrCopy(char* dest, const char* src, int dest_size); | |
| /* Read data from [filename]. Store the size of returned data in [size]. | |
| * | |
| * Returns the data buffer, which the caller must Free(), or NULL if | |
| * error. */ | |
| uint8_t* ReadFile(const char* filename, uint64_t* size); | |
| /* Read a string from a file. Passed the destination, dest size, and | |
| * filename to read. | |
| * | |
| * Returns the destination, or NULL if error. */ | |
| char* ReadFileString(char* dest, int size, const char* filename); | |
| /* Read an unsigned integer from a file and save into passed pointer. | |
| * | |
| * Returns 0 if success, -1 if error. */ | |
| int ReadFileInt(const char* filename, unsigned* value); | |
| /* Check if a bit is set in a file which contains an integer. | |
| * | |
| * Returns 1 if the bit is set, 0 if clear, or -1 if error. */ | |
| int ReadFileBit(const char* filename, int bitmask); | |
| /* Writes [size] bytes of [data] to [filename]. | |
| * | |
| * Returns 0 if success, 1 if error. */ | |
| int WriteFile(const char* filename, const void *data, uint64_t size); | |
| /** | |
| * Read data from a file into a newly allocated buffer. | |
| * | |
| * @param filename Name of file to read from | |
| * @param data_ptr On exit, pointer to newly allocated buffer with data | |
| * will be stored here. Caller must free() the buffer | |
| * when done with it. | |
| * @param size_ptr On exit, size of data will be stored here. | |
| * @return VB2_SUCCESS, or non-zero if error. | |
| */ | |
| int vb2_read_file(const char *filename, uint8_t **data_ptr, uint32_t *size_ptr); | |
| /** | |
| * Write data to a file from a buffer. | |
| * | |
| * @param filename Name of file to write to | |
| * @param buf Buffer to write | |
| * @param size Number of bytes of data to write | |
| * @return VB2_SUCCESS, or non-zero if error. | |
| */ | |
| int vb2_write_file(const char *filename, const void *buf, uint32_t size); | |
| /** | |
| * Write a buffer which starts with a standard vb21_struct_common header. | |
| * | |
| * Determines the buffer size from the common header total size field. | |
| * | |
| * @param filename Name of file to write to | |
| * @param buf Buffer to write | |
| * @return VB2_SUCCESS, or non-zero if error. | |
| */ | |
| int vb21_write_object(const char *filename, const void *buf); | |
| /** | |
| * Round up a size to a multiple of 32 bits (4 bytes). | |
| */ | |
| static __inline const uint32_t roundup32(uint32_t v) | |
| { | |
| return (v + 3) & ~3; | |
| } | |
| /** | |
| * Return the buffer size required to hold a description string. | |
| * | |
| * If the string is NULL or empty, the size is zero. Otherwise, it is the | |
| * size of a buffer which can hold the string and its null terminator, | |
| * rounded up to the nerest multiple of 32 bits. | |
| * | |
| * @param desc Description string | |
| * @return The buffer size in bytes. | |
| */ | |
| uint32_t vb2_desc_size(const char *desc); | |
| #endif /* VBOOT_REFERENCE_HOST_MISC_H_ */ |