Fix Visual C++ C4267 warnings (conversion from size_t to uint32_t)

This commit is contained in:
Hugues Delorme 2015-03-03 10:29:47 +01:00
parent d7a4e3b1b6
commit 7e32cf99d5
5 changed files with 59 additions and 12 deletions

View File

@ -0,0 +1,35 @@
/****************************************************************************
**
** GeomIO Library
** Copyright FougSys (2 Mar. 2015)
** contact@fougsys.fr
**
** This software is a reusable library whose purpose is to provide complete
** I/O support for various CAD file formats (eg. STL)
**
** This software is governed by the CeCILL-B license under French law and
** abiding by the rules of distribution of free software. You can use,
** modify and/ or redistribute the software under the terms of the CeCILL-B
** license as circulated by CEA, CNRS and INRIA at the following URL
** "http://www.cecill.info".
**
****************************************************************************/
/* Warning : this header has no multi-inclusion guard. It must be included only once in the
* translation unit of use. The reason is that all functions defined here are meant to
* be inlined for performance purpose
*/
#include "../global.h"
#include <stddef.h>
/*! Returns \p val safely casted to unsigned 32b integer */
GMIO_INLINE static uint32_t gmio_size_to_uint32(size_t val)
{
#if GMIO_TARGET_ARCH_BIT_SIZE > 32
return val > 0xFFFFFFFF ? 0xFFFFFFFF : (uint32_t)val;
#else
return val;
#endif
}

View File

@ -65,7 +65,7 @@ gmio_bool_t gmio_stream_at_end(gmio_stream_t* stream)
{
if (stream != NULL && stream->at_end_func != NULL)
return stream->at_end_func(stream->cookie);
return 0;
return GMIO_FALSE;
}
int gmio_stream_error(gmio_stream_t* stream)

View File

@ -22,6 +22,7 @@
#include "../gmio_core/error.h"
#include "../gmio_core/internal/min_max.h"
#include "../gmio_core/internal/safe_cast.h"
#include <stdio.h>
#include <string.h>
@ -119,7 +120,9 @@ int gmio_stla_write(const gmio_stl_mesh_t* mesh,
const char* solid_name = options != NULL ? options->solid_name : NULL;
const uint8_t real32_prec = options != NULL ? options->real32_prec : 9;
const uint32_t total_facet_count = mesh != NULL ? mesh->triangle_count : 0;
const uint32_t buffer_facet_count = trsf != NULL ? trsf->buffer_size / GMIO_STLA_FACET_SIZE_P2 : 0;
const uint32_t buffer_facet_count =
trsf != NULL ?
gmio_size_to_uint32(trsf->buffer_size / GMIO_STLA_FACET_SIZE_P2) : 0;
uint32_t ifacet = 0;
char* buffer_iterator = trsf != NULL ? trsf->buffer : NULL;
char coords_format[64];

View File

@ -23,8 +23,9 @@
#include "../gmio_core/endian.h"
#include "../gmio_core/error.h"
#include "../gmio_core/internal/convert.h"
#include "../gmio_core/internal/byte_swap.h"
#include "../gmio_core/internal/convert.h"
#include "../gmio_core/internal/safe_cast.h"
#include <string.h>
@ -66,10 +67,13 @@ int gmio_stlb_read(gmio_stl_mesh_creator_t *creator,
const gmio_stlb_read_options_t* options)
{
const gmio_endianness_t host_byte_order = gmio_host_endianness();
const gmio_endianness_t byte_order = options != NULL ? options->byte_order : host_byte_order;
const gmio_endianness_t byte_order =
options != NULL ? options->byte_order : host_byte_order;
const uint32_t max_facet_count_per_read =
gmio_size_to_uint32(trsf->buffer_size / GMIO_STLB_TRIANGLE_RAWSIZE);
gmio_stlb_readwrite_helper_t rparams = {0};
uint8_t header_data[GMIO_STLB_HEADER_SIZE];
uint32_t total_facet_count = 0; /* Count of facets as declared in the stream */
uint32_t total_facet_count = 0; /* Count of facets as declared in the stream */
int error = GMIO_NO_ERROR; /* Helper variable to store function result error code */
/* Check validity of input parameters */
@ -103,10 +107,13 @@ int gmio_stlb_read(gmio_stl_mesh_creator_t *creator,
while (gmio_no_error(error)
&& rparams.i_facet_offset < total_facet_count)
{
rparams.facet_count = gmio_stream_read(&trsf->stream,
trsf->buffer,
GMIO_STLB_TRIANGLE_RAWSIZE,
trsf->buffer_size / GMIO_STLB_TRIANGLE_RAWSIZE);
rparams.facet_count =
gmio_size_to_uint32(
gmio_stream_read(
&trsf->stream,
trsf->buffer,
GMIO_STLB_TRIANGLE_RAWSIZE,
max_facet_count_per_read));
if (gmio_stream_error(&trsf->stream) != 0)
error = GMIO_STREAM_ERROR;
else if (rparams.facet_count > 0)

View File

@ -24,6 +24,8 @@
#include "../gmio_core/endian.h"
#include "../gmio_core/error.h"
#include "../gmio_core/internal/byte_codec.h"
#include "../gmio_core/internal/min_max.h"
#include "../gmio_core/internal/safe_cast.h"
#include <string.h>
@ -80,7 +82,7 @@ int gmio_stlb_write(const gmio_stl_mesh_t* mesh,
/* Initialize wparams */
if (host_byte_order != byte_order)
wparams.fix_endian_func = gmio_stl_triangle_bswap;
wparams.facet_count = trsf->buffer_size / GMIO_STLB_TRIANGLE_RAWSIZE;
wparams.facet_count = gmio_size_to_uint32(trsf->buffer_size / GMIO_STLB_TRIANGLE_RAWSIZE);
/* Write header */
if (header_data == NULL) {
@ -105,8 +107,8 @@ int gmio_stlb_write(const gmio_stl_mesh_t* mesh,
i_facet += wparams.facet_count)
{
/* Write to buffer */
if (wparams.facet_count > (facet_count - wparams.i_facet_offset))
wparams.facet_count = facet_count - wparams.i_facet_offset;
wparams.facet_count = _GMIO_INTERNAL_MIN(wparams.facet_count,
facet_count - wparams.i_facet_offset);
gmio_stlb_write_facets(mesh, trsf->buffer, &wparams);
wparams.i_facet_offset += wparams.facet_count;