| Index: src/d8.cc
|
| diff --git a/src/d8.cc b/src/d8.cc
|
| index ac203746523a8ee83015a4968b0ad3cda7e9a6f0..f4ace87eb34413cfc8412aa6e9d411824aad30be 100644
|
| --- a/src/d8.cc
|
| +++ b/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);
|
| - return accumulator;
|
| + 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));
|
| + }
|
| + }
|
| }
|
|
|
|
|
|
|