--- libelwix/src/str.c	2014/01/29 14:16:54	1.4
+++ libelwix/src/str.c	2016/05/18 12:47:42	1.7
@@ -3,7 +3,7 @@
 *  by Michael Pounov <misho@elwix.org>
 *
 * $Author: misho $
-* $Id: str.c,v 1.4 2014/01/29 14:16:54 misho Exp $
+* $Id: str.c,v 1.7 2016/05/18 12:47:42 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 <info@elwix.org>
 
-Copyright 2004 - 2014
+Copyright 2004 - 2015
 	by Michael Pounov <misho@elwix.org>.  All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -230,7 +230,7 @@ str_Hex2Dig(const char *psLine)
 {
 	register int i, j;
 	char *str, szWork[3] = { 0, 0, 0 };
-	ait_val_t *v, s;
+	ait_val_t *v, s = AIT_VAL_INIT;
 	u_char *b;
 	int n;
 
@@ -429,4 +429,33 @@ str_Lower(char * __restrict psLine)
 		}
 
 	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;
 }