Skip to content

Commit 6bcb9e2

Browse files
merge conflict
1 parent 37c730b commit 6bcb9e2

1 file changed

Lines changed: 16 additions & 46 deletions

File tree

source/s3_auto_ranged_put.c

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -324,31 +324,33 @@ static struct aws_s3_meta_request_vtable s_s3_auto_ranged_put_vtable = {
324324
};
325325

326326
/**
327-
* Helper to compute request body size.
328-
* Basically returns either part size or if content is not equally divisible into parts, the size of the remaining last
329-
* part.
327+
* Helper to initialize the request ranges and content-length
328+
* based on the request->part_number and meta_request->part_size
330329
*/
331-
static size_t s_compute_request_body_size(
332-
const struct aws_s3_meta_request *meta_request,
333-
uint32_t part_number,
334-
uint64_t *offset_out) {
335-
AWS_PRECONDITION(meta_request);
330+
static int s_compute_request_body_size(const struct aws_s3_meta_request *meta_request, struct aws_s3_request *request) {
331+
AWS_ERROR_PRECONDITION(meta_request);
332+
AWS_ERROR_PRECONDITION(request);
336333

337334
const struct aws_s3_auto_ranged_put *auto_ranged_put = meta_request->impl;
338335

339336
size_t request_body_size = meta_request->part_size;
340337
/* Last part--adjust size to match remaining content length. */
341-
if (auto_ranged_put->has_content_length && part_number == auto_ranged_put->total_num_parts_from_content_length) {
338+
if (auto_ranged_put->has_content_length &&
339+
request->part_number == auto_ranged_put->total_num_parts_from_content_length) {
342340
size_t content_remainder = (size_t)(auto_ranged_put->content_length % (uint64_t)meta_request->part_size);
343341

344342
if (content_remainder > 0) {
345343
request_body_size = content_remainder;
346344
}
347345
}
348-
/* The part_number starts at 1 */
349-
*offset_out = (part_number - 1) * meta_request->part_size;
350-
351-
return request_body_size;
346+
if (aws_mul_u64_checked(request->part_number - 1, meta_request->part_size, &request->part_range_start)) {
347+
return AWS_OP_ERR;
348+
}
349+
if (aws_add_u64_checked(request->part_range_start, request_body_size - 1, &request->part_range_end)) {
350+
return AWS_OP_ERR;
351+
}
352+
request->content_length = request_body_size;
353+
return AWS_OP_SUCCESS;
352354
}
353355

354356
/* Allocate a new auto-ranged put meta request */
@@ -633,9 +635,7 @@ static bool s_s3_auto_ranged_put_update(
633635

634636
request->part_number = auto_ranged_put->threaded_update_data.next_part_number;
635637

636-
size_t request_body_size =
637-
s_compute_request_body_size(meta_request, request->part_number, &request->part_range_start);
638-
request->part_range_end = request->part_range_start + request_body_size - 1;
638+
s_compute_request_body_size(meta_request, request);
639639

640640
/* If request was previously uploaded, we prepare it to ensure checksums still match,
641641
* but ultimately it gets marked no-op and we don't send it */
@@ -793,36 +793,6 @@ static bool s_s3_auto_ranged_put_update(
793793
return work_remaining;
794794
}
795795

796-
/**
797-
* Helper to initialize the request ranges and content-length
798-
* based on the request->part_number and meta_request->part_size
799-
*/
800-
static int s_compute_request_body_size(const struct aws_s3_meta_request *meta_request, struct aws_s3_request *request) {
801-
AWS_ERROR_PRECONDITION(meta_request);
802-
AWS_ERROR_PRECONDITION(request);
803-
804-
const struct aws_s3_auto_ranged_put *auto_ranged_put = meta_request->impl;
805-
806-
size_t request_body_size = meta_request->part_size;
807-
/* Last part--adjust size to match remaining content length. */
808-
if (auto_ranged_put->has_content_length &&
809-
request->part_number == auto_ranged_put->total_num_parts_from_content_length) {
810-
size_t content_remainder = (size_t)(auto_ranged_put->content_length % (uint64_t)meta_request->part_size);
811-
812-
if (content_remainder > 0) {
813-
request_body_size = content_remainder;
814-
}
815-
}
816-
if (aws_mul_u64_checked(request->part_number - 1, meta_request->part_size, &request->part_range_start)) {
817-
return AWS_OP_ERR;
818-
}
819-
if (aws_add_u64_checked(request->part_range_start, request_body_size - 1, &request->part_range_end)) {
820-
return AWS_OP_ERR;
821-
}
822-
request->content_length = request_body_size;
823-
return AWS_OP_SUCCESS;
824-
}
825-
826796
static int s_verify_part_matches_checksum(
827797
struct aws_allocator *allocator,
828798
struct aws_byte_cursor body_cur,

0 commit comments

Comments
 (0)