#include <stddef.h>
#include <string.h>
#include <stumpless/severity.h>
#include "private/severity.h"
#include "private/strhelper.h"
#include "private/memory.h"
static char *severity_enum_to_string[] = {
STUMPLESS_FOREACH_SEVERITY( GENERATE_STRING )
};
const char *
stumpless_get_severity_string( enum stumpless_severity severity ) {
if ( !severity_is_invalid( severity ) ) {
return severity_enum_to_string[severity];
}
return "NO_SUCH_SEVERITY";
}
enum stumpless_severity stumpless_get_severity_enum(const char *severity_string) {
return stumpless_get_severity_enum_from_buffer(severity_string, strlen(severity_string));
}
enum stumpless_severity stumpless_get_severity_enum_from_buffer(const char *severity_buffer, size_t severity_buffer_length) {
size_t severity_bound;
size_t i;
char *severity_name;
const int str_offset = 19; size_t buf_length;
severity_bound = sizeof( severity_enum_to_string ) /
sizeof( severity_enum_to_string[0] );
severity_name = copy_cstring_with_length( severity_buffer, &buf_length );
if( !severity_name ) {
return -1;
}
to_upper_case( severity_name );
for( i = 0; i < severity_bound; i++ ) {
if( strcmp( severity_name, severity_enum_to_string[i] + str_offset ) == 0 ) {
free_mem( severity_name );
return i;
}
}
if( strcmp( severity_name, "PANIC" ) == 0 ) {
free_mem( severity_name );
return STUMPLESS_SEVERITY_EMERG_VALUE;
}
if( strcmp( severity_name, "ERROR" ) == 0 ) {
free_mem( severity_name );
return STUMPLESS_SEVERITY_ERR_VALUE;
}
if( strcmp( severity_name, "WARN" ) == 0 ) {
free_mem( severity_name );
return STUMPLESS_SEVERITY_WARNING_VALUE;
}
free_mem( severity_name );
return -1;
}
int
get_severity( int prival ) {
return prival & 0x7;
}
int
severity_is_invalid( int severity ) {
return severity < 0 || severity > 7;
}