#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <stumpless/facility.h>
#include <stumpless/priority.h>
#include <stumpless/severity.h>
#include "private/memory.h"
#include "private/entry.h"
#include "private/validate.h"
#include "private/config.h"
#include "private/strhelper.h"
#include "private/error.h"
#include "private/config/wrapper/locale.h"
int
stumpless_prival_from_string( const char *string ) {
int prival;
int severity;
int facility;
char *param;
char *period;
char *sec_period;
size_t len;
size_t slen;
VALIDATE_ARG_NOT_NULL_INT_RETURN( string );
if( unlikely( !string[0] ) ) {
raise_argument_empty( L10N_NULL_ARG_ERROR_MESSAGE( "string" ) );
return -1;
}
slen = strlen( string );
if( isdigit( string[0] ) ) {
prival = atoi( string );
if( prival <= 191 && slen < 4 ) {
return prival;
}
}
period = strchr( string, '.' );
if( !period ) {
raise_invalid_param( );
return -1;
}
sec_period = strchr( period + 1, '.' );
if( sec_period != NULL ) {
raise_invalid_param( );
return -1;
}
len = period - string;
param = copy_cstring_length( string, len );
if( !param ) {
return -1;
}
facility = stumpless_get_facility_enum( param );
free_mem( param );
if( facility < 0 ) {
raise_invalid_param( );
return -1;
}
len++;
len = slen - len;
param = copy_cstring_length( ++period, len );
if( !param ) {
return -1;
}
severity = stumpless_get_severity_enum( param );
free_mem( param );
if( severity < 0 ) {
raise_invalid_param( );
return -1;
}
return get_prival( facility, severity );
}