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