1
0
Fork 0

stdlib: Add Lth_ceilk and Lth_fractk

stdlib: Change memcpy calls to memmove calls
stdlib: Optimize Lth_PrintString with hacks
master
Marrub 2016-11-21 01:03:52 -05:00
parent 4b20d830c4
commit 89882c943f
2 changed files with 33 additions and 5 deletions

View File

@ -16,6 +16,7 @@
#define Lth_isidenti(c) \ #define Lth_isidenti(c) \
(isalnum(c) || c == '_' || c == '$' || c == '\'' || c > 0x80) (isalnum(c) || c == '_' || c == '$' || c == '\'' || c > 0x80)
#define Lth_integk(n) ((int_k_t)(n))
// Extern Functions ----------------------------------------------------------| // Extern Functions ----------------------------------------------------------|
@ -40,6 +41,10 @@ wchar_t *Lth_wcsdupstr(char const *s);
// mbs // mbs
size_t Lth_mbslen(char const *s); size_t Lth_mbslen(char const *s);
// accum
int Lth_ceilk(_Accum n);
_Accum Lth_fractk(_Accum n);
// Print // Print
void Lth_PrintString(char const *s); void Lth_PrintString(char const *s);

View File

@ -17,6 +17,7 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> #include <ctype.h>
#include "Lth_stdfix.h"
#define GenStrHash() \ #define GenStrHash() \
if(s == NULL) return 0; \ if(s == NULL) return 0; \
@ -50,7 +51,7 @@ char *Lth_strdup(char const *s)
{ {
size_t len = strlen(s); size_t len = strlen(s);
char *ret = malloc(len + 1); char *ret = malloc(len + 1);
memcpy(ret, s, len); memmove(ret, s, len);
ret[len] = '\0'; ret[len] = '\0';
return ret; return ret;
} }
@ -101,7 +102,7 @@ char *Lth_strealoc(char *p, char const *s)
{ {
size_t len = strlen(s); size_t len = strlen(s);
p = realloc(p, len + 1); p = realloc(p, len + 1);
memcpy(p, s, len); memmove(p, s, len);
p[len] = '\0'; p[len] = '\0';
return p; return p;
} }
@ -150,7 +151,7 @@ wchar_t *Lth_wcsdup(wchar_t const *s)
{ {
size_t len = wcslen(s); size_t len = wcslen(s);
wchar_t *ret = malloc(sizeof(wchar_t) * (len + 1)); wchar_t *ret = malloc(sizeof(wchar_t) * (len + 1));
wmemcpy(ret, s, len); wmemmove(ret, s, len);
ret[len] = '\0'; ret[len] = '\0';
return ret; return ret;
} }
@ -182,9 +183,32 @@ size_t Lth_mbslen(char const *s)
return ret; return ret;
s += next; s += next;
} }
return ret; return ret;
} }
//
// Lth_ceilk
//
int Lth_ceilk(_Accum n)
{
union { int_k_t i; _Accum a; } u = { .a = n };
if(u.i & 0xFFF1)
return u.i &= 0xFFFF0000, u.a + 1;
else
return (int)u.a;
}
//
// Lth_fractk
//
_Accum Lth_fractk(_Accum n)
{
union { int_k_t i; _Accum a; } u = { .a = n };
u.i &= 0xFFFF;
return u.a;
}
// //
// Lth_PrintString // Lth_PrintString
// //
@ -192,8 +216,7 @@ size_t Lth_mbslen(char const *s)
// //
void Lth_PrintString(char const *s) void Lth_PrintString(char const *s)
{ {
if(s == NULL) return; ACS_PrintGlobalCharArray((int)s, __GDCC__Sta);
for(char const *p = s; *p;) ACS_PrintChar(*p++);
} }
// //