Introducing a new StrNDup function that uses new[] for when we dispose the result...
authorolehougaard <olehougaard@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 18 Mar 2009 12:27:37 +0000 (12:27 +0000)
committerolehougaard <olehougaard@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 18 Mar 2009 12:27:37 +0000 (12:27 +0000)
Review URL: http://codereview.chromium.org/48127

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1532 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/allocation.cc
src/allocation.h
src/d8-readline.cc

index d7d21aa..3d26123 100644 (file)
@@ -87,6 +87,16 @@ char* StrDup(const char* str) {
 }
 
 
+char* StrNDup(const char* str, size_t n) {
+  size_t length = strlen(str);
+  if (n < length) length = n;
+  char* result = NewArray<char>(length + 1);
+  memcpy(result, str, length * kCharSize);
+  result[length] = '\0';
+  return result;
+}
+
+
 int NativeAllocationChecker::allocation_disallowed_ = 0;
 
 
index 35e68bd..a690f08 100644 (file)
@@ -119,10 +119,11 @@ static void DeleteArray(T* array) {
 }
 
 
-// The normal strdup function uses malloc.  This version of StrDup
-// uses new and calls the FatalProcessOutOfMemory handler if
-// allocation fails.
+// The normal strdup functions use malloc.  These versions of StrDup
+// and StrNDup uses new and calls the FatalProcessOutOfMemory handler
+// if allocation fails.
 char* StrDup(const char* str);
+char* StrNDup(const char* str, size_t n);
 
 
 // Allocation policy for allocating in the C free store using malloc
index b86648d..34b7b60 100644 (file)
@@ -103,7 +103,7 @@ char* ReadLineEditor::CompletionGenerator(const char* text, int state) {
   static unsigned current_index;
   static Persistent<Array> current_completions;
   if (state == 0) {
-    i::SmartPointer<char> full_text(i::OS::StrNDup(rl_line_buffer, rl_point));
+    i::SmartPointer<char> full_text(i::StrNDup(rl_line_buffer, rl_point));
     HandleScope scope;
     Handle<Array> completions =
       Shell::GetCompletions(String::New(text), String::New(*full_text));