Skip to content

Commit 1c10a5c

Browse files
authored
Merge pull request #205 from DenverM80/win_dist_fix
Print unsigned long long Platform independent
2 parents 083ef2c + 13c7823 commit 1c10a5c

File tree

4 files changed

+49
-29
lines changed

4 files changed

+49
-29
lines changed

src/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ add_library(ds3 SHARED
99
ds3_connection.h ds3_connection.c)
1010

1111
if (WIN32)
12-
#set(WINDOWS_VS_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/win32/src/Debug)
12+
set(CMAKE_BUILD_TYPE Release)
1313
set(WINDOWS_VS_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/win32/src/Release)
14+
#set(CMAKE_BUILD_TYPE Debug)
15+
#set(WINDOWS_VS_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/win32/src/Debug)
1416

1517
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${WINDOWS_VS_OUTPUT_DIR})
1618
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${WINDOWS_VS_OUTPUT_DIR})

src/ds3_init_requests.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,16 @@
2626
#include "ds3_request.h"
2727
#include "ds3_net.h"
2828

29-
//The max size of an uint32_t should be 10 characters + NULL
30-
static const char UNSIGNED_LONG_BASE_10[] = "4294967296";
31-
static const unsigned int UNSIGNED_LONG_BASE_10_STR_LEN = sizeof(UNSIGNED_LONG_BASE_10) + 1;
32-
//The max size of an uint64_t should be 20 characters + NULL
33-
static const char UNSIGNED_LONG_LONG_BASE_10[] = "18446744073709551615";
34-
static const unsigned int UNSIGNED_LONG_LONG_BASE_10_STR_LEN = sizeof(UNSIGNED_LONG_LONG_BASE_10) + 1;
29+
#ifdef _WIN32
30+
#include <io.h>
31+
#ifndef PRIu64
32+
#define PRIu64 "I64u"
33+
#endif
34+
#else
35+
#include <inttypes.h>
36+
#endif
37+
38+
#define STRING_BUFFER_SIZE 32
3539

