Files
OpenBK7231T_App/src/new_common.c
Richard Harman fdbf665cfc fix line endings
2022-05-29 09:32:14 -04:00

144 lines
2.8 KiB
C

#include "new_common.h"
// Why strdup breaks strings?
// backlog lcd_clearAndGoto I2C1 0x23 1 1; lcd_print I2C1 0x23 Enabled
// it got broken around 64 char
// where is buffer with [64] bytes?
char *test_strdup(const char *s)
{
char *res;
size_t len;
if (s == NULL)
return NULL;
len = strlen(s);
res = malloc(len + 1);
if (res)
memcpy(res, s, len + 1);
return res;
}
int strIsInteger(const char *s) {
if(s==0)
return 0;
if(*s == 0)
return 0;
while(*s) {
if(isdigit(*s)==false)
return 0;
s++;
}
return 1;
}
// returns amount of space left in buffer (0=overflow happened)
int strcat_safe(char *tg, const char *src, int tgMaxLen) {
int curOfs = 1;
// skip
while(*tg != 0) {
tg++;
curOfs++;
if(curOfs >= tgMaxLen - 1) {
*tg = 0;
return 0;
}
}
// copy
while(*src != 0) {
*tg = *src;
src++;
tg++;
curOfs++;
if(curOfs >= tgMaxLen - 1) {
*tg = 0;
return 0;
}
}
*tg = 0;
return tgMaxLen-curOfs;
}
int strcpy_safe_checkForChanges(char *tg, const char *src, int tgMaxLen) {
int changesFound = 0;
int curOfs = 0;
// copy
while(*src != 0) {
if(*tg != *src) {
changesFound++;
*tg = *src;
}
src++;
tg++;
curOfs++;
if(curOfs >= tgMaxLen - 1) {
if(*tg != 0) {
changesFound++;
*tg = 0;
}
return 0;
}
}
if(*tg != 0) {
changesFound++;
*tg = 0;
}
return changesFound;
}
int strcpy_safe(char *tg, const char *src, int tgMaxLen) {
int curOfs = 0;
// copy
while(*src != 0) {
*tg = *src;
src++;
tg++;
curOfs++;
if(curOfs >= tgMaxLen - 1) {
*tg = 0;
return 0;
}
}
*tg = 0;
return tgMaxLen-curOfs;
}
void urldecode2_safe(char *dst, const char *srcin, int maxDstLen)
{
int curLen = 1;
int a = 0, b = 0;
// avoid signing issues in conversion to int for isxdigit(int c)
const unsigned char *src = (const unsigned char *)srcin;
while (*src) {
if(curLen >= (maxDstLen - 1)){
break;
}
if ((*src == '%') &&
((a = src[1]) && (b = src[2])) &&
(isxdigit(a) && isxdigit(b))) {
if (a >= 'a')
a -= 'a'-'A';
if (a >= 'A')
a -= ('A' - 10);
else
a -= '0';
if (b >= 'a')
b -= 'a'-'A';
if (b >= 'A')
b -= ('A' - 10);
else
b -= '0';
*dst++ = 16*a+b;
src+=3;
} else if (*src == '+') {
*dst++ = ' ';
src++;
} else {
*dst++ = *src++;
}
curLen++;
}
*dst++ = '\0';
}