stdlib: Add Lth_fpeekc, Lth_strealoc, et al.
parent
6834efad4f
commit
ab547ad527
|
@ -13,6 +13,7 @@
|
|||
#ifndef lithos3__Lth_stdlib_h
|
||||
#define lithos3__Lth_stdlib_h
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define Lth_isidenti(ch) \
|
||||
|
@ -24,16 +25,23 @@
|
|||
|
||||
// Extern Functions ----------------------------------------------------------|
|
||||
|
||||
// file
|
||||
int Lth_fpeekc(FILE *fp);
|
||||
|
||||
// str
|
||||
char *Lth_strdup(char const *s);
|
||||
char *Lth_strdup_str(__str s);
|
||||
__str Lth_strentdup(char const *s);
|
||||
__str Lth_strlocal(__str s);
|
||||
char *Lth_strealoc(char *p, char const *s);
|
||||
char *Lth_strealoc_str(char *p, __str s);
|
||||
bool Lth_strcontains(char const *s, char ch);
|
||||
|
||||
// Print
|
||||
void Lth_PrintString(char const *s);
|
||||
|
||||
// Hash
|
||||
size_t Lth_Hash_char(char const *s);
|
||||
size_t Lth_Hash_str(__str s);
|
||||
|
||||
#endif//lithos3__Lth_stdlib_h
|
||||
|
|
|
@ -12,12 +12,24 @@
|
|||
|
||||
#include "Lth.h"
|
||||
|
||||
#include <GDCC.h> // OH GOD
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
// Extern Functions ----------------------------------------------------------|
|
||||
|
||||
//
|
||||
// Lth_fpeekc
|
||||
//
|
||||
int Lth_fpeekc(FILE *fp)
|
||||
{
|
||||
int ret = fgetc(fp);
|
||||
ungetc(ret, fp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
//
|
||||
// Lth_strdup
|
||||
//
|
||||
|
@ -25,11 +37,10 @@
|
|||
//
|
||||
char *Lth_strdup(char const *s)
|
||||
{
|
||||
Lth_assert(s != NULL);
|
||||
size_t len = strlen(s);
|
||||
char *ret = calloc(len + 1, 1);
|
||||
Lth_assert(ret != NULL);
|
||||
char *ret = malloc(len + 1);
|
||||
memcpy(ret, s, len);
|
||||
ret[len] = '\0';
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -40,11 +51,10 @@ char *Lth_strdup(char const *s)
|
|||
//
|
||||
char *Lth_strdup_str(__str s)
|
||||
{
|
||||
Lth_assert(s != NULL);
|
||||
size_t len = ACS_StrLen(s);
|
||||
char *ret = calloc(len + 1, 1);
|
||||
Lth_assert(ret != NULL);
|
||||
for(size_t i = 0; i < len; i++) ret[i] = s[i];
|
||||
char *ret = malloc(len + 1);
|
||||
ACS_StrArsCpyToGlobalCharRange((int)ret, __GDCC__Sta, 0, len, s);
|
||||
ret[len] = '\0';
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -55,7 +65,6 @@ char *Lth_strdup_str(__str s)
|
|||
//
|
||||
__str Lth_strentdup(char const *s)
|
||||
{
|
||||
Lth_assert(s != NULL);
|
||||
size_t len = strlen(s);
|
||||
ACS_BeginPrint();
|
||||
Lth_PrintString(s);
|
||||
|
@ -72,6 +81,41 @@ __str Lth_strlocal(__str s)
|
|||
return ACS_EndStrParam();
|
||||
}
|
||||
|
||||
//
|
||||
// Lth_strealoc
|
||||
//
|
||||
// Reallocates a string and replaces its contents.
|
||||
//
|
||||
char *Lth_strealoc(char *p, char const *s)
|
||||
{
|
||||
size_t len = strlen(s);
|
||||
p = realloc(p, len + 1);
|
||||
memcpy(p, s, len);
|
||||
p[len] = '\0';
|
||||
return p;
|
||||
}
|
||||
|
||||
//
|
||||
// Lth_strealoc_str
|
||||
//
|
||||
char *Lth_strealoc_str(char *p, __str s)
|
||||
{
|
||||
size_t len = ACS_StrLen(s);
|
||||
p = realloc(p, len + 1);
|
||||
ACS_StrArsCpyToGlobalCharRange((int)p, __GDCC__Sta, 0, len, s);
|
||||
p[len] = '\0';
|
||||
return p;
|
||||
}
|
||||
|
||||
//
|
||||
// Lth_strcontains
|
||||
//
|
||||
bool Lth_strcontains(char const *s, char ch)
|
||||
{
|
||||
for(; *s; s++) if(*s == ch) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Lth_PrintString
|
||||
//
|
||||
|
@ -98,4 +142,20 @@ size_t Lth_Hash_char(char const *s)
|
|||
return ret;
|
||||
}
|
||||
|
||||
//
|
||||
// Lth_Hash_str
|
||||
//
|
||||
size_t Lth_Hash_str(__str s)
|
||||
{
|
||||
if(s == NULL) return 0;
|
||||
|
||||
size_t ret = 0;
|
||||
size_t len = ACS_StrLen(s);
|
||||
|
||||
for(size_t i = 0; i < len; i++)
|
||||
ret = ret * 101 + (unsigned char)(s[i]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
Loading…
Reference in New Issue