| /** | 
 |  * Utility functions to assist in generating pseudo-random CPER sections. | 
 |  * | 
 |  * Author: Lawrence.Tang@arm.com | 
 |  **/ | 
 | #include <stdlib.h> | 
 | #include <time.h> | 
 | #include <libcper/BaseTypes.h> | 
 | #include <libcper/generator/gen-utils.h> | 
 |  | 
 | //Generates a random section of the given byte size, saving the result to the given location. | 
 | //Returns the length of the section as passed in. | 
 | size_t generate_random_section(void **location, size_t size) | 
 | { | 
 | 	*location = generate_random_bytes(size); | 
 | 	return size; | 
 | } | 
 |  | 
 | //Generates a random byte allocation of the given size. | 
 | UINT8 *generate_random_bytes(size_t size) | 
 | { | 
 | 	UINT8 *bytes = malloc(size); | 
 | 	for (size_t i = 0; i < size; i++) { | 
 | 		bytes[i] = rand(); | 
 | 	} | 
 | 	return bytes; | 
 | } | 
 |  | 
 | //Creates a valid common CPER error section, given the start of the error section. | 
 | //Clears reserved bits. | 
 | void create_valid_error_section(UINT8 *start) | 
 | { | 
 | 	//Fix reserved bits. | 
 | 	UINT64 *error_section = (UINT64 *)start; | 
 | 	*error_section &= ~0xFF;    //Reserved bits 0-7. | 
 | 	*error_section &= 0x7FFFFF; //Reserved bits 23-63 | 
 |  | 
 | 	//Ensure error type has a valid value. | 
 | 	*(start + 1) = | 
 | 		CPER_ERROR_TYPES_KEYS[rand() % (sizeof(CPER_ERROR_TYPES_KEYS) / | 
 | 						sizeof(int))]; | 
 | } | 
 |  | 
 | //Initializes the random seed for rand() using the current time. | 
 | void init_random() | 
 | { | 
 | 	srand((unsigned int)time(NULL)); | 
 | } |