--- libelwix/src/str.c 2013/01/17 10:05:35 1.1 +++ libelwix/src/str.c 2014/02/21 13:30:19 1.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: str.c,v 1.1 2013/01/17 10:05:35 misho Exp $ +* $Id: str.c,v 1.5 2014/02/21 13:30:19 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 +Copyright 2004 - 2014 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -52,7 +52,7 @@ SUCH DAMAGE. * @arr = Pointer to array for free * return: none */ -inline void +void str_FreeNullTerm(char *** __restrict arr) { char **a; @@ -73,7 +73,7 @@ str_FreeNullTerm(char *** __restrict arr) * @csDelim = Delimiter(s) for separate * 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) { register int res; @@ -298,7 +298,7 @@ str_Dig2Hex(ait_val_t *digz) * @psLine = Text string * return: 0 nothing to do; !=0 Removed bytes */ -inline int +int str_LTrim(char * __restrict psLine) { int pos = 0; @@ -320,7 +320,7 @@ str_LTrim(char * __restrict psLine) * @psLine = Text string * return: 0 nothing to do; !=0 Removed bytes */ -inline int +int str_RTrim(char * __restrict psLine) { char *t, *pos; @@ -341,7 +341,7 @@ str_RTrim(char * __restrict psLine) * @psLine = Text string * return: 0 nothing to do; !=0 Removed bytes */ -inline int +int str_Trim(char * __restrict psLine) { int ret = 0; @@ -358,7 +358,7 @@ str_Trim(char * __restrict psLine) * @psLine = Text string * return: 0 nothing to do; 1 successful unquoted string */ -inline int +int str_Unquot(char * __restrict psLine) { char *pos, *str = NULL; @@ -383,3 +383,79 @@ str_Unquot(char * __restrict psLine) return 0; } +/* + * str_Upper() - Convert all lower characters to upper + * + * @psLine = Text string + * return: 0 nothing to do; !=0 converted chars + */ +int +str_Upper(char * __restrict psLine) +{ + char *s; + register int cx = 0; + + if (!psLine || !*psLine) + return 0; + + for (s = psLine; *s; s++) + if (islower(*s)) { + *s = toupper(*s); + cx++; + } + + return cx; +} + +/* + * str_Lower() - Convert all upper characters to lower + * + * @psLine = Text string + * return: 0 nothing to do; !=0 converted chars + */ +int +str_Lower(char * __restrict psLine) +{ + char *s; + register int cx = 0; + + if (!psLine || !*psLine) + return 0; + + for (s = psLine; *s; s++) + if (isupper(*s)) { + *s = tolower(*s); + cx++; + } + + return cx; +} + +/* + * str_getString() - Get string from data buffer + * + * @data = 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; +}