libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] gvars3/src GStringUtil.cc serialize.cc


From: Ethan Eade
Subject: [libcvd-members] gvars3/src GStringUtil.cc serialize.cc
Date: Mon, 23 Jun 2008 10:59:41 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    gvars3
Changes by:     Ethan Eade <ethaneade>  08/06/23 10:59:41

Modified files:
        src            : GStringUtil.cc serialize.cc 

Log message:
        Quoted strings now allow escape characters \n, \r, and \t.  Any other 
escape
        is converted to the character after the slash.  This works for strings 
with
        multiple quoted bits as well.  

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/GStringUtil.cc?cvsroot=libcvd&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/serialize.cc?cvsroot=libcvd&r1=1.8&r2=1.9

Patches:
Index: GStringUtil.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/GStringUtil.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- GStringUtil.cc      12 Jun 2008 10:58:43 -0000      1.4
+++ GStringUtil.cc      23 Jun 2008 10:59:40 -0000      1.5
@@ -71,12 +71,23 @@
        cDelim = '\"';
        nPos++;
       }
-    while((nPos<nLength)&&(s[nPos]!=cDelim))
-      {
-       sTarget+=(s[nPos]);
-       nPos++;
+    for (; nPos < nLength; ++nPos) {
+       char c = s[nPos];
+       if (c == cDelim)
+           break;
+       if (cDelim == '"' && nPos+1<nLength && c == '\\') {
+           char escaped = s[++nPos];
+           switch (escaped) {
+           case 'n': c = '\n'; break;
+           case 'r': c = '\r'; break;
+           case 't': c = '\t'; break;
+           default: c = escaped; break;
+           }
+       }
+       sTarget+=c;
       }
     v.push_back(sTarget);
+
     if(cDelim=='\"')
       nPos++;
     }

Index: serialize.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/serialize.cc,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- serialize.cc        18 Sep 2006 13:00:59 -0000      1.8
+++ serialize.cc        23 Jun 2008 10:59:41 -0000      1.9
@@ -196,15 +196,29 @@
          // Found opening ". Copy until end, or closing "
          
          std::string sNew("");
-         bool bFoundCloseQuote = false;
-         while((nPos < nLength) && !bFoundCloseQuote)
-           {
-             c = s[nPos];
-             if(c=='"') bFoundCloseQuote = true;
-             else
+         for (; nPos < nLength; ++nPos) {
+             char c = s[nPos];
+             if (c == '"') {
+                 ++nPos;
+                 break;
+             }
+             if (nPos+1<nLength && c == '\\') {
+                 char escaped = s[++nPos];
+                 switch (escaped) {
+                 case 'n': c = '\n'; break;
+                 case 'r': c = '\r'; break;
+                 case 't': c = '\t'; break;
+                 default: c = escaped; break;
+                 }
+             }
                sNew.push_back(c);
-             nPos++;
            }
+         if (nPos < nLength) {
+             string rest;
+             from_string(s.substr(nPos), rest);
+             sNew += rest;
+         }
+
          so = sNew;
          return 0;
        }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]