[gnoduino: 28/237] Starting to distinguish between empty strings and invalid (null) ones.



commit ae719bd527035cbdb9885b4ebba8fa27da8801a2
Author: David A. Mellis <d mellis arduino cc>
Date:   Fri Mar 18 21:45:27 2011 -0400

    Starting to distinguish between empty strings and invalid (null) ones.

 arduino/cores/arduino/WString.cpp |   12 ++++++------
 arduino/cores/arduino/WString.h   |    2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)
---
diff --git a/arduino/cores/arduino/WString.cpp b/arduino/cores/arduino/WString.cpp
index 41c80e8..516bd20 100644
--- a/arduino/cores/arduino/WString.cpp
+++ b/arduino/cores/arduino/WString.cpp
@@ -114,7 +114,7 @@ inline void String::init(void)
 
 unsigned char String::reserve(unsigned int size)
 {
-	if (capacity >= size) return 1;
+	if (buffer && capacity >= size) return 1;
 	if (changeBuffer(size)) {
 		if (len == 0) buffer[0] = 0;
 		return 1;
@@ -139,11 +139,6 @@ unsigned char String::changeBuffer(unsigned int maxStrLen)
 
 String & String::copy(const char *cstr, unsigned int length)
 {
-	if (length == 0) {
-		if (buffer) buffer[0] = 0;
-		len = 0;
-		return *this;
-	}
 	if (!reserve(length)) {
 		if (buffer) {
 			free(buffer);
@@ -204,6 +199,11 @@ String & String::operator = (const char *cstr)
 	if (cstr) {
 		copy(cstr, strlen(cstr));
 	} else {
+		if (buffer) {
+			free(buffer);
+			capacity = 0;
+			buffer = NULL;
+		}
 		len = 0;
 	}
 	return *this;
diff --git a/arduino/cores/arduino/WString.h b/arduino/cores/arduino/WString.h
index 6c07427..18b6541 100644
--- a/arduino/cores/arduino/WString.h
+++ b/arduino/cores/arduino/WString.h
@@ -43,7 +43,7 @@ class String
 {
 public:
 	// constructors
-	String(const char *cstr = NULL);
+	String(const char *cstr = "");
 	String(const String &str);
 	#ifdef __GXX_EXPERIMENTAL_CXX0X__
 	String(String &&rval);



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