Fix small char s/u issue

This commit is contained in:
Dave Davenport 2015-12-02 17:46:17 +01:00
parent a21f8dd179
commit 91e0f6b555
1 changed files with 16 additions and 20 deletions

View File

@ -276,59 +276,55 @@ int find_arg_uint ( const char * const key, unsigned int *val )
char helper_parse_char ( const char *arg ) char helper_parse_char ( const char *arg )
{ {
char retv = 0x80;
int len = strlen ( arg ); int len = strlen ( arg );
// If the length is 1, it is not escaped. // If the length is 1, it is not escaped.
if ( len == 1 ) { if ( len == 1 ) {
retv = arg[0]; return arg[0];
} }
// If the length is 2 and the first character is '\', we unescape it. // If the length is 2 and the first character is '\', we unescape it.
else if ( len == 2 && arg[0] == '\\' ) { if ( len == 2 && arg[0] == '\\' ) {
// New line // New line
if ( arg[1] == 'n' ) { if ( arg[1] == 'n' ) {
retv = '\n'; return '\n';
} }
// Bell // Bell
else if ( arg[1] == 'a' ) { else if ( arg[1] == 'a' ) {
retv = '\a'; return '\a';
} }
// Backspace // Backspace
else if ( arg[1] == 'b' ) { else if ( arg[1] == 'b' ) {
retv = '\b'; return '\b';
} }
// Tab // Tab
else if ( arg[1] == 't' ) { else if ( arg[1] == 't' ) {
retv = '\t'; return '\t';
} }
// Vertical tab // Vertical tab
else if ( arg[1] == 'v' ) { else if ( arg[1] == 'v' ) {
retv = '\v'; return '\v';
} }
// Form feed // Form feed
else if ( arg[1] == 'f' ) { else if ( arg[1] == 'f' ) {
retv = '\f'; return '\f';
} }
// Carriage return // Carriage return
else if ( arg[1] == 'r' ) { else if ( arg[1] == 'r' ) {
retv = '\r'; return '\r';
} }
// Forward slash // Forward slash
else if ( arg[1] == '\\' ) { else if ( arg[1] == '\\' ) {
retv = '\\'; return '\\';
} }
else if ( arg[1] == '0' ) { else if ( arg[1] == '0' ) {
retv = '\0'; return '\0';
} }
} }
else if ( len > 2 && arg[0] == '\\' && arg[1] == 'x' ) { if ( len > 2 && arg[0] == '\\' && arg[1] == 'x' ) {
retv = (char) strtol ( &arg[2], NULL, 16 ); return (char) strtol ( &arg[2], NULL, 16 );
} }
if ( (retv&0x80) != 0 ) { fprintf ( stderr, "Failed to parse character string: \"%s\"\n", arg );
fprintf ( stderr, "Failed to parse character string: \"%s\"\n", arg ); // for now default to newline.
// for now default to newline. return '\n';
retv = '\n';
}
return retv;
} }
int find_arg_char ( const char * const key, char *val ) int find_arg_char ( const char * const key, char *val )