From f56ecdbfc0f5a0cda0c9dc42dc6ed8a7b716fae9 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Mon, 3 Mar 2014 09:03:40 -0500 Subject: [PATCH] CreateRequest: strip blanks from request string before parsing --- pvAccessApp/factory/CreateRequestFactory.cpp | 18 ++++++++---------- testApp/client/testCreateRequest.cpp | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/pvAccessApp/factory/CreateRequestFactory.cpp b/pvAccessApp/factory/CreateRequestFactory.cpp index 6943964..9b8e6d7 100644 --- a/pvAccessApp/factory/CreateRequestFactory.cpp +++ b/pvAccessApp/factory/CreateRequestFactory.cpp @@ -24,15 +24,13 @@ static PVDataCreatePtr pvDataCreate = getPVDataCreate(); class CreateRequestImpl : public CreateRequest { private: - static void trim(String& str) + static void removeBlanks(String& str) { - String::size_type pos = str.find_last_not_of(' '); - if(pos != String::npos) { - str.erase(pos + 1); - pos = str.find_first_not_of(' '); - if(pos != String::npos) str.erase(0, pos); + while(true) { + String::size_type pos = str.find_first_of(' '); + if(pos==String::npos) return; + str.erase(pos,1); } - else str.erase(str.begin(), str.end()); } static size_t findMatchingBrace(String& request, size_t index, int numOpen) { @@ -73,7 +71,7 @@ private: PVStructurePtr const & pvParent, String request) { - trim(request); + removeBlanks(request); if(request.length()<=1) return true; std::vector items = split(request); size_t nitems = items.size(); @@ -107,7 +105,7 @@ private: static PVFieldPtrArray emptyFields; static StringArray emptyFieldNames; - trim(request); + removeBlanks(request); if(request.length()<=0) return true; size_t comma = request.find(','); if(comma==0) { @@ -208,7 +206,7 @@ public: PVStructurePtr emptyPVStructure = pvDataCreate->createPVStructure(fieldNames,pvFields); static PVStructure::shared_pointer nullStructure; - if (!request.empty()) trim(request); + if (!request.empty()) removeBlanks(request); if (request.empty()) { return emptyPVStructure; diff --git a/testApp/client/testCreateRequest.cpp b/testApp/client/testCreateRequest.cpp index e20172f..f3b2a6e 100644 --- a/testApp/client/testCreateRequest.cpp +++ b/testApp/client/testCreateRequest.cpp @@ -27,7 +27,7 @@ void testCreateRequest() { assert(pvRequest.get()); out.clear(); pvRequest->toString(&out); std::cout << out << std::endl; -request = "record[process=true]field(alarm,timeStamp)putField(synput:a,synput:b,stnput:c)"; +request = "record[process=true] field(alarm , timeStamp) putField( synput:a,synput:b,stnput:c)"; std::cout << std::endl << String("request") <createRequest(request); assert(pvRequest.get());