summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfcolin2007-02-01 12:59:55 +0000
committerfcolin2007-02-01 12:59:55 +0000
commitee291d6e06ccec9ac89c3228a94a2ba63a52f596 (patch)
treeeab8a390788cc26d64d9b61584169a6714f06109
parentcf7deffd409caacafb23751e128313befb1674ea (diff)
downloadivy-cplusplus-ee291d6e06ccec9ac89c3228a94a2ba63a52f596.zip
ivy-cplusplus-ee291d6e06ccec9ac89c3228a94a2ba63a52f596.tar.gz
ivy-cplusplus-ee291d6e06ccec9ac89c3228a94a2ba63a52f596.tar.bz2
ivy-cplusplus-ee291d6e06ccec9ac89c3228a94a2ba63a52f596.tar.xz
Utilisateur : Fcolin Date : 8/10/01 Heure : 14:15 Archivé dans $/Ivy Commentaire: bug strtok si argument vide !!! (vss 14)
-rw-r--r--Bus/Ivy/IvyApplication.cxx24
1 files changed, 21 insertions, 3 deletions
diff --git a/Bus/Ivy/IvyApplication.cxx b/Bus/Ivy/IvyApplication.cxx
index b27b77b..7f798c2 100644
--- a/Bus/Ivy/IvyApplication.cxx
+++ b/Bus/Ivy/IvyApplication.cxx
@@ -11,7 +11,25 @@
#define ARG_START "\002"
#define ARG_END "\003"
-
+/*
+function like strok but do not eat consecutive separator
+*/
+static char * nextArg( char *s, const char *separator )
+{
+ static char *start = NULL;
+ static char *end = NULL;
+ if ( s )
+ {
+ end = s;
+ }
+ start = end;
+
+ while ( *end && *end != *separator )
+ end++;
+ if ( *end == *separator ) *end++ = '\0';
+ if ( end == start ) return NULL;
+ return start;
+}
/////////////////////////////////////////////////////////////////////////////
// IvyApplication
@@ -183,11 +201,11 @@ void IvyApplication::OnReceive(char * line)
TRACE("Message id=%d msg='%s'\n", id, arg);
#endif //IVY_DEBUG
- arg = strtok( arg, ARG_END);
+ arg = nextArg( arg, ARG_END);
while ( arg )
{
argv[argc++] = arg;
- arg = strtok( NULL, ARG_END );
+ arg = nextArg( NULL, ARG_END );
}
bus->CallMessageCallback( this, id, argc, argv );
break;