Browse Source

[2497] Return whether the string is quoted in characterstr::getNextCharacterString()

Mukund Sivaraman 12 years ago
parent
commit
7237139f1b

+ 6 - 1
src/lib/dns/character_string.cc

@@ -29,7 +29,8 @@ bool isDigit(char c) {
 
 std::string
 characterstr::getNextCharacterString(const std::string& input_str,
-                              std::string::const_iterator& input_iterator)
+                              std::string::const_iterator& input_iterator,
+                              bool* quoted)
 {
     string result;
 
@@ -119,6 +120,10 @@ characterstr::getNextCharacterString(const std::string& input_str,
         isc_throw(InvalidRdataText, "The quotes are not paired");
     }
 
+    if (quoted != NULL) {
+        *quoted = quotes_separated;
+    }
+
     return (result);
 }
 

+ 4 - 1
src/lib/dns/character_string.h

@@ -39,9 +39,12 @@ namespace characterstr {
     /// \param input_iterator The iterator from which to start extracting,
     ///        the iterator will be updated to new position after the function
     ///        is returned
+    /// \param quoted If not \c NULL, returns \c true at this address if
+    ///        the string is quoted, \cfalse otherwise
     /// \return A std::string that contains the extracted <character-string>
     std::string getNextCharacterString(const std::string& input_str,
-                                       std::string::const_iterator& input_iterator);
+                                       std::string::const_iterator& input_iterator,
+                                       bool* quoted = NULL);
 
     /// Get a <character-string> from a input buffer
     ///

+ 6 - 1
src/lib/dns/tests/character_string_unittest.cc

@@ -33,11 +33,13 @@ class CharacterString {
 public:
     CharacterString(const string& str){
         string::const_iterator it = str.begin();
-        characterStr_ = getNextCharacterString(str, it);
+        characterStr_ = getNextCharacterString(str, it, &is_quoted_);
     }
     const string& str() const { return characterStr_; }
+    bool quoted() const { return (is_quoted_); }
 private:
     string characterStr_;
+    bool is_quoted_;
 };
 
 TEST(CharacterStringTest, testNormalCase) {
@@ -47,14 +49,17 @@ TEST(CharacterStringTest, testNormalCase) {
     // Test <character-string> that separated by space
     CharacterString cstr2("foo bar");
     EXPECT_EQ(string("foo"), cstr2.str());
+    EXPECT_FALSE(cstr2.quoted());
 
     // Test <character-string> that separated by quotes
     CharacterString cstr3("\"foo bar\"");
     EXPECT_EQ(string("foo bar"), cstr3.str());
+    EXPECT_TRUE(cstr3.quoted());
 
     // Test <character-string> that not separate by quotes but ended with quotes
     CharacterString cstr4("foo\"");
     EXPECT_EQ(string("foo\""), cstr4.str());
+    EXPECT_FALSE(cstr4.quoted());
 }
 
 TEST(CharacterStringTest, testBadCase) {