From 8ad8e5d325736480a881a7f30bd757f96b87376e Mon Sep 17 00:00:00 2001
From: asterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Date: Thu, 5 Jan 2012 17:26:01 +0000
Subject: [PATCH] Change parser strings to include length.

By default, parsed arguments from the parser module are not valid
strings. This patch introduces string length to each string parameter.

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@5220 38d2e660-2303-0410-9eaa-f027e97ec537
---
 bertos/mware/parser.c | 6 ++++--
 bertos/mware/parser.h | 8 +++++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/bertos/mware/parser.c b/bertos/mware/parser.c
index 71aec30d..217cc6c1 100644
--- a/bertos/mware/parser.c
+++ b/bertos/mware/parser.c
@@ -137,7 +137,9 @@ static bool parseArgs(const char *fmt, const char *input, parms argv[])
 				break;
 
 			case 's':
-				(*argv++).s = begin;
+				(*argv).str.p = begin;
+				(*argv).str.sz = end - begin;
+				argv++;
 				break;
 
 			default:
@@ -264,7 +266,7 @@ bool parser_get_cmd_arguments(const char* input, const struct CmdTemplate* cmdp,
 	if (!input)
 		return false;
 
-	args[0].s = cmdp->name;
+	args[0].str.p = cmdp->name;
 	if (!parseArgs(cmdp->arg_fmt, input, args + 1))
 		return false;
 
diff --git a/bertos/mware/parser.h b/bertos/mware/parser.h
index 281db396..9d4423d3 100644
--- a/bertos/mware/parser.h
+++ b/bertos/mware/parser.h
@@ -131,8 +131,14 @@ typedef enum
 	RC_SKIP   = 2   ///< Skip following commands
 } ResultCode;
 
+typedef struct
+{
+	const char *p;
+	int sz;
+} str_parm;
+
 /** union that contains parameters passed to and from commands */
-typedef union { long l; const char *s; } parms;
+typedef union { long l; str_parm str; } parms;
 /** pointer to commands */
 typedef ResultCode (*CmdFuncPtr)(parms args_results[]);
 
-- 
2.34.1