Compare commits

...

3 Commits

Author SHA1 Message Date
qwqdanchun fb1211263d update 2023-05-28 23:50:38 +08:00
qwqdanchun 854f9deefc Update crt.h 2023-05-28 23:29:23 +08:00
qwqdanchun 1137031b28 update 2023-05-28 23:24:27 +08:00
3 changed files with 170 additions and 7 deletions

View File

@ -1 +1,3 @@
# Little-CRT
# Little-CRT
自用备份用于替换某些项目的CRT导入

90
crt.c
View File

@ -1,6 +1,4 @@
#include <stdint.h>
#include <windows.h>
#include "crt.h"
#pragma optimize("", off)
void* xmalloc(size_t size) {
@ -90,8 +88,8 @@ int xstrcmpi(const char* s1, const char* s2)
return lstrcmpiA(s1, s2);
}
int xstricmp(const char* s1, const char* s2)
{
int xstricmp(const char* s1, const char* s2)
{
return lstrcmpiA(s1, s2);
}
@ -362,4 +360,84 @@ int32_t xwprintf(const wchar_t* format, ...) {
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), string_buffer, string_length, NULL, NULL);
return string_length;
}
#pragma optimize("", on)
int xiswctype(wint_t c, wctype_t type)
{
WORD ret;
GetStringTypeW(CT_CTYPE1, (LPCWSTR)&c, 1, &ret);
if ((ret & type) != 0)
return 1;
return 0;
}
int xisspace(int c) {return ((c >= 0x09 && c <= 0x0D) || (c == 0x20));}
int xiswspace(wint_t c) {return xiswctype(c, _BLANK);}
int xisupper(int c) {return (c >= 'A' && c <= 'Z');}
int xiswupper(wint_t c) {return xiswctype(c, _UPPER);}
int xisalpha(int c) {return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');}
int xiswalpha(wint_t c) {return xiswctype(c, _ALPHA);}
int xisdigit(int c) {return (c >= '0' && c <= '9');}
int xiswdigit(wint_t c) {return xiswctype(c, _DIGIT);}
int xisxdigit(int c) {return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');}
int xiswxdigit(wint_t c) {return xiswctype(c, _HEX);}
int xisalnum(int c) {return xisalpha(c) || isdigit(c);}
int xiswalnum(wint_t c) {return xiswctype(c, _ALPHA|_DIGIT);}
int xisprint(int c) {return c >= ' ';}
int xiswprint(wint_t c) {return xiswctype(c, (wctype_t)(~_CONTROL));}
long xatol(const char *str)
{
while (xisspace(*str))
++str;
int cur = *str++;
int neg = cur;
if (cur == '-' || cur == '+')
cur = *str++;
long total = 0;
while (xisdigit(cur))
{
total = 10*total + (cur-'0');
cur = *str++;
}
if (neg == '-')
return -total;
else
return total;
}
int xatoi(const char *str)
{
return (int)xatol(str);
}
long xwtol(const wchar_t *str)
{
while (xiswspace(*str))
++str;
wint_t cur = *str++;
wint_t neg = cur;
if (cur == L'-' || cur == L'+')
cur = *str++;
long total = 0;
while (xiswdigit(cur))
{
total = 10*total + (cur-L'0');
cur = *str++;
}
if (neg == L'-')
return -total;
else
return total;
}
int xwtoi(const wchar_t *str)
{
return (int)xwtol(str);
}
#pragma optimize("", on)

83
crt.h Normal file
View File

@ -0,0 +1,83 @@
#ifndef Little_CRT
#define Little_CRT
#include <stdint.h>
#include <windows.h>
void* xmalloc(size_t size);
void* xrealloc(void* ptr, size_t size);
void xfree(void* ptr);
void* xmemcpy(void* dest, const void* src, size_t n);
void* xmemset(void* dst, int val, size_t size);
int xmemcmp(const void* str1, const void* str2, size_t n);
void* xmemmove(void* dst, const void* src, size_t count);
extern uint32_t rand_seed;
void xsrand(uint32_t seed);
uint32_t xrand(void);
int xabs(int n);
size_t xstrlen(const char* str);
int xstrcmpi(const char* s1, const char* s2);
int xstricmp(const char* s1, const char* s2);
int xstrcmp(const char* s1, const char* s2);
int xstrncmp(const char* s1, const char* s2, size_t n);
int xstrnicmp(const char* s1, const char* s2, size_t n);
char* xstrcpy(char* dest, const char* src);
char* xstrdup(const char* src);
char* xstrncpy(char* dest, const char* src, size_t n);
const char* xstrchr(const char* str, int ch);
const char* xstrrchr(const char* str, int ch);
char* xstrcat(char* dst, const char* src);
const char* xstrstr(const char* str, const char* substr);
size_t xwcslen(const wchar_t* str);
wchar_t* xwcscpy(wchar_t* dest, const wchar_t* src);
int xwcsicmp(const wchar_t* s1, const wchar_t* s2);
int xwcscmp(const wchar_t* s1, const wchar_t* s2);
int xwcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n);
int xwcsnicmp(const wchar_t* s1, const wchar_t* s2, size_t n);
wchar_t* xwcsdup(const wchar_t* src);
wchar_t* xwcsncpy(wchar_t* dest, const wchar_t* src, size_t n);
const wchar_t* xwcschr(const wchar_t* str, wchar_t ch);
const wchar_t* xwcsrchr(const wchar_t* str, wchar_t ch);
wchar_t* xwcscat(wchar_t* dst, const wchar_t* src);
const wchar_t* xwcsstr(const wchar_t* str, const wchar_t* substr);
char* xstrupr(char* s);
wchar_t* xwcsupr(wchar_t* s);
char* xstrlwr(char* s);
wchar_t* xwcslwr(wchar_t* s);
int xtoupper(int c);
wint_t xtowupper(wint_t c);
int xtolower(int c);
wint_t xtowlower(wint_t c);
int32_t xputs(const char* str);
int32_t xprintf(const char* format, ...);
int32_t xwprintf(const wchar_t* format, ...);
int xiswctype(wint_t c, wctype_t type);
int xisspace(int c);
int xiswspace(wint_t c);
int xisupper(int c);
int xiswupper(wint_t c);
int xisalpha(int c);
int xiswalpha(wint_t c);
int xisdigit(int c);
int xiswdigit(wint_t c);
int xisxdigit(int c);
int xiswxdigit(wint_t c);
int xisalnum(int c);
int xiswalnum(wint_t c);
int xisprint(int c);
int xiswprint(wint_t c);
long xatol(const char* str);
int xatoi(const char* str);
long xwtol(const wchar_t* str);
int xwtoi(const wchar_t* str);
#endif