From 8c8ebe49b62c47b0ac87d697d0bc3515604667c3 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Sat, 6 Apr 2013 22:47:53 +0400 Subject: [PATCH] crypto: fix style issues in bio Stop changing arguments, use local variables for things that change. --- src/node_crypto_bio.cc | 64 ++++++++++++++++++++++++++++---------------------- src/node_crypto_bio.h | 2 +- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/node_crypto_bio.cc b/src/node_crypto_bio.cc index a314bf6..d17ee21 100644 --- a/src/node_crypto_bio.cc +++ b/src/node_crypto_bio.cc @@ -178,28 +178,33 @@ long NodeBIO::Ctrl(BIO* bio, int cmd, long num, void* ptr) { size_t NodeBIO::Read(char* out, size_t size) { size_t bytes_read = 0; size_t expected = Length() > size ? size : Length(); + size_t offset = 0; + size_t left = size; while (bytes_read < expected) { assert(read_head_->read_pos_ <= read_head_->write_pos_); size_t avail = read_head_->write_pos_ - read_head_->read_pos_; - if (avail > size) - avail = size; + if (avail > left) + avail = left; // Copy data if (out != NULL) - memcpy(out, read_head_->data_ + read_head_->read_pos_, avail); + memcpy(out + offset, read_head_->data_ + read_head_->read_pos_, avail); read_head_->read_pos_ += avail; // Move pointers bytes_read += avail; - out += avail; - size -= avail; + offset += avail; + left -= avail; // Move to next buffer if (read_head_->read_pos_ == read_head_->write_pos_) { read_head_->read_pos_ = 0; read_head_->write_pos_ = 0; - read_head_ = read_head_->next_; + + // But not get beyond write_head_ + if (bytes_read != expected) + read_head_ = read_head_->next_; } } assert(expected == bytes_read); @@ -212,13 +217,14 @@ size_t NodeBIO::Read(char* out, size_t size) { size_t NodeBIO::IndexOf(char delim, size_t limit) { size_t bytes_read = 0; size_t max = Length() > limit ? limit : Length(); + size_t left = limit; Buffer* current = read_head_; while (bytes_read < max) { assert(current->read_pos_ <= current->write_pos_); size_t avail = current->write_pos_ - current->read_pos_; - if (avail > limit) - avail = limit; + if (avail > left) + avail = left; // Walk through data char* tmp = current->data_ + current->read_pos_; @@ -230,7 +236,7 @@ size_t NodeBIO::IndexOf(char delim, size_t limit) { // Move pointers bytes_read += off; - limit -= off; + left -= off; // Found `delim` if (off != avail) { @@ -248,9 +254,11 @@ size_t NodeBIO::IndexOf(char delim, size_t limit) { } -void NodeBIO::Write(const char* data, size_t len) { - while (len > 0) { - size_t to_write = len; +void NodeBIO::Write(const char* data, size_t size) { + size_t offset = 0; + size_t left = size; + while (left > 0) { + size_t to_write = left; assert(write_head_->write_pos_ <= kBufferLength); size_t avail = kBufferLength - write_head_->write_pos_; @@ -258,28 +266,28 @@ void NodeBIO::Write(const char* data, size_t len) { to_write = avail; // Copy data - memcpy(write_head_->data_ + write_head_->write_pos_, data, to_write); - write_head_->write_pos_ += to_write; - assert(write_head_->write_pos_ <= kBufferLength); + memcpy(write_head_->data_ + write_head_->write_pos_, + data + offset, + to_write); // Move pointers - len -= to_write; - data += to_write; + left -= to_write; + offset += to_write; length_ += to_write; + write_head_->write_pos_ += to_write; + assert(write_head_->write_pos_ <= kBufferLength); - // Still have some bytes left: - // 1. Go to next buffer - // 2. Allocate new if next is already full or is partially read - // (is read head) - if (write_head_->next_->write_pos_ == kBufferLength || - write_head_->next_->read_pos_ != 0) { - Buffer* next = new Buffer(); - next->next_ = write_head_->next_; - write_head_->next_ = next; + // Go to next buffer if there still are some bytes to write + if (left != 0) { + if (write_head_->next_->write_pos_ == kBufferLength) { + Buffer* next = new Buffer(); + next->next_ = write_head_->next_; + write_head_->next_ = next; + } + write_head_ = write_head_->next_; } - write_head_ = write_head_->next_; } - assert(len == 0); + assert(left == 0); } diff --git a/src/node_crypto_bio.h b/src/node_crypto_bio.h index 95d173e..9411b3b 100644 --- a/src/node_crypto_bio.h +++ b/src/node_crypto_bio.h @@ -70,7 +70,7 @@ class NodeBIO { void Reset(); // Put `len` bytes from `data` into buffer - void Write(const char* data, size_t len); + void Write(const char* data, size_t size); // Return size of buffer in bytes size_t inline Length() { -- 2.7.4