--- libelwix/src/str.c 2016/05/18 12:47:42 1.7 +++ libelwix/src/str.c 2018/05/31 15:35:16 1.8 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: str.c,v 1.7 2016/05/18 12:47:42 misho Exp $ +* $Id: str.c,v 1.8 2018/05/31 15:35:16 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 - 2015 +Copyright 2004 - 2018 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -432,9 +432,9 @@ str_Lower(char * __restrict psLine) } /* - * str_getString() - Get string from data buffer + * str_getString() - Get NULL delimited string from data buffer * - * @data = Data buffer + * @data = Const data buffer * @dlen = Data length * @next = Return next position after string if !=NULL * return: -1 error or size of string @@ -458,4 +458,36 @@ str_getString(const u_char * __restrict data, int dlen 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; }