Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/httpfs/http_fs_node.cc

Issue 443693002: [NaCl SDK] nacl_io: Remove use of new/delete for data buffers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "nacl_io/httpfs/http_fs_node.h" 5 #include "nacl_io/httpfs/http_fs_node.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <stdio.h> 9 #include <stdio.h>
10 #include <string.h> 10 #include <string.h>
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 221
222 *out_size = stat_.st_size; 222 *out_size = stat_.st_size;
223 return 0; 223 return 0;
224 } 224 }
225 225
226 HttpFsNode::HttpFsNode(Filesystem* filesystem, 226 HttpFsNode::HttpFsNode(Filesystem* filesystem,
227 const std::string& url, 227 const std::string& url,
228 bool cache_content) 228 bool cache_content)
229 : Node(filesystem), 229 : Node(filesystem),
230 url_(url), 230 url_(url),
231 buffer_(NULL),
232 buffer_len_(0),
231 cache_content_(cache_content), 233 cache_content_(cache_content),
232 has_cached_size_(false) { 234 has_cached_size_(false) {
233 } 235 }
234 236
235 void HttpFsNode::SetMode(int mode) { 237 void HttpFsNode::SetMode(int mode) {
236 stat_.st_mode = mode; 238 stat_.st_mode = mode;
237 } 239 }
238 240
239 Error HttpFsNode::GetStat_Locked(struct stat* stat) { 241 Error HttpFsNode::GetStat_Locked(struct stat* stat) {
240 // Assume we need to 'HEAD' if we do not know the size, otherwise, assume 242 // Assume we need to 'HEAD' if we do not know the size, otherwise, assume
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 } 552 }
551 553
552 return ReadEntireResponseToTemp(loader, out_bytes); 554 return ReadEntireResponseToTemp(loader, out_bytes);
553 } 555 }
554 556
555 Error HttpFsNode::ReadEntireResponseToTemp(const ScopedResource& loader, 557 Error HttpFsNode::ReadEntireResponseToTemp(const ScopedResource& loader,
556 off_t* out_bytes) { 558 off_t* out_bytes) {
557 *out_bytes = 0; 559 *out_bytes = 0;
558 560
559 const int kBytesToRead = MAX_READ_BUFFER_SIZE; 561 const int kBytesToRead = MAX_READ_BUFFER_SIZE;
560 buffer_.resize(kBytesToRead); 562 buffer_ = (char*)realloc(buffer_, kBytesToRead);
563 assert(buffer_);
564 if (!buffer_) {
565 buffer_len_ = 0;
566 return ENOMEM;
567 }
568 buffer_len_ = kBytesToRead;
561 569
562 while (true) { 570 while (true) {
563 int bytes_read; 571 int bytes_read;
564 Error error = 572 Error error =
565 ReadResponseToBuffer(loader, buffer_.data(), kBytesToRead, &bytes_read); 573 ReadResponseToBuffer(loader, buffer_, kBytesToRead, &bytes_read);
566 if (error) 574 if (error)
567 return error; 575 return error;
568 576
569 *out_bytes += bytes_read; 577 *out_bytes += bytes_read;
570 578
571 if (bytes_read < kBytesToRead) 579 if (bytes_read < kBytesToRead)
572 return 0; 580 return 0;
573 } 581 }
574 } 582 }
575 583
(...skipping 21 matching lines...) Expand all
597 return 0; 605 return 0;
598 } 606 }
599 } 607 }
600 } 608 }
601 609
602 Error HttpFsNode::ReadResponseToTemp(const ScopedResource& loader, 610 Error HttpFsNode::ReadResponseToTemp(const ScopedResource& loader,
603 int count, 611 int count,
604 int* out_bytes) { 612 int* out_bytes) {
605 *out_bytes = 0; 613 *out_bytes = 0;
606 614
607 if (buffer_.size() < static_cast<size_t>(count)) 615 if (buffer_len_ < count) {
608 buffer_.resize(std::min(count, MAX_READ_BUFFER_SIZE)); 616 int new_len = std::min(count, MAX_READ_BUFFER_SIZE);
617 buffer_ = (char*)realloc(buffer_, new_len);
618 assert(buffer_);
619 if (!buffer_) {
620 buffer_len_ = 0;
621 return ENOMEM;
622 }
623 buffer_len_ = new_len;
624 }
609 625
610 int bytes_left = count; 626 int bytes_left = count;
611 while (bytes_left > 0) { 627 while (bytes_left > 0) {
612 int bytes_to_read = 628 int bytes_to_read = std::min(bytes_left, buffer_len_);
613 std::min(static_cast<size_t>(bytes_left), buffer_.size());
614 int bytes_read; 629 int bytes_read;
615 Error error = ReadResponseToBuffer( 630 Error error = ReadResponseToBuffer(
616 loader, buffer_.data(), bytes_to_read, &bytes_read); 631 loader, buffer_, bytes_to_read, &bytes_read);
617 if (error) 632 if (error)
618 return error; 633 return error;
619 634
620 if (bytes_read == 0) 635 if (bytes_read == 0)
621 return 0; 636 return 0;
622 637
623 bytes_left -= bytes_read; 638 bytes_left -= bytes_read;
624 *out_bytes += bytes_read; 639 *out_bytes += bytes_read;
625 } 640 }
626 641
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 assert(bytes_read <= bytes_to_read); 673 assert(bytes_read <= bytes_to_read);
659 bytes_to_read -= bytes_read; 674 bytes_to_read -= bytes_read;
660 out_buffer += bytes_read; 675 out_buffer += bytes_read;
661 } 676 }
662 677
663 *out_bytes = count; 678 *out_bytes = count;
664 return 0; 679 return 0;
665 } 680 }
666 681
667 } // namespace nacl_io 682 } // namespace nacl_io
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698