string.c
changeset 4299 91f5d2bedcff
parent 4209 f0ecce3cb2b0
child 4300 c7e43c47a2b9
equal deleted inserted replaced
4298:b926a6eaaa70 4299:91f5d2bedcff
    60 }
    60 }
    61 
    61 
    62 void str_validate(char *str)
    62 void str_validate(char *str)
    63 {
    63 {
    64 	for (; *str != '\0'; str++)
    64 	for (; *str != '\0'; str++)
    65 		if (!IsValidAsciiChar(*str)) *str = '?';
    65 		if (!IsValidAsciiChar(*str, CS_ALPHANUMERAL)) *str = '?';
    66 }
    66 }
    67 
    67 
    68 void strtolower(char *str)
    68 void strtolower(char *str)
    69 {
    69 {
    70 	for (; *str != '\0'; str++) *str = tolower(*str);
    70 	for (; *str != '\0'; str++) *str = tolower(*str);
    71 }
    71 }
       
    72 
       
    73 /** Only allow valid ascii-function codes. Filter special codes like BELL and
       
    74  * so on [we need a special filter here later]
       
    75  * @param key character to be checked
       
    76  * @return true or false depending if the character is printable/valid or not */
       
    77 bool IsValidAsciiChar(byte key, CharSetFilter afilter)
       
    78 {
       
    79 	// XXX This filter stops certain crashes, but may be too restrictive.
       
    80 	bool firsttest = false;
       
    81 
       
    82 	switch (afilter) {
       
    83 		case CS_ALPHANUMERAL:
       
    84 			firsttest = (key >= ' ' && key < 127);
       
    85 			break;
       
    86 
       
    87 		case CS_NUMERAL://we are quite strict, here
       
    88 			return (key >= 48 && key <= 57);
       
    89 
       
    90 		case CS_ALPHA:
       
    91 		default:
       
    92 			firsttest = ((key >= 'A' && key <= 'Z') || (key >= 'a' && key <= 'z'));
       
    93 			break;
       
    94 	}
       
    95 
       
    96 	return (firsttest || (key >= 160 &&
       
    97 		key != 0xAA && key != 0xAC && key != 0xAD && key != 0xAF &&
       
    98 		key != 0xB5 && key != 0xB6 && key != 0xB7 && key != 0xB9));
       
    99 }