mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-18 15:32:56 +00:00
6fd478b6ce
These instances were detected by searching for files that include AK/Format.h, but don't match the regex: \\b(CheckedFormatString|critical_dmesgln|dbgln|dbgln_if|dmesgln|FormatBu ilder|__FormatIfSupported|FormatIfSupported|FormatParser|FormatString|Fo rmattable|Formatter|__format_value|HasFormatter|max_format_arguments|out |outln|set_debug_enabled|StandardFormatter|TypeErasedFormatParams|TypeEr asedParameter|VariadicFormatParams|v_critical_dmesgln|vdbgln|vdmesgln|vf ormat|vout|warn|warnln|warnln_if)\\b (Without the linebreaks.) This regex is pessimistic, so there might be more files that don't actually use any formatting functions. Observe that this revealed that Userland/Libraries/LibC/signal.cpp is missing an include. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
214 lines
3.4 KiB
C++
214 lines
3.4 KiB
C++
/*
|
|
* Copyright (c) 2021, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <wctype.h>
|
|
|
|
enum {
|
|
WCTYPE_INVALID = 0,
|
|
WCTYPE_ALNUM,
|
|
WCTYPE_ALPHA,
|
|
WCTYPE_BLANK,
|
|
WCTYPE_CNTRL,
|
|
WCTYPE_DIGIT,
|
|
WCTYPE_GRAPH,
|
|
WCTYPE_LOWER,
|
|
WCTYPE_PRINT,
|
|
WCTYPE_PUNCT,
|
|
WCTYPE_SPACE,
|
|
WCTYPE_UPPER,
|
|
WCTYPE_XDIGIT,
|
|
};
|
|
|
|
enum {
|
|
WCTRANS_INVALID = 0,
|
|
WCTRANS_TOLOWER,
|
|
WCTRANS_TOUPPER,
|
|
};
|
|
|
|
extern "C" {
|
|
|
|
int iswalnum(wint_t wc)
|
|
{
|
|
return __inline_isalnum(wc);
|
|
}
|
|
|
|
int iswalpha(wint_t wc)
|
|
{
|
|
return __inline_isalpha(wc);
|
|
}
|
|
|
|
int iswcntrl(wint_t wc)
|
|
{
|
|
return __inline_iscntrl(wc);
|
|
}
|
|
|
|
int iswdigit(wint_t wc)
|
|
{
|
|
return __inline_isdigit(wc);
|
|
}
|
|
|
|
int iswxdigit(wint_t wc)
|
|
{
|
|
return __inline_isxdigit(wc);
|
|
}
|
|
|
|
int iswspace(wint_t wc)
|
|
{
|
|
return __inline_isspace(wc);
|
|
}
|
|
|
|
int iswpunct(wint_t wc)
|
|
{
|
|
return __inline_ispunct(wc);
|
|
}
|
|
|
|
int iswprint(wint_t wc)
|
|
{
|
|
return __inline_isprint(wc);
|
|
}
|
|
|
|
int iswgraph(wint_t wc)
|
|
{
|
|
return __inline_isgraph(wc);
|
|
}
|
|
|
|
int iswlower(wint_t wc)
|
|
{
|
|
return __inline_islower(wc);
|
|
}
|
|
|
|
int iswupper(wint_t wc)
|
|
{
|
|
return __inline_isupper(wc);
|
|
}
|
|
|
|
int iswblank(wint_t wc)
|
|
{
|
|
return __inline_isblank(wc);
|
|
}
|
|
|
|
int iswctype(wint_t wc, wctype_t charclass)
|
|
{
|
|
switch (charclass) {
|
|
case WCTYPE_ALNUM:
|
|
return iswalnum(wc);
|
|
|
|
case WCTYPE_ALPHA:
|
|
return iswalpha(wc);
|
|
|
|
case WCTYPE_BLANK:
|
|
return iswblank(wc);
|
|
|
|
case WCTYPE_CNTRL:
|
|
return iswcntrl(wc);
|
|
|
|
case WCTYPE_DIGIT:
|
|
return iswdigit(wc);
|
|
|
|
case WCTYPE_GRAPH:
|
|
return iswgraph(wc);
|
|
|
|
case WCTYPE_LOWER:
|
|
return iswlower(wc);
|
|
|
|
case WCTYPE_PRINT:
|
|
return iswprint(wc);
|
|
|
|
case WCTYPE_PUNCT:
|
|
return iswpunct(wc);
|
|
|
|
case WCTYPE_SPACE:
|
|
return iswspace(wc);
|
|
|
|
case WCTYPE_UPPER:
|
|
return iswupper(wc);
|
|
|
|
case WCTYPE_XDIGIT:
|
|
return iswxdigit(wc);
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
wctype_t wctype(char const* property)
|
|
{
|
|
if (strcmp(property, "alnum") == 0)
|
|
return WCTYPE_ALNUM;
|
|
|
|
if (strcmp(property, "alpha") == 0)
|
|
return WCTYPE_ALPHA;
|
|
|
|
if (strcmp(property, "blank") == 0)
|
|
return WCTYPE_BLANK;
|
|
|
|
if (strcmp(property, "cntrl") == 0)
|
|
return WCTYPE_CNTRL;
|
|
|
|
if (strcmp(property, "digit") == 0)
|
|
return WCTYPE_DIGIT;
|
|
|
|
if (strcmp(property, "graph") == 0)
|
|
return WCTYPE_GRAPH;
|
|
|
|
if (strcmp(property, "lower") == 0)
|
|
return WCTYPE_LOWER;
|
|
|
|
if (strcmp(property, "print") == 0)
|
|
return WCTYPE_PRINT;
|
|
|
|
if (strcmp(property, "punct") == 0)
|
|
return WCTYPE_PUNCT;
|
|
|
|
if (strcmp(property, "space") == 0)
|
|
return WCTYPE_SPACE;
|
|
|
|
if (strcmp(property, "upper") == 0)
|
|
return WCTYPE_UPPER;
|
|
|
|
if (strcmp(property, "xdigit") == 0)
|
|
return WCTYPE_XDIGIT;
|
|
|
|
return WCTYPE_INVALID;
|
|
}
|
|
|
|
wint_t towlower(wint_t wc)
|
|
{
|
|
return __inline_tolower(wc);
|
|
}
|
|
|
|
wint_t towupper(wint_t wc)
|
|
{
|
|
return __inline_toupper(wc);
|
|
}
|
|
|
|
wint_t towctrans(wint_t wc, wctrans_t desc)
|
|
{
|
|
switch (desc) {
|
|
case WCTRANS_TOLOWER:
|
|
return towlower(wc);
|
|
|
|
case WCTRANS_TOUPPER:
|
|
return towupper(wc);
|
|
|
|
default:
|
|
return wc;
|
|
}
|
|
}
|
|
|
|
wctrans_t wctrans(char const* charclass)
|
|
{
|
|
if (strcmp(charclass, "tolower") == 0)
|
|
return WCTRANS_TOLOWER;
|
|
|
|
if (strcmp(charclass, "toupper") == 0)
|
|
return WCTRANS_TOUPPER;
|
|
|
|
return WCTRANS_INVALID;
|
|
}
|
|
}
|