Skip to content

Commit 2ea0713

Browse files
authored
fix MSVC warnings, version bump (#69)
fix MSVC warnings, version bump
1 parent cd39812 commit 2ea0713

File tree

6 files changed

+59
-48
lines changed

6 files changed

+59
-48
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
## master
2+
3+
- fix MSVC compiler warnings [jcupitt]
4+
- only use `__attribute__((constructor))` if supported [bgilbert]
5+
6+
## 1.0.0, 2/9/23
7+
8+
- first release!
9+

meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ project(
88
],
99
license : 'MIT',
1010
meson_version : '>=0.50',
11-
version : '1.0.0'
11+
version : '1.0.1'
1212
)
1313
if not meson.is_subproject()
1414
meson.add_dist_script(

src/dicom-data.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -478,9 +478,9 @@ bool dcm_element_set_value_string_multi(DcmError **error,
478478

479479
element->vm = vm;
480480

481-
size_t length = 0;
481+
uint32_t length = 0;
482482
for (uint32_t i = 0; i < vm; i++) {
483-
length += strlen(values[i]);
483+
length += (uint32_t) strlen(values[i]);
484484
}
485485
if (vm > 1) {
486486
// add the separator characters
@@ -576,7 +576,7 @@ bool dcm_element_set_value_string(DcmError **error,
576576
}
577577

578578
element->vm = 1;
579-
element_set_length(element, strlen(value));
579+
element_set_length(element, (uint32_t) strlen(value));
580580

581581
if (!dcm_element_validate(error, element)) {
582582
return false;
@@ -598,7 +598,7 @@ static int64_t value_to_int64(DcmVR vr, int *value)
598598
{
599599
uint64_t result = 0;
600600

601-
#define PEEK(TYPE) result = *((TYPE *) value)
601+
#define PEEK(TYPE) result = (uint64_t) *((TYPE *) value)
602602
DCM_SWITCH_NUMERIC(vr, PEEK);
603603
#undef PEEK
604604

@@ -610,7 +610,7 @@ static int64_t value_to_int64(DcmVR vr, int *value)
610610
static void int64_to_value(DcmVR vr, int *result, int64_t value)
611611
{
612612
*result = 0;
613-
#define POKE(TYPE) *((TYPE *) result) = value;
613+
#define POKE(TYPE) *((TYPE *) result) = (TYPE) value;
614614
DCM_SWITCH_NUMERIC(vr, POKE);
615615
#undef POKE
616616
}
@@ -697,7 +697,7 @@ bool dcm_element_set_value_integer(DcmError **error,
697697
int *element_value = (int *) &element->value.single.sl;
698698
int64_to_value(element->vr, element_value, value);
699699
element->vm = 1;
700-
element_set_length(element, dcm_dict_vr_size(element->vr));
700+
element_set_length(element, (uint32_t) dcm_dict_vr_size(element->vr));
701701

702702
if (!dcm_element_validate(error, element)) {
703703
return false;
@@ -741,7 +741,7 @@ bool dcm_element_set_value_numeric_multi(DcmError **error,
741741
}
742742

743743
element->vm = vm;
744-
element_set_length(element, size_in_bytes);
744+
element_set_length(element, (uint32_t) size_in_bytes);
745745

746746
if (!dcm_element_validate(error, element)) {
747747
return false;
@@ -762,7 +762,7 @@ static double value_to_double(DcmVR vr, double *value)
762762
{
763763
double result = 0.0;
764764

765-
#define PEEK(TYPE) result = *((TYPE *) value)
765+
#define PEEK(TYPE) result = (double) *((TYPE *) value)
766766
DCM_SWITCH_NUMERIC(vr, PEEK);
767767
#undef PEEK
768768

@@ -774,7 +774,7 @@ static double value_to_double(DcmVR vr, double *value)
774774
static void double_to_value(DcmVR vr, double *result, double value)
775775
{
776776
*result = 0.0;
777-
#define POKE(TYPE) *((TYPE *) result) = value;
777+
#define POKE(TYPE) *((TYPE *) result) = (TYPE) value;
778778
DCM_SWITCH_NUMERIC(vr, POKE);
779779
#undef POKE
780780
}
@@ -834,7 +834,7 @@ bool dcm_element_set_value_decimal(DcmError **error,
834834
double *element_value = (double *) &element->value.single.fd;
835835
double_to_value(element->vr, element_value, value);
836836
element->vm = 1;
837-
element_set_length(element, dcm_dict_vr_size(element->vr));
837+
element_set_length(element, (uint32_t) dcm_dict_vr_size(element->vr));
838838

839839
if (!dcm_element_validate(error, element)) {
840840
return false;
@@ -948,7 +948,7 @@ bool dcm_element_set_value(DcmError **error,
948948
if (!dcm_element_set_value_numeric_multi(error,
949949
element,
950950
(int *) value,
951-
length / size,
951+
length / (uint32_t) size,
952952
steal)) {
953953
return false;
954954
}
@@ -1284,7 +1284,7 @@ char *dcm_element_value_to_string(const DcmElement *element)
12841284
(void) dcm_element_get_value_integer(NULL, element, 0, &grp);
12851285
(void) dcm_element_get_value_integer(NULL, element, 1, &ele);
12861286

1287-
uint32_t tag = grp << 16 | ele;
1287+
uint32_t tag = (uint32_t) grp << 16 | (uint32_t) ele;
12881288

12891289
const char *keyword = dcm_dict_keyword_from_tag(tag);
12901290

src/dicom-file.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ static bool get_frame_size(DcmError **error,
319319
return false;
320320
}
321321

322-
*frame_width = width;
323-
*frame_height = height;
322+
*frame_width = (uint32_t) width;
323+
*frame_height = (uint32_t) height;
324324

325325
return true;
326326
}
@@ -350,8 +350,8 @@ static bool get_tiles(DcmError **error,
350350
height = frame_width;
351351
(void) get_tag_int(NULL, metadata, "TotalPixelMatrixRows", &height);
352352

353-
*tiles_across = width / frame_width + !!(width % frame_width);
354-
*tiles_down = height / frame_height + !!(height % frame_height);
353+
*tiles_across = (uint32_t) width / frame_width + !!(width % frame_width);
354+
*tiles_down = (uint32_t) height / frame_height + !!(height % frame_height);
355355

356356
return true;
357357
}
@@ -664,49 +664,49 @@ static bool set_pixel_description(DcmError **error,
664664
!dcm_element_get_value_integer(error, element, 0, &value)) {
665665
return false;
666666
}
667-
desc->rows = value;
667+
desc->rows = (uint16_t) value;
668668

669669
element = dcm_dataset_get(error, metadata, 0x00280011);
670670
if (element == NULL ||
671671
!dcm_element_get_value_integer(error, element, 0, &value)) {
672672
return false;
673673
}
674-
desc->columns = value;
674+
desc->columns = (uint16_t) value;
675675

676676
element = dcm_dataset_get(error, metadata, 0x00280002);
677677
if (element == NULL ||
678678
!dcm_element_get_value_integer(error, element, 0, &value)) {
679679
return false;
680680
}
681-
desc->samples_per_pixel = value;
681+
desc->samples_per_pixel = (uint16_t) value;
682682

683683
element = dcm_dataset_get(error, metadata, 0x00280100);
684684
if (element == NULL ||
685685
!dcm_element_get_value_integer(error, element, 0, &value)) {
686686
return false;
687687
}
688-
desc->bits_allocated = value;
688+
desc->bits_allocated = (uint16_t) value;
689689

690690
element = dcm_dataset_get(error, metadata, 0x00280101);
691691
if (element == NULL ||
692692
!dcm_element_get_value_integer(error, element, 0, &value)) {
693693
return false;
694694
}
695-
desc->bits_stored = value;
695+
desc->bits_stored = (uint16_t) value;
696696

697697
element = dcm_dataset_get(error, metadata, 0x00280103);
698698
if (element == NULL ||
699699
!dcm_element_get_value_integer(error, element, 0, &value)) {
700700
return false;
701701
}
702-
desc->pixel_representation = value;
702+
desc->pixel_representation = (uint16_t) value;
703703

704704
element = dcm_dataset_get(error, metadata, 0x00280006);
705705
if (element == NULL ||
706706
!dcm_element_get_value_integer(error, element, 0, &value)) {
707707
return false;
708708
}
709-
desc->planar_configuration = value;
709+
desc->planar_configuration = (uint16_t) value;
710710

711711
element = dcm_dataset_get(error, metadata, 0x00280004);
712712
if (element == NULL ||

src/dicom-io.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ typedef struct _DcmIOFile {
4444
int fd;
4545
char *filename;
4646
char input_buffer[BUFFER_SIZE];
47-
int bytes_in_buffer;
48-
int read_point;
47+
int64_t bytes_in_buffer;
48+
int64_t read_point;
4949
} DcmIOFile;
5050

5151

@@ -120,7 +120,8 @@ static int64_t read_file(DcmError **error, DcmIOFile *file,
120120
int64_t bytes_read;
121121

122122
#ifdef _WIN32
123-
bytes_read = _read(file->fd, buffer, length);
123+
// we'll never read a huge chunk (hopefully)
124+
bytes_read = _read(file->fd, buffer, (uint32_t) length);
124125
#else
125126
do {
126127
bytes_read = read(file->fd, buffer, length);
@@ -179,8 +180,8 @@ static int64_t dcm_io_read_file(DcmError **error, DcmIO *io,
179180

180181
/* Read what we can from the buffer.
181182
*/
182-
int bytes_available = file->bytes_in_buffer - file->read_point;
183-
int bytes_to_copy = MIN(bytes_available, length);
183+
int64_t bytes_available = file->bytes_in_buffer - file->read_point;
184+
int64_t bytes_to_copy = MIN(bytes_available, length);
184185

185186
memcpy(buffer,
186187
file->input_buffer + file->read_point,
@@ -309,8 +310,8 @@ static int64_t dcm_io_read_memory(DcmError **error, DcmIO *io,
309310

310311
USED(error);
311312

312-
int bytes_available = memory->length - memory->read_point;
313-
int bytes_to_copy = MIN(bytes_available, length);
313+
int64_t bytes_available = memory->length - memory->read_point;
314+
int64_t bytes_to_copy = MIN(bytes_available, length);
314315
memcpy(buffer,
315316
memory->buffer + memory->read_point,
316317
bytes_to_copy);
@@ -355,7 +356,7 @@ static int64_t dcm_io_seek_memory(DcmError **error, DcmIO *io,
355356

356357

357358
DcmIO *dcm_io_create_from_memory(DcmError **error,
358-
const char *buffer,
359+
const char *buffer,
359360
int64_t length)
360361
{
361362
static DcmIOMethods methods = {
@@ -391,9 +392,9 @@ int64_t dcm_io_read(DcmError **error,
391392
}
392393

393394

394-
int64_t dcm_io_seek(DcmError **error,
395-
DcmIO *io,
396-
int64_t offset,
395+
int64_t dcm_io_seek(DcmError **error,
396+
DcmIO *io,
397+
int64_t offset,
397398
int whence)
398399
{
399400
return io->methods->seek(error, io, offset, whence);

tests/check_dicom.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static size_t compute_length_of_string_value_multi(char **values,
7070
}
7171

7272

73-
static char *load_file_to_memory(const char *name, long *length_out)
73+
static char *load_file_to_memory(const char *name, int64_t *length_out)
7474
{
7575
FILE *fp;
7676

@@ -82,7 +82,7 @@ static char *load_file_to_memory(const char *name, long *length_out)
8282
free(full_path);
8383

8484
fseek(fp, 0, SEEK_END);
85-
long length = ftell(fp);
85+
int64_t length = ftell(fp);
8686
fseek(fp, 0, SEEK_SET);
8787

8888
if (length < 0) {
@@ -96,12 +96,12 @@ static char *load_file_to_memory(const char *name, long *length_out)
9696
return NULL;
9797
}
9898

99-
long total_read = 0;
99+
int64_t total_read = 0;
100100
while (total_read < length) {
101-
size_t bytes_read = fread(result + total_read,
102-
1,
103-
length - total_read,
104-
fp);
101+
int64_t bytes_read = fread(result + total_read,
102+
1,
103+
length - total_read,
104+
fp);
105105
total_read += bytes_read;
106106
}
107107

@@ -302,7 +302,8 @@ START_TEST(test_element_CS_multivalue_empty)
302302
uint32_t tag = 0x00080008;
303303
uint32_t vm = 0;
304304

305-
char **values = malloc(vm * sizeof(char *));
305+
// since malloc(0) can be NULL on some platforms
306+
char **values = malloc(1);
306307

307308
DcmElement *element = dcm_element_create(NULL, tag, DCM_VR_CS);
308309
(void) dcm_element_set_value_string_multi(NULL, element, values, vm, true);
@@ -528,15 +529,15 @@ END_TEST
528529
START_TEST(test_element_US_multivalue_empty)
529530
{
530531
uint32_t tag = 0x00280010;
531-
uint16_t value[] = {};
532-
uint32_t vm = sizeof(value) / sizeof(value[0]);
532+
// msvc hates zero length arrays, so use 1
533+
uint16_t value[] = {0};
533534

534535
DcmElement *element = dcm_element_create(NULL, tag, DCM_VR_US);
535-
(void) dcm_element_set_value_numeric_multi(NULL, element, &value, vm, false);
536+
(void) dcm_element_set_value_numeric_multi(NULL, element, &value, 0, false);
536537

537538
ck_assert_int_eq(dcm_element_get_tag(element), tag);
538539
ck_assert_int_eq(dcm_element_get_vr(element), DCM_VR_US);
539-
ck_assert_int_eq(dcm_element_get_length(element), sizeof(value));
540+
ck_assert_int_eq(dcm_element_get_length(element), 0);
540541
ck_assert_int_eq(dcm_element_is_multivalued(element), false);
541542

542543
dcm_element_print(element, 0);
@@ -739,7 +740,7 @@ START_TEST(test_file_sm_image_file_meta_memory)
739740
DcmElement *element;
740741
const char *value;
741742

742-
long length;
743+
int64_t length;
743744
char *memory = load_file_to_memory("data/test_files/sm_image.dcm", &length);
744745
ck_assert_ptr_nonnull(memory);
745746

0 commit comments

Comments
 (0)