hidl_string: Add cstr + length constructor

This will allow non-terminated strings to be turned into a hidl_string
with only one copy among other things.

Test: libhidl_test
Fixes: 34221748
Change-Id: I443f7920a65d23b7bcb583db55c3cec7266ec2d4
diff --git a/test_main.cpp b/test_main.cpp
index 5349fc8..1967614 100644
--- a/test_main.cpp
+++ b/test_main.cpp
@@ -61,16 +61,18 @@
     EXPECT_STREQ(s2.c_str(), "s2");
     hidl_string s3 = hidl_string("s3"); // move =
     EXPECT_STREQ(s3.c_str(), "s3");
-    hidl_string s4(hidl_string(hidl_string("s4"))); // move constructor
-    EXPECT_STREQ(s4.c_str(), "s4");
-    hidl_string s5(std::string("s5")); // copy constructor from std::string
-    EXPECT_STREQ(s5, "s5");
-    hidl_string s6 = std::string("s6"); // copy = from std::string
+    hidl_string s4 = hidl_string("12345", 3); // copy constructor from cstr w/ length
+    EXPECT_STREQ(s4.c_str(), "123");
+    hidl_string s5(hidl_string(hidl_string("s5"))); // move constructor
+    EXPECT_STREQ(s5.c_str(), "s5");
+    hidl_string s6(std::string("s6")); // copy constructor from std::string
     EXPECT_STREQ(s6, "s6");
-    hidl_string s7(s6); // copy constructor
-    EXPECT_STREQ(s7, "s6");
-    hidl_string s8 = s7; // copy =
-    EXPECT_STREQ(s8, "s6");
+    hidl_string s7 = std::string("s7"); // copy = from std::string
+    EXPECT_STREQ(s7, "s7");
+    hidl_string s8(s7); // copy constructor
+    EXPECT_STREQ(s8, "s7");
+    hidl_string s9 = s8; // copy =
+    EXPECT_STREQ(s9, "s7");
     char myCString[20] = "myCString";
     s.setToExternal(&myCString[0], strlen(myCString));
     EXPECT_STREQ(s, "myCString");