Home | History | Annotate | Download | only in include
      1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  *
      5  * Host-side misc functions for verified boot.
      6  */
      7 
      8 #ifndef VBOOT_REFERENCE_HOST_MISC_H_
      9 #define VBOOT_REFERENCE_HOST_MISC_H_
     10 
     11 #include "utility.h"
     12 #include "vboot_struct.h"
     13 
     14 /* Copy up to dest_size-1 characters from src to dest, ensuring null
     15    termination (which strncpy() doesn't do).  Returns the destination
     16    string. */
     17 char* StrCopy(char* dest, const char* src, int dest_size);
     18 
     19 /* Read data from [filename].  Store the size of returned data in [size].
     20  *
     21  * Returns the data buffer, which the caller must Free(), or NULL if
     22  * error. */
     23 uint8_t* ReadFile(const char* filename, uint64_t* size);
     24 
     25 /* Read a string from a file.  Passed the destination, dest size, and
     26  * filename to read.
     27  *
     28  * Returns the destination, or NULL if error. */
     29 char* ReadFileString(char* dest, int size, const char* filename);
     30 
     31 /* Read an unsigned integer from a file and save into passed pointer.
     32  *
     33  * Returns 0 if success, -1 if error. */
     34 int ReadFileInt(const char* filename, unsigned* value);
     35 
     36 /* Check if a bit is set in a file which contains an integer.
     37  *
     38  * Returns 1 if the bit is set, 0 if clear, or -1 if error. */
     39 int ReadFileBit(const char* filename, int bitmask);
     40 
     41 /* Writes [size] bytes of [data] to [filename].
     42  *
     43  * Returns 0 if success, 1 if error. */
     44 int WriteFile(const char* filename, const void *data, uint64_t size);
     45 
     46 /**
     47  * Read data from a file into a newly allocated buffer.
     48  *
     49  * @param filename	Name of file to read from
     50  * @param data_ptr	On exit, pointer to newly allocated buffer with data
     51  *			will be stored here.  Caller must free() the buffer
     52  *			when done with it.
     53  * @param size_ptr	On exit, size of data will be stored here.
     54  * @return VB2_SUCCESS, or non-zero if error.
     55  */
     56 int vb2_read_file(const char *filename, uint8_t **data_ptr, uint32_t *size_ptr);
     57 
     58 /**
     59  * Write data to a file from a buffer.
     60  *
     61  * @param filename	Name of file to write to
     62  * @param buf		Buffer to write
     63  * @param size		Number of bytes of data to write
     64  * @return VB2_SUCCESS, or non-zero if error.
     65  */
     66 int vb2_write_file(const char *filename, const void *buf, uint32_t size);
     67 
     68 /**
     69  * Write a buffer which starts with a standard vb2_struct_common header.
     70  *
     71  * Determines the buffer size from the common header total size field.
     72  *
     73  * @param filename	Name of file to write to
     74  * @param buf		Buffer to write
     75  * @return VB2_SUCCESS, or non-zero if error.
     76  */
     77 int vb2_write_object(const char *filename, const void *buf);
     78 
     79 /**
     80  * Round up a size to a multiple of 32 bits (4 bytes).
     81  */
     82 static __inline const uint32_t roundup32(uint32_t v)
     83 {
     84 	return (v + 3) & ~3;
     85 }
     86 
     87 /**
     88  * Return the buffer size required to hold a description string.
     89  *
     90  * If the string is NULL or empty, the size is zero.  Otherwise, it is the
     91  * size of a buffer which can hold the string and its null terminator,
     92  * rounded up to the nerest multiple of 32 bits.
     93  *
     94  * @param desc		Description string
     95  * @return The buffer size in bytes.
     96  */
     97 uint32_t vb2_desc_size(const char *desc);
     98 
     99 #endif  /* VBOOT_REFERENCE_HOST_MISC_H_ */
    100