blob: f4c039dd2b361cb2e65e7ee4a7126fab42ea4c14 [file] [log] [blame]
/**
* @file unc_ctype.h
* The ctype function are only required to handle values 0-255 and EOF.
* A char is sign-extended when cast to an int.
* With some C libraries, these values cause a crash.
* These wrappers will properly handle all char values.
*
* @author Ben Gardner
* @license GPL v2+
*/
#ifndef UNC_CTYPE_H_INCLUDED
#define UNC_CTYPE_H_INCLUDED
#include <cctype>
/**
* Truncate anything except EOF (-1) to 0-255
*/
static inline int unc_fix_ctype(int ch)
{
return((ch == -1) ? -1 : (ch & 0xff));
}
static inline int unc_isspace(int ch)
{
return(isspace(unc_fix_ctype(ch)));
}
static inline int unc_isprint(int ch)
{
return(isprint(unc_fix_ctype(ch)));
}
static inline int unc_isalpha(int ch)
{
return(isalpha(unc_fix_ctype(ch)));
}
static inline int unc_isalnum(int ch)
{
return(isalnum(unc_fix_ctype(ch)));
}
static inline int unc_toupper(int ch)
{
return(toupper(unc_fix_ctype(ch)));
}
static inline int unc_tolower(int ch)
{
return(tolower(unc_fix_ctype(ch)));
}
static inline int unc_isxdigit(int ch)
{
return(isxdigit(unc_fix_ctype(ch)));
}
static inline int unc_isdigit(int ch)
{
return(isdigit(unc_fix_ctype(ch)));
}
static inline int unc_isupper(int ch)
{
return(isalpha(unc_fix_ctype(ch)) && (unc_toupper(unc_fix_ctype(ch)) == ch));
}
#endif /* UNC_CTYPE_H_INCLUDED */