3640
static char* _get_ds3_bucket_acl_permission_str(ds3_bucket_acl_permission input) {
3741
if (input == DS3_BUCKET_ACL_PERMISSION_LIST) {
@@ -857,23 +861,23 @@ static void _set_query_param_flag(const ds3_request* _request, const char* key,
857861
}
858862

859863
static void _set_query_param_uint64_t(const ds3_request* _request, const char* key, uint64_t value) {
860-
char string_buffer[UNSIGNED_LONG_LONG_BASE_10_STR_LEN];
864+
char string_buffer[STRING_BUFFER_SIZE];
861865
memset(string_buffer, 0, sizeof(string_buffer));
862-
snprintf(string_buffer, sizeof(string_buffer), "%" PRIu64, value);
866+
g_snprintf(string_buffer, sizeof(string_buffer), "%" PRIu64, value);
863867
_set_query_param(_request, key, string_buffer);
864868
}
865869

866870
static void _set_query_param_int(const ds3_request* _request, const char* key, int value) {
867-
char string_buffer[UNSIGNED_LONG_BASE_10_STR_LEN];
871+
char string_buffer[STRING_BUFFER_SIZE];
868872
memset(string_buffer, 0, sizeof(string_buffer));
869-
snprintf(string_buffer, sizeof(string_buffer), "%d", value);
873+
g_snprintf(string_buffer, sizeof(string_buffer), "%d", value);
870874
_set_query_param(_request, key, string_buffer);
871875
}
872876

873877
static void _set_query_param_float(const ds3_request* _request, const char* key, float value) {
874-
char string_buffer[UNSIGNED_LONG_BASE_10_STR_LEN];
878+
char string_buffer[STRING_BUFFER_SIZE];
875879
memset(string_buffer, 0, sizeof(string_buffer));
876-
snprintf(string_buffer, sizeof(string_buffer), "%f", value);
880+
g_snprintf(string_buffer, sizeof(string_buffer), "%f", value);
877881
_set_query_param(_request, key, string_buffer);
878882
}
879883

src/ds3_requests.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,18 @@
2828
#include "ds3_utils.h"
2929

3030
#ifdef _WIN32
31-
#include <io.h>
31+
#include <io.h>
32+
#ifndef PRIu64
33+
#define PRIu64 "I64u"
34+
#endif
3235
#else
33-
#include <inttypes.h>
36+
#include <inttypes.h>
3437
#endif
3538

3639

37-
//The max size of an uint32_t should be 10 characters + NULL
38-
static const char UNSIGNED_LONG_BASE_10[] = "4294967296";
39-
static const unsigned int UNSIGNED_LONG_BASE_10_STR_LEN = sizeof(UNSIGNED_LONG_BASE_10) + 1;
40-
//The max size of an uint64_t should be 20 characters + NULL
41-
static const char UNSIGNED_LONG_LONG_BASE_10[] = "18446744073709551615";
42-
static const unsigned int UNSIGNED_LONG_LONG_BASE_10_STR_LEN = sizeof(UNSIGNED_LONG_LONG_BASE_10) + 1;
43-
40+
//The max size of an uint32_t is 10 characters + NULL
41+
//The max size of an uint64_t is 20 characters + NULL
42+
#define STRING_BUFFER_SIZE 32
4443

4544

4645
struct _ds3_metadata {
@@ -408,7 +407,7 @@ static ds3_error* _get_request_xml_nodes(
408407
}
409408

410409
static xmlDocPtr _generate_xml_bulk_objects_list(const ds3_bulk_object_list_response* obj_list, object_list_type list_type, ds3_job_chunk_client_processing_order_guarantee order) {
411-
char size_buff[UNSIGNED_LONG_LONG_BASE_10_STR_LEN];
410+
char size_buff[STRING_BUFFER_SIZE];
412411
xmlDocPtr doc;
413412
ds3_bulk_object_response* obj;
414413
xmlNodePtr objects_node, object_node;
@@ -431,7 +430,8 @@ static xmlDocPtr _generate_xml_bulk_objects_list(const ds3_bulk_object_list_resp
431430

432431
for (obj_index = 0; obj_index < obj_list->num_objects; obj_index++) {
433432
obj = obj_list->objects[obj_index];
434-
g_snprintf(size_buff, sizeof(char) * UNSIGNED_LONG_LONG_BASE_10_STR_LEN, "%" PRIu64, obj->length);
433+
memset(size_buff, 0, sizeof(size_buff));
434+
g_snprintf(size_buff, STRING_BUFFER_SIZE, "%" PRIu64, obj->length);
435435

436436
object_node = xmlNewNode(NULL, (xmlChar*) "Object");
437437
xmlAddChild(objects_node, object_node);
@@ -448,7 +448,7 @@ static xmlDocPtr _generate_xml_bulk_objects_list(const ds3_bulk_object_list_resp
448448
}
449449

450450
static xmlDocPtr _generate_xml_complete_mpu(const ds3_complete_multipart_upload_response* mpu_list) {
451-
char size_buff[UNSIGNED_LONG_LONG_BASE_10_STR_LEN];
451+
char size_buff[STRING_BUFFER_SIZE];
452452
xmlDocPtr doc;
453453
ds3_multipart_upload_part_response* part;
454454
xmlNodePtr parts_node, part_node;
@@ -464,7 +464,7 @@ static xmlDocPtr _generate_xml_complete_mpu(const ds3_complete_multipart_upload_
464464
part_node = xmlNewNode(NULL, (xmlChar*) "Part");
465465
xmlAddChild(parts_node, part_node);
466466

467-
g_snprintf(size_buff, sizeof(char) * UNSIGNED_LONG_LONG_BASE_10_STR_LEN, "%d", part->part_number);
467+
g_snprintf(size_buff, STRING_BUFFER_SIZE, "%d", part->part_number);
468468
xmlNewTextChild(part_node, NULL, (xmlChar*) "PartNumber", (xmlChar*) size_buff);
469469

470470
xmlNewTextChild(part_node, NULL, (xmlChar*) "ETag", (xmlChar*) part->etag->value);

test/bucket_tests.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,23 @@
1515

1616
#include <stdio.h>
1717
#include "ds3.h"
18+
#include "ds3_request.h"
1819
#include "test.h"
1920
#include <boost/test/unit_test.hpp>
2021
#include <glib.h>
22+
#include <limits.h>
23+
24+
BOOST_AUTO_TEST_CASE( init_put_object_offset_unsigned_long_long ) {
25+
printf("-----Testing init PUT_OBJECT with max unsigned long long offset-------\n");
26+
27+
struct _ds3_request* request = ds3_init_put_object_request("Test_bucket", "test_object", 1024 * 1024);
28+
ds3_request_set_offset(request, ULLONG_MAX);
29+
30+
char* value = (char*)g_hash_table_lookup(request->query_params, "offset");
31+
printf(" request->query_params[\"offset\"]:%s\n", value);
32+
BOOST_CHECK(value != NULL);
33+
BOOST_CHECK(g_strcmp0(value, "18446744073709551615") == 0);
34+
}
2135

2236
BOOST_AUTO_TEST_CASE( bulk_put ) {
2337
printf("-----Testing Bulk PUT-------\n");
@@ -63,15 +77,15 @@ BOOST_AUTO_TEST_CASE( empty_folder ) {
6377
const char* objects[1] = {"empty-folder/"};
6478
ds3_bulk_object_list_response* object_list = ds3_convert_object_list_from_strings(objects, 1);
6579
ds3_request* request = ds3_init_put_bulk_job_spectra_s3_request(bucket_name, object_list);
66-
ds3_master_object_list_response* bulk_response = NULL;
80+
ds3_master_object_list_response* bulk_response;
6781
error = ds3_put_bulk_job_spectra_s3_request(client, request, &bulk_response);
6882
handle_error(error);
69-
ds3_master_object_list_response_free(bulk_response);
7083

7184
request = ds3_init_put_object_request(bucket_name, objects[0], 0);
7285
ds3_request_set_job(request, bulk_response->job_id->value);
73-
error = ds3_put_object_request(client, request, NULL, NULL);
86+
error = ds3_put_object_request(client, request, NULL, NULL);
7487
ds3_request_free(request);
88+
ds3_master_object_list_response_free(bulk_response);
7589
handle_error(error);
7690

7791
ds3_list_bucket_result_response* response;

0 commit comments

Comments
 (0)