version 1.1.1.1.2.1, 2013/03/05 13:59:12
|
version 1.11, 2024/10/28 09:58:51
|
Line 12 terms:
|
Line 12 terms:
|
All of the documentation and software included in the ELWIX and AITNET |
All of the documentation and software included in the ELWIX and AITNET |
Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
|
|
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 | Copyright 2004 - 2024 |
by Michael Pounov <misho@elwix.org>. All rights reserved. |
by Michael Pounov <misho@elwix.org>. All rights reserved. |
|
|
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
Line 52 SUCH DAMAGE.
|
Line 52 SUCH DAMAGE.
|
* @arr = Pointer to array for free |
* @arr = Pointer to array for free |
* return: none |
* return: none |
*/ |
*/ |
inline void | void |
str_FreeNullTerm(char *** __restrict arr) |
str_FreeNullTerm(char *** __restrict arr) |
{ |
{ |
char **a; |
char **a; |
Line 73 str_FreeNullTerm(char *** __restrict arr)
|
Line 73 str_FreeNullTerm(char *** __restrict arr)
|
* @csDelim = Delimiter(s) for separate |
* @csDelim = Delimiter(s) for separate |
* return: 0 error format; -1 error:: can`t read; >0 ok, number of items |
* return: 0 error format; -1 error:: can`t read; >0 ok, number of items |
*/ |
*/ |
inline int | int |
str_ArgsNum(const char *csArgs, const char *csDelim) |
str_ArgsNum(const char *csArgs, const char *csDelim) |
{ |
{ |
register int res; |
register int res; |
Line 230 str_Hex2Dig(const char *psLine)
|
Line 230 str_Hex2Dig(const char *psLine)
|
{ |
{ |
register int i, j; |
register int i, j; |
char *str, szWork[3] = { 0, 0, 0 }; |
char *str, szWork[3] = { 0, 0, 0 }; |
ait_val_t *v, s; | ait_val_t *v, s = AIT_VAL_INIT; |
u_char *b; |
u_char *b; |
int n; |
int n; |
|
|
Line 286 str_Dig2Hex(ait_val_t *digz)
|
Line 286 str_Dig2Hex(ait_val_t *digz)
|
|
|
for (i = 0, b = AIT_GET_BUF(digz); i < AIT_LEN(digz); i++) { |
for (i = 0, b = AIT_GET_BUF(digz); i < AIT_LEN(digz); i++) { |
snprintf(szWork, sizeof szWork, "%02hhX", b[i]); |
snprintf(szWork, sizeof szWork, "%02hhX", b[i]); |
strncat(str, szWork, 2); | strcat(str, szWork); |
} |
} |
|
|
return str; |
return str; |
} |
} |
|
|
/* |
/* |
|
* str_Dig2Hex2() - Convert from digit array to Hex string |
|
* |
|
* @digz = Digits array |
|
* @diglen = Array length |
|
* return: NULL nothing to do or error; |
|
* !=0 Allocated new converted string (must be e_free()) |
|
*/ |
|
char * |
|
str_Dig2Hex2(u_char * __restrict digz, int diglen) |
|
{ |
|
register int i; |
|
char szWork[3] = { 0, 0, 0 }, *str; |
|
u_char *b; |
|
|
|
if (!digz || !diglen) |
|
return NULL; |
|
|
|
str = e_malloc(diglen * 2 + 1); |
|
if (!str) |
|
return NULL; |
|
else |
|
memset(str, 0, diglen * 2 + 1); |
|
|
|
for (i = 0, b = digz; i < diglen; i++) { |
|
snprintf(szWork, sizeof szWork, "%02hhX", b[i]); |
|
strcat(str, szWork); |
|
} |
|
|
|
return str; |
|
} |
|
|
|
/* |
* str_LTrim() - Remove left whitespaces from text string |
* str_LTrim() - Remove left whitespaces from text string |
* |
* |
* @psLine = Text string |
* @psLine = Text string |
* return: 0 nothing to do; !=0 Removed bytes |
* return: 0 nothing to do; !=0 Removed bytes |
*/ |
*/ |
inline int | int |
str_LTrim(char * __restrict psLine) |
str_LTrim(char * __restrict psLine) |
{ |
{ |
int pos = 0; |
int pos = 0; |
Line 320 str_LTrim(char * __restrict psLine)
|
Line 352 str_LTrim(char * __restrict psLine)
|
* @psLine = Text string |
* @psLine = Text string |
* return: 0 nothing to do; !=0 Removed bytes |
* return: 0 nothing to do; !=0 Removed bytes |
*/ |
*/ |
inline int | int |
str_RTrim(char * __restrict psLine) |
str_RTrim(char * __restrict psLine) |
{ |
{ |
char *t, *pos; |
char *t, *pos; |
Line 341 str_RTrim(char * __restrict psLine)
|
Line 373 str_RTrim(char * __restrict psLine)
|
* @psLine = Text string |
* @psLine = Text string |
* return: 0 nothing to do; !=0 Removed bytes |
* return: 0 nothing to do; !=0 Removed bytes |
*/ |
*/ |
inline int | int |
str_Trim(char * __restrict psLine) |
str_Trim(char * __restrict psLine) |
{ |
{ |
int ret = 0; |
int ret = 0; |
Line 358 str_Trim(char * __restrict psLine)
|
Line 390 str_Trim(char * __restrict psLine)
|
* @psLine = Text string |
* @psLine = Text string |
* return: 0 nothing to do; 1 successful unquoted string |
* return: 0 nothing to do; 1 successful unquoted string |
*/ |
*/ |
inline int | int |
str_Unquot(char * __restrict psLine) |
str_Unquot(char * __restrict psLine) |
{ |
{ |
char *pos, *str = NULL; |
char *pos, *str = NULL; |
Line 389 str_Unquot(char * __restrict psLine)
|
Line 421 str_Unquot(char * __restrict psLine)
|
* @psLine = Text string |
* @psLine = Text string |
* return: 0 nothing to do; !=0 converted chars |
* return: 0 nothing to do; !=0 converted chars |
*/ |
*/ |
inline int | int |
str_Upper(char * __restrict psLine) |
str_Upper(char * __restrict psLine) |
{ |
{ |
char *s; |
char *s; |
Line 413 str_Upper(char * __restrict psLine)
|
Line 445 str_Upper(char * __restrict psLine)
|
* @psLine = Text string |
* @psLine = Text string |
* return: 0 nothing to do; !=0 converted chars |
* return: 0 nothing to do; !=0 converted chars |
*/ |
*/ |
inline int | int |
str_Lower(char * __restrict psLine) |
str_Lower(char * __restrict psLine) |
{ |
{ |
char *s; |
char *s; |
Line 429 str_Lower(char * __restrict psLine)
|
Line 461 str_Lower(char * __restrict psLine)
|
} |
} |
|
|
return cx; |
return cx; |
|
} |
|
|
|
/* |
|
* str_getString() - Get NULL delimited string from data buffer |
|
* |
|
* @data = Const data buffer |
|
* @dlen = Data length |
|
* @next = Return next position after string if !=NULL |
|
* return: -1 error or size of string |
|
*/ |
|
int |
|
str_getString(const u_char * __restrict data, int dlen, char ** __restrict next) |
|
{ |
|
const u_char *pos; |
|
|
|
if (!data || !dlen) |
|
return -1; |
|
|
|
for (pos = data; pos < data + dlen; pos++) |
|
if (!*pos) |
|
break; |
|
if (*pos) { |
|
elwix_SetErr(ENOEXEC, "Not found null-terminated string"); |
|
return -1; |
|
} |
|
|
|
if (next) |
|
*next = (char*) pos + 1; |
|
return pos - data + 1; |
|
} |
|
|
|
/* |
|
* str_getString2() - Get string from data buffer with delimiter |
|
* |
|
* @data = Data buffer |
|
* @dlen = Data length |
|
* @delim = Data delimiter |
|
* @next = Return next position after delimited string if !=NULL |
|
* return: -1 error or size of string |
|
*/ |
|
int |
|
str_getString2(char * __restrict data, int dlen, char delim, char ** __restrict next) |
|
{ |
|
char *pos; |
|
|
|
if (!data || !dlen) |
|
return -1; |
|
|
|
for (pos = data; pos < data + dlen; pos++) |
|
if (!*pos || *pos == (u_char) delim) { |
|
*pos = 0; |
|
break; |
|
} |
|
if (*pos) { |
|
elwix_SetErr(ENOEXEC, "Not found null-terminated string"); |
|
return -1; |
|
} |
|
|
|
if (next) |
|
*next = (char*) pos + 1; |
|
return pos - data; |
|
} |
|
|
|
/* |
|
* str_find2replace() - Search find string into data and replace |
|
* |
|
* @data = input string |
|
* @find = search for string |
|
* @replace = replace to string. If it is NULL then deletes found search string |
|
* @str = new produced allocate string. If it is NULL then just return found occurances of find |
|
* @mlen = allocated memory size for new string |
|
* return: -1 error, 0 not found or >0 how many occurances we have for find string |
|
*/ |
|
int |
|
str_find2replace(const char *data, const char *find, const char *replace, char **str, int *mlen) |
|
{ |
|
int cnt = 0, data_len, slen, find_len, replace_len = 0; |
|
const char *pos, *s; |
|
|
|
if (!data || !find) |
|
return -1; |
|
|
|
find_len = strlen(find); |
|
data_len = strlen(data); |
|
for (pos = data; (pos = strstr(pos, find)); pos += find_len, cnt++); |
|
|
|
/* just count occurances */ |
|
if (!str || !mlen) |
|
return cnt; |
|
|
|
slen = data_len - find_len * cnt; |
|
if (replace) { |
|
replace_len = strlen(replace); |
|
slen += replace_len * cnt; |
|
} |
|
/* alloc exports string */ |
|
*mlen = slen + 1; |
|
*str = e_malloc(*mlen); |
|
if (!*str) |
|
return -1; |
|
else |
|
memset(*str, 0, *mlen); |
|
|
|
/* search & replace */ |
|
for (pos = data; *pos;) { |
|
s = strstr(pos, find); |
|
if (s) |
|
slen = s - pos; |
|
else |
|
slen = strlen(pos); |
|
/* |
|
* This hack was made due to behaviour of compiler against strncat(*str, pos, slen)! |
|
*/ |
|
memcpy(*str + strlen(*str), pos, slen); |
|
if (s) { |
|
if (replace) |
|
strncat(*str, replace, replace_len); |
|
pos += find_len; |
|
} |
|
pos += slen; |
|
} |
|
|
|
return cnt; |
} |
} |