Fixed: regression in issue 1579 concerning readline() in d8.
BUG=v8:1579 Review URL: http://codereview.chromium.org/7537023 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8771 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
ddf38624b5
commit
6bc1aa0db2
21
src/d8.cc
21
src/d8.cc
@ -226,17 +226,24 @@ Handle<Value> Shell::ReadLine(const Arguments& args) {
|
||||
static const int kBufferSize = 256;
|
||||
char buffer[kBufferSize];
|
||||
Handle<String> accumulator = String::New("");
|
||||
bool linebreak;
|
||||
int length;
|
||||
do { // Repeat if the line ends with an escape '\'.
|
||||
// fgets got an error. Just give up.
|
||||
while (true) {
|
||||
// Continue reading if the line ends with an escape '\\' or the line has
|
||||
// not been fully read into the buffer yet (does not end with '\n').
|
||||
// If fgets gets an error, just give up.
|
||||
if (fgets(buffer, kBufferSize, stdin) == NULL) return Null();
|
||||
length = static_cast<int>(strlen(buffer));
|
||||
linebreak = (length > 1 && buffer[length-2] == '\\');
|
||||
if (linebreak) buffer[length-2] = '\n';
|
||||
accumulator = String::Concat(accumulator, String::New(buffer, length-1));
|
||||
} while (linebreak);
|
||||
if (length == 0) {
|
||||
return accumulator;
|
||||
} else if (buffer[length-1] != '\n') {
|
||||
accumulator = String::Concat(accumulator, String::New(buffer, length));
|
||||
} else if (length > 1 && buffer[length-2] == '\\') {
|
||||
buffer[length-2] = '\n';
|
||||
accumulator = String::Concat(accumulator, String::New(buffer, length-1));
|
||||
} else {
|
||||
return String::Concat(accumulator, String::New(buffer, length-1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user