From 5fc1777abe0f81e46562e292f96e22ff48a6ed1d Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 12 Jan 2023 18:44:45 +0100 Subject: [PATCH 1/4] fix -Wsign-compare warnings in lib --- lib/cairodriver/read_bmp.c | 11 ++++++----- lib/calc/xrand.c | 2 +- lib/db/dbmi_driver/d_error.c | 2 +- lib/driver/font2.c | 4 ++-- lib/dspf/dspf_header.c | 3 ++- lib/gis/asprintf.c | 2 +- lib/gis/cmprbzip.c | 6 +++--- lib/gis/cmprzlib.c | 9 ++++----- lib/gis/ls.c | 2 +- lib/gis/parser_dependencies.c | 5 ++++- lib/gis/snprintf.c | 2 +- lib/gis/user_config.c | 5 ++++- lib/gmath/solvers_classic_iter.c | 25 +++++++++++++++++-------- lib/gmath/solvers_krylov.c | 9 ++++++--- lib/gmath/sparse_matrix.c | 18 ++++++++++++------ lib/gpde/n_les.c | 4 ++-- lib/gpde/n_les_assemble.c | 15 +++++++++------ lib/imagery/iscatt_core.c | 2 +- lib/imagery/sig.c | 6 +++--- lib/imagery/sigset.c | 9 +++++---- lib/linkm/init.c | 3 ++- lib/pngdriver/draw_bitmap.c | 2 +- lib/pngdriver/read_bmp.c | 8 ++++---- lib/psdriver/draw_bitmap.c | 2 +- lib/raster/format.c | 15 +++++++++------ lib/raster/get_row.c | 15 ++++++++++----- lib/raster/open.c | 2 +- lib/raster/put_row.c | 15 ++++++++++----- lib/raster/range.c | 4 ++-- lib/raster3d/cache.c | 15 ++++++++++----- lib/raster3d/doubleio.c | 10 ++++++---- lib/raster3d/fpcompress.c | 8 ++++---- lib/raster3d/fpxdr.c | 8 ++++---- lib/raster3d/index.c | 4 ++-- lib/raster3d/intio.c | 8 ++++---- lib/raster3d/long.c | 4 ++-- lib/raster3d/open.c | 2 +- lib/raster3d/tilemath.c | 2 +- lib/raster3d/tileread.c | 7 +++++-- lib/rst/interp_float/output2d.c | 12 ++++++------ lib/rst/interp_float/resout2d.c | 12 ++++++------ lib/segment/format.c | 4 ++-- lib/vector/diglib/plus_struct.c | 2 +- lib/vector/diglib/portable.c | 22 +++++++++++----------- 44 files changed, 190 insertions(+), 137 deletions(-) diff --git a/lib/cairodriver/read_bmp.c b/lib/cairodriver/read_bmp.c index 4d39b82508d..677cbf7b2a9 100644 --- a/lib/cairodriver/read_bmp.c +++ b/lib/cairodriver/read_bmp.c @@ -46,7 +46,7 @@ static int read_bmp_header(const unsigned char *p) if (*p++ != 'M') return 0; - if (get_4(&p) != HEADER_SIZE + ca.width * ca.height * 4) + if (get_4(&p) != (unsigned int)HEADER_SIZE + ca.width * ca.height * 4) return 0; get_4(&p); @@ -57,9 +57,9 @@ static int read_bmp_header(const unsigned char *p) if (get_4(&p) != 40) return 0; - if (get_4(&p) != ca.width) + if (get_4(&p) != (unsigned int)ca.width) return 0; - if (get_4(&p) != -ca.height) + if (get_4(&p) != (unsigned int)-ca.height) return 0; get_2(&p); @@ -68,7 +68,7 @@ static int read_bmp_header(const unsigned char *p) if (get_4(&p) != 0) return 0; - if (get_4(&p) != ca.width * ca.height * 4) + if (get_4(&p) != (unsigned int)ca.width * ca.height * 4) return 0; get_4(&p); @@ -94,7 +94,8 @@ void cairo_read_bmp(void) if (!read_bmp_header(header)) G_fatal_error(_("Cairo: Invalid BMP header for <%s>"), ca.file_name); - if (fread(ca.grid, ca.stride, ca.height, input) != ca.height) { + if (fread(ca.grid, ca.stride, ca.height, input) != + (unsigned int)ca.height) { if (feof(input)) G_fatal_error(_("Cairo: error reading BMP file <%s>: " "unexpected end of file"), diff --git a/lib/calc/xrand.c b/lib/calc/xrand.c index 89c3e021e0c..a36c5645e8d 100644 --- a/lib/calc/xrand.c +++ b/lib/calc/xrand.c @@ -35,7 +35,7 @@ int f_rand(int argc, const int *argt, void **args) lo = hi; hi = tmp; } - res[i] = (lo == hi) ? lo : lo + x % (unsigned int)(hi - lo); + res[i] = (lo == hi) ? lo : (int)(lo + x % (unsigned int)(hi - lo)); } return 0; } diff --git a/lib/db/dbmi_driver/d_error.c b/lib/db/dbmi_driver/d_error.c index fe91992c23d..fc0d025a6bc 100644 --- a/lib/db/dbmi_driver/d_error.c +++ b/lib/db/dbmi_driver/d_error.c @@ -75,7 +75,7 @@ void db_d_append_error(const char *fmt, ...) count = vfprintf(fp, fmt, ap); if (count >= 0 && (work = G_calloc(count + 1, 1))) { rewind(fp); - if (fread(work, 1, count, fp) != count) { + if (fread(work, 1, count, fp) != (size_t)count) { if (ferror(fp)) G_fatal_error(_("DBMI-%s driver file reading error: %s"), st->driver_name, strerror(errno)); diff --git a/lib/driver/font2.c b/lib/driver/font2.c index a38bd60e721..7b80a5e8870 100644 --- a/lib/driver/font2.c +++ b/lib/driver/font2.c @@ -68,8 +68,8 @@ static void read_hersh(const char *filename) char buf[8]; struct glyph *glyph; int coords; - unsigned int idx, count; - int c, i; + unsigned int i, idx, count; + int c; switch (c = fgetc(fp)) { case '\r': diff --git a/lib/dspf/dspf_header.c b/lib/dspf/dspf_header.c index 599f11a6ed1..e9a20f42920 100644 --- a/lib/dspf/dspf_header.c +++ b/lib/dspf/dspf_header.c @@ -41,7 +41,8 @@ int dfwrite_header(file_info *headp) if (1 != fwrite(&linep->nthres, isize, 1, fp)) return (-1); /* write the array of thresholds out */ - if ((fwrite(linep->tvalue, flsize, linep->nthres, fp)) != linep->nthres) { + if ((fwrite(linep->tvalue, flsize, linep->nthres, fp)) != + (size_t)linep->nthres) { fprintf(stderr, "ERROR: fwrite in dspf_header.c\n"); return (-1); } diff --git a/lib/gis/asprintf.c b/lib/gis/asprintf.c index 6c258bdbf5d..ea2e0c7f5d4 100644 --- a/lib/gis/asprintf.c +++ b/lib/gis/asprintf.c @@ -113,7 +113,7 @@ int G_rasprintf(char **out, size_t *size, const char *fmt, ...) va_start(ap, fmt); count = vsnprintf(buf, osize, fmt, ap); va_end(ap); - if (count >= 0 && count < osize) + if (count >= 0 && (size_t)count < osize) break; if (count > -1) osize = count + 1; diff --git a/lib/gis/cmprbzip.c b/lib/gis/cmprbzip.c index ef133940e9d..e1758617a28 100644 --- a/lib/gis/cmprbzip.c +++ b/lib/gis/cmprbzip.c @@ -86,8 +86,8 @@ int G_bz2_compress(unsigned char *src, int src_sz, unsigned char *dst, int dst_sz) { int err; - int i, buf_sz; - unsigned int nbytes; + int buf_sz; + unsigned int i, nbytes; unsigned char *buf; #ifndef HAVE_BZLIB_H @@ -212,7 +212,7 @@ int G_bz2_expand(unsigned char *src, int src_sz, unsigned char *dst, int dst_sz) * updated buffer size */ - if (nbytes != dst_sz) { + if (dst_sz < 0 || nbytes != (unsigned int)dst_sz) { /* TODO: it is not an error if destination is larger than needed */ G_warning(_("Got uncompressed size %d, expected %d"), (int)nbytes, dst_sz); diff --git a/lib/gis/cmprzlib.c b/lib/gis/cmprzlib.c index 2935f275066..cf9b99ef12f 100644 --- a/lib/gis/cmprzlib.c +++ b/lib/gis/cmprzlib.c @@ -1,5 +1,4 @@ -/* - **************************************************************************** +/***************************************************************************** * -- GRASS Development Team -- * * MODULE: GRASS gis library @@ -116,7 +115,7 @@ int G_zlib_compress(unsigned char *src, int src_sz, unsigned char *dst, /* Output buffer should be large enough for single pass compression */ buf = dst; buf_sz = G_zlib_compress_bound(src_sz); - if (buf_sz > dst_sz) { + if (dst_sz < 0 || buf_sz > (unsigned int)dst_sz) { G_warning( "G_zlib_compress(): programmer error, destination is too small"); if (NULL == @@ -145,7 +144,7 @@ int G_zlib_compress(unsigned char *src, int src_sz, unsigned char *dst, } /* updated buf_sz is bytes of compressed data */ - if (nbytes >= src_sz) { + if (src_sz < 0 || nbytes >= (unsigned int)src_sz) { /* compression not possible */ if (buf != dst) G_free(buf); @@ -205,7 +204,7 @@ int G_zlib_expand(unsigned char *src, int src_sz, unsigned char *dst, * updated buffer size */ - if (nbytes != dst_sz) { + if (dst_sz < 0 || nbytes != (unsigned int)dst_sz) { /* TODO: it is not an error if destination is larger than needed */ G_warning(_("Got uncompressed size %d, expected %d"), (int)nbytes, dst_sz); diff --git a/lib/gis/ls.c b/lib/gis/ls.c index 6f05c6284d4..821c8e01cc9 100644 --- a/lib/gis/ls.c +++ b/lib/gis/ls.c @@ -183,7 +183,7 @@ void G_ls_format(char **list, int num_items, int perline, FILE *stream) #endif if (perline == 0) { - int max_len = 0; + unsigned int max_len = 0; for (i = 0; i < num_items; i++) { /* Find maximum filename length */ diff --git a/lib/gis/parser_dependencies.c b/lib/gis/parser_dependencies.c index 57d0a446e16..d7f49a01b2a 100644 --- a/lib/gis/parser_dependencies.c +++ b/lib/gis/parser_dependencies.c @@ -498,8 +498,11 @@ void G__describe_option_rules_xml(FILE *fp) for (i = 0; i < rules.count; i++) { const struct rule *rule = &((const struct rule *)rules.data)[i]; + if (rule->count < 0) + G_fatal_error(_("Internal error: the number of options is < 0")); + fprintf(fp, "\t\t\n", rule_types[rule->type]); - for (j = 0; j < rule->count; j++) { + for (j = 0; j < (unsigned int)rule->count; j++) { void *p = rule->opts[j]; if (is_flag(p)) { diff --git a/lib/gis/snprintf.c b/lib/gis/snprintf.c index 16dafead7b7..931fec11654 100644 --- a/lib/gis/snprintf.c +++ b/lib/gis/snprintf.c @@ -49,7 +49,7 @@ int G_snprintf(char *str, size_t size, const char *fmt, ...) va_end(ap); /* Windows' vsnprintf() doesn't always NUL-terminate the buffer */ - if (count == size) + if (count >= 0 && (unsigned int)count == size) str[--count] = '\0'; return count; diff --git a/lib/gis/user_config.c b/lib/gis/user_config.c index 9a2740a0c97..3cebea00934 100644 --- a/lib/gis/user_config.c +++ b/lib/gis/user_config.c @@ -30,6 +30,8 @@ #include #include #include +#include +#include #ifndef __MINGW32__ #include #endif @@ -155,10 +157,11 @@ static int _elem_count_split(char *elems) /* Some basic assertions */ assert(elems != NULL); assert((len = strlen(elems)) > 0); + assert(len < PTRDIFF_MAX); assert(*elems != '/'); begin = elems; - for (i = 0; begin != NULL && len > begin - elems; i++) { + for (i = 0; begin != NULL && (ptrdiff_t)len > begin - elems; i++) { /* check '.' condition */ if (*begin == '.') return 0; diff --git a/lib/gmath/solvers_classic_iter.c b/lib/gmath/solvers_classic_iter.c index 843a6432cf9..2240d860349 100644 --- a/lib/gmath/solvers_classic_iter.c +++ b/lib/gmath/solvers_classic_iter.c @@ -15,6 +15,7 @@ * *****************************************************************************/ +#include #include #include #include @@ -47,23 +48,27 @@ int G_math_solver_sparse_jacobi(G_math_spvector **Asp, double *x, double *b, int rows, int maxit, double sor, double error) { - int i, j, k, center, finished = 0; + unsigned int i, j, center, finished = 0; + + int k; double *Enew; double E, err = 0; + assert(rows >= 0); + Enew = G_alloc_vector(rows); for (k = 0; k < maxit; k++) { err = 0; { if (k == 0) { - for (j = 0; j < rows; j++) { + for (j = 0; j < (unsigned int)rows; j++) { Enew[j] = x[j]; } } - for (i = 0; i < rows; i++) { + for (i = 0; i < (unsigned int)rows; i++) { E = 0; center = 0; for (j = 0; j < Asp[i]->cols; j++) { @@ -73,7 +78,7 @@ int G_math_solver_sparse_jacobi(G_math_spvector **Asp, double *x, double *b, } Enew[i] = x[i] - sor * (E - b[i]) / Asp[i]->values[center]; } - for (j = 0; j < rows; j++) { + for (j = 0; j < (unsigned int)rows; j++) { err += (x[j] - Enew[j]) * (x[j] - Enew[j]); x[j] = Enew[j]; @@ -117,7 +122,9 @@ int G_math_solver_sparse_jacobi(G_math_spvector **Asp, double *x, double *b, int G_math_solver_sparse_gs(G_math_spvector **Asp, double *x, double *b, int rows, int maxit, double sor, double error) { - int i, j, k, finished = 0; + unsigned int i, j, finished = 0; + + int k; double *Enew; @@ -125,17 +132,19 @@ int G_math_solver_sparse_gs(G_math_spvector **Asp, double *x, double *b, int center; + assert(rows >= 0); + Enew = G_alloc_vector(rows); for (k = 0; k < maxit; k++) { err = 0; { if (k == 0) { - for (j = 0; j < rows; j++) { + for (j = 0; j < (unsigned int)rows; j++) { Enew[j] = x[j]; } } - for (i = 0; i < rows; i++) { + for (i = 0; i < (unsigned int)rows; i++) { E = 0; center = 0; for (j = 0; j < Asp[i]->cols; j++) { @@ -145,7 +154,7 @@ int G_math_solver_sparse_gs(G_math_spvector **Asp, double *x, double *b, } Enew[i] = x[i] - sor * (E - b[i]) / Asp[i]->values[center]; } - for (j = 0; j < rows; j++) { + for (j = 0; j < (unsigned int)rows; j++) { err += (x[j] - Enew[j]) * (x[j] - Enew[j]); x[j] = Enew[j]; diff --git a/lib/gmath/solvers_krylov.c b/lib/gmath/solvers_krylov.c index 4075be23d53..7ba2c976db8 100644 --- a/lib/gmath/solvers_krylov.c +++ b/lib/gmath/solvers_krylov.c @@ -15,6 +15,7 @@ * *****************************************************************************/ +#include #include #include #include @@ -747,16 +748,18 @@ G_math_spvector **create_diag_precond_matrix(double **A, G_math_spvector **Asp, { G_math_spvector **Msp; - int i, j, cols = rows; + unsigned int i, j, cols = (unsigned int)rows; double sum; + assert(rows >= 0); + Msp = G_math_alloc_spmatrix(rows); if (A != NULL) { #pragma omp parallel for schedule(static) private(i, j, sum) \ shared(A, Msp, rows, cols, prec) - for (i = 0; i < rows; i++) { + for (i = 0; i < (unsigned int)rows; i++) { G_math_spvector *spvect = G_math_alloc_spvector(1); switch (prec) { @@ -787,7 +790,7 @@ G_math_spvector **create_diag_precond_matrix(double **A, G_math_spvector **Asp, else { #pragma omp parallel for schedule(static) private(i, j, sum) \ shared(Asp, Msp, rows, cols, prec) - for (i = 0; i < rows; i++) { + for (i = 0; i < (unsigned int)rows; i++) { G_math_spvector *spvect = G_math_alloc_spvector(1); switch (prec) { diff --git a/lib/gmath/sparse_matrix.c b/lib/gmath/sparse_matrix.c index 10ab256d03a..f41f14e47f2 100644 --- a/lib/gmath/sparse_matrix.c +++ b/lib/gmath/sparse_matrix.c @@ -15,6 +15,7 @@ * *****************************************************************************/ +#include #include #include #include @@ -145,13 +146,14 @@ void G_math_free_spmatrix(G_math_spvector **Asp, int rows) * */ void G_math_print_spmatrix(G_math_spvector **Asp, int rows) { - int i, j, k, out; + int i, j, out; + unsigned int k; for (i = 0; i < rows; i++) { for (j = 0; j < rows; j++) { out = 0; for (k = 0; k < Asp[i]->cols; k++) { - if (Asp[i]->index[k] == j) { + if (Asp[i]->index[k] == (unsigned int)j) { fprintf(stdout, "%4.5f ", Asp[i]->values[k]); out = 1; } @@ -178,7 +180,8 @@ void G_math_print_spmatrix(G_math_spvector **Asp, int rows) * */ double **G_math_Asp_to_A(G_math_spvector **Asp, int rows) { - int i, j; + int i; + unsigned int j; double **A = NULL; @@ -221,13 +224,15 @@ double **G_math_Asp_to_A(G_math_spvector **Asp, int rows) double **G_math_Asp_to_sband_matrix(G_math_spvector **Asp, int rows, int bandwidth) { - int i, j; + unsigned int i, j; double **A = NULL; + assert(rows >= 0 && bandwidth >= 0); + A = G_alloc_matrix(rows, bandwidth); - for (i = 0; i < rows; i++) { + for (i = 0; i < (unsigned int)rows; i++) { for (j = 0; j < Asp[i]->cols; j++) { if (Asp[i]->index[j] == i) { A[i][0] = Asp[i]->values[j]; @@ -363,7 +368,8 @@ G_math_spvector **G_math_sband_matrix_to_Asp(double **A, int rows, * */ void G_math_Ax_sparse(G_math_spvector **Asp, double *x, double *y, int rows) { - int i, j; + int i; + unsigned int j; double tmp; diff --git a/lib/gpde/n_les.c b/lib/gpde/n_les.c index a82a7481bf3..5d471a90805 100644 --- a/lib/gpde/n_les.c +++ b/lib/gpde/n_les.c @@ -262,8 +262,8 @@ void N_print_les(N_les *les) for (i = 0; i < les->rows; i++) { for (j = 0; j < les->cols; j++) { out = 0; - for (k = 0; k < les->Asp[i]->cols; k++) { - if (les->Asp[i]->index[k] == j) { + for (k = 0; (unsigned int)k < les->Asp[i]->cols; k++) { + if (les->Asp[i]->index[k] == (unsigned int)j) { fprintf(stdout, "%4.5f ", les->Asp[i]->values[k]); out = 1; } diff --git a/lib/gpde/n_les_assemble.c b/lib/gpde/n_les_assemble.c index a3d50b18074..9ec0c76063e 100644 --- a/lib/gpde/n_les_assemble.c +++ b/lib/gpde/n_les_assemble.c @@ -841,12 +841,12 @@ int N_les_integrate_dirichlet_2d(N_les *les, N_geom_data *geom, if (stat > N_CELL_ACTIVE && stat < N_MAX_CELL_STATE) { if (les->type == N_SPARSE_LES) { /*set the rows to zero */ - for (i = 0; i < les->Asp[count]->cols; i++) + for (i = 0; (unsigned int)i < les->Asp[count]->cols; i++) les->Asp[count]->values[i] = 0.0; /*set the cols to zero */ for (i = 0; i < les->rows; i++) { - for (j = 0; j < les->Asp[i]->cols; j++) { - if (les->Asp[i]->index[j] == count) + for (j = 0; (unsigned int)j < les->Asp[i]->cols; j++) { + if (les->Asp[i]->index[j] == (unsigned int)count) les->Asp[i]->values[j] = 0.0; } } @@ -1302,12 +1302,15 @@ int N_les_integrate_dirichlet_3d(N_les *les, N_geom_data *geom, if (stat > N_CELL_ACTIVE && stat < N_MAX_CELL_STATE) { if (les->type == N_SPARSE_LES) { /*set the rows to zero */ - for (i = 0; i < les->Asp[count]->cols; i++) + for (i = 0; (unsigned int)i < les->Asp[count]->cols; + i++) les->Asp[count]->values[i] = 0.0; /*set the cols to zero */ for (i = 0; i < les->rows; i++) { - for (j = 0; j < les->Asp[i]->cols; j++) { - if (les->Asp[i]->index[j] == count) + for (j = 0; (unsigned int)j < les->Asp[i]->cols; + j++) { + if (les->Asp[i]->index[j] == + (unsigned int)count) les->Asp[i]->values[j] = 0.0; } } diff --git a/lib/imagery/iscatt_core.c b/lib/imagery/iscatt_core.c index ea8ddaed32a..9be22132a7f 100644 --- a/lib/imagery/iscatt_core.c +++ b/lib/imagery/iscatt_core.c @@ -518,7 +518,7 @@ static int compute_scatts_from_chunk_row(struct scCats *scatt_conds, "Unable to read from category raster condition file.")); return -1; } - if (n_pixs != (row_size) / sizeof(unsigned char)) { + if (n_pixs != (row_size) / (int)sizeof(unsigned char)) { G_free(rast_pixs); G_free(belongs_pix); G_warning( diff --git a/lib/imagery/sig.c b/lib/imagery/sig.c index ad3ff578985..0006cac74bd 100644 --- a/lib/imagery/sig.c +++ b/lib/imagery/sig.c @@ -385,7 +385,7 @@ char **I_sort_signatures_by_semantic_label(struct Signature *S, mismatches[0] = NULL; mismatches[1] = NULL; total = 1; - for (unsigned int i = 0; i < S->nbands; i++) { + for (unsigned int i = 0; i < (unsigned int)S->nbands; i++) { if (!match1[i]) { if (S->semantic_labels[i]) total = total + strlen(S->semantic_labels[i]); @@ -406,7 +406,7 @@ char **I_sort_signatures_by_semantic_label(struct Signature *S, } } total = 1; - for (unsigned int j = 0; j < R->nfiles; j++) { + for (unsigned int j = 0; j < (unsigned int)R->nfiles; j++) { if (!match2[j]) { if (group_semantic_labels[j]) total = total + strlen(group_semantic_labels[j]); @@ -430,7 +430,7 @@ char **I_sort_signatures_by_semantic_label(struct Signature *S, /* Swap var matrix values in each of classes */ if (!mc1 && !mc2) { for (unsigned int c = S->nsigs; c--;) { - for (unsigned int b1 = 0; b1 < S->nbands; b1++) { + for (unsigned int b1 = 0; b1 < (unsigned int)S->nbands; b1++) { new_means[c][new_order[b1]] = S->sig[c].mean[b1]; for (unsigned int b2 = 0; b2 <= b1; b2++) { if (new_order[b1] > new_order[b2]) { diff --git a/lib/imagery/sigset.c b/lib/imagery/sigset.c index b7d6b69e210..4a8a3c9b963 100644 --- a/lib/imagery/sigset.c +++ b/lib/imagery/sigset.c @@ -542,7 +542,7 @@ char **I_SortSigSetBySemanticLabel(struct SigSet *S, const struct Ref *R) mismatches[0] = NULL; mismatches[1] = NULL; total = 1; - for (unsigned int i = 0; i < S->nbands; i++) { + for (unsigned int i = 0; i < (unsigned int)S->nbands; i++) { if (!match1[i]) { if (S->semantic_labels[i]) total = total + strlen(S->semantic_labels[i]); @@ -563,7 +563,7 @@ char **I_SortSigSetBySemanticLabel(struct SigSet *S, const struct Ref *R) } } total = 1; - for (unsigned int j = 0; j < R->nfiles; j++) { + for (unsigned int j = 0; j < (unsigned int)R->nfiles; j++) { if (!match2[j]) { if (group_semantic_labels[j]) total = total + strlen(group_semantic_labels[j]); @@ -588,10 +588,11 @@ char **I_SortSigSetBySemanticLabel(struct SigSet *S, const struct Ref *R) if (!mc1 && !mc2) { for (unsigned int c = S->nclasses; c--;) { for (unsigned int s = S->ClassSig[c].nsubclasses; s--;) { - for (unsigned int b1 = 0; b1 < S->nbands; b1++) { + for (unsigned int b1 = 0; b1 < (unsigned int)S->nbands; b1++) { new_means[c][s][new_order[b1]] = S->ClassSig[c].SubSig[s].means[b1]; - for (unsigned int b2 = 0; b2 < S->nbands; b2++) { + for (unsigned int b2 = 0; b2 < (unsigned int)S->nbands; + b2++) { new_vars[c][s][new_order[b1]][new_order[b2]] = S->ClassSig[c].SubSig[s].R[b1][b2]; } diff --git a/lib/linkm/init.c b/lib/linkm/init.c index 48257262cd4..9719e724cb9 100644 --- a/lib/linkm/init.c +++ b/lib/linkm/init.c @@ -56,7 +56,8 @@ struct link_head *link_init(int size) Head->max_ptr = 0; Head->Unused = NULL; Head->alloced = PTR_CNT; - Head->unit_size = size < sizeof(VOID_T *) ? sizeof(VOID_T *) : size; + Head->unit_size = + size < (int)sizeof(VOID_T *) ? (int)sizeof(VOID_T *) : size; Head->chunk_size = link_chunk_size; Head->exit_flag = link_exit_flag; diff --git a/lib/pngdriver/draw_bitmap.c b/lib/pngdriver/draw_bitmap.c index a8308537f1c..71654c98732 100644 --- a/lib/pngdriver/draw_bitmap.c +++ b/lib/pngdriver/draw_bitmap.c @@ -49,7 +49,7 @@ void PNG_draw_bitmap(int ncols, int nrows, int threshold, unsigned int k = buf[j * ncols + i]; unsigned int *p = &png.grid[y * png.width + x]; - if (k > threshold) + if (k > (unsigned int)threshold) *p = png.current_color; } } diff --git a/lib/pngdriver/read_bmp.c b/lib/pngdriver/read_bmp.c index 6e58be1678c..f60172e24e4 100644 --- a/lib/pngdriver/read_bmp.c +++ b/lib/pngdriver/read_bmp.c @@ -43,7 +43,7 @@ static int read_bmp_header(const unsigned char *p) if (*p++ != 'M') return 0; - if (get_4(&p) != HEADER_SIZE + png.width * png.height * 4) + if (get_4(&p) != (unsigned int)HEADER_SIZE + png.width * png.height * 4) return 0; get_4(&p); @@ -54,9 +54,9 @@ static int read_bmp_header(const unsigned char *p) if (get_4(&p) != 40) return 0; - if (get_4(&p) != png.width) + if (get_4(&p) != (unsigned int)png.width) return 0; - if (get_4(&p) != -png.height) + if (get_4(&p) != (unsigned int)-png.height) return 0; get_2(&p); @@ -65,7 +65,7 @@ static int read_bmp_header(const unsigned char *p) if (get_4(&p) != 0) return 0; - if (get_4(&p) != png.width * png.height * 4) + if (get_4(&p) != (unsigned int)png.width * png.height * 4) return 0; get_4(&p); diff --git a/lib/psdriver/draw_bitmap.c b/lib/psdriver/draw_bitmap.c index b8f5cc811b0..aed22614166 100644 --- a/lib/psdriver/draw_bitmap.c +++ b/lib/psdriver/draw_bitmap.c @@ -13,7 +13,7 @@ void PS_Bitmap(int ncols, int nrows, int threshold, const unsigned char *buf) for (i = 0; i < ncols; i++) { unsigned int k = buf[j * ncols + i]; - if (k > threshold) + if (k > (unsigned int)threshold) acc |= bit; bit >>= 1; diff --git a/lib/raster/format.c b/lib/raster/format.c index 24cc716868f..e5124bbb860 100644 --- a/lib/raster/format.c +++ b/lib/raster/format.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -95,8 +96,10 @@ static int read_row_ptrs(int nrows, int old, off_t *row_ptr, int fd) { unsigned char nbytes; unsigned char *buf, *b; - int n; - int row; + unsigned int n; + unsigned int row; + + assert(nrows >= 0); /* * pre3.0 row addresses were written directly from the array of off_t's @@ -104,7 +107,7 @@ static int read_row_ptrs(int nrows, int old, off_t *row_ptr, int fd) */ if (old) { - n = (nrows + 1) * sizeof(off_t); + n = ((unsigned int)nrows + 1) * sizeof(off_t); if (read(fd, row_ptr, n) != n) goto badread; return 1; @@ -122,15 +125,15 @@ static int read_row_ptrs(int nrows, int old, off_t *row_ptr, int fd) if (nbytes == 0) goto badread; - n = (nrows + 1) * nbytes; + n = ((unsigned int)nrows + 1) * nbytes; buf = G_malloc(n); if (read(fd, buf, n) != n) goto badread; - for (row = 0, b = buf; row <= nrows; row++) { + for (row = 0, b = buf; row <= (unsigned int)nrows; row++) { off_t v = 0; - for (n = 0; n < (int)nbytes; n++) { + for (n = 0; n < nbytes; n++) { unsigned char c = *b++; if (nbytes > sizeof(off_t) && n < nbytes - sizeof(off_t) && c != 0) diff --git a/lib/raster/get_row.c b/lib/raster/get_row.c index f7def1e5df0..3c7bbf2f24c 100644 --- a/lib/raster/get_row.c +++ b/lib/raster/get_row.c @@ -164,15 +164,17 @@ static void read_data_compressed(int fd, int row, unsigned char *data_buf, n = *nbytes = fcb->nbytes; bufsize = n * fcb->cellhd.cols; - if (fcb->cellhd.compressed < 0 || readamount < bufsize) { + if (fcb->cellhd.compressed < 0 || (size_t)readamount < bufsize) { if (fcb->cellhd.compressed == 1) rle_decompress(data_buf, cmp, n, readamount); else { - if (G_expand(cmp, readamount, data_buf, bufsize, - fcb->cellhd.compressed) != bufsize) + if ((n = G_expand(cmp, readamount, data_buf, bufsize, + fcb->cellhd.compressed)) < 0 || + (unsigned int)n != bufsize) { G_fatal_error( _("Error uncompressing raster data for row %d of <%s>"), row, fcb->name); + } } } else @@ -836,6 +838,7 @@ static int read_null_bits_compressed(int null_fd, unsigned char *flags, int row, off_t t2 = fcb->null_row_ptr[row + 1]; size_t readamount = t2 - t1; unsigned char *compressed_buf; + int res; if (lseek(null_fd, t1, SEEK_SET) < 0) G_fatal_error( @@ -843,7 +846,8 @@ static int read_null_bits_compressed(int null_fd, unsigned char *flags, int row, fcb->name); if (readamount == size) { - if (read(null_fd, flags, size) != size) { + if ((res = read(null_fd, flags, size)) < 0 || + (unsigned int)res != size) { G_fatal_error( _("Error reading compressed null data for row %d of <%s>"), row, fcb->name); @@ -853,7 +857,8 @@ static int read_null_bits_compressed(int null_fd, unsigned char *flags, int row, compressed_buf = G_malloc(readamount); - if (read(null_fd, compressed_buf, readamount) != readamount) { + if ((res = read(null_fd, compressed_buf, readamount)) < 0 || + (unsigned int)res != readamount) { G_free(compressed_buf); G_fatal_error( _("Error reading compressed null data for row %d of <%s>"), row, diff --git a/lib/raster/open.c b/lib/raster/open.c index 14c44fe318d..d547373574f 100644 --- a/lib/raster/open.c +++ b/lib/raster/open.c @@ -466,7 +466,7 @@ void Rast_set_cell_format(int n) R__.nbytes = n + 1; if (R__.nbytes <= 0) R__.nbytes = 1; - if (R__.nbytes > sizeof(CELL)) + if (R__.nbytes > (int)sizeof(CELL)) R__.nbytes = sizeof(CELL); } diff --git a/lib/raster/put_row.c b/lib/raster/put_row.c index 6a355ca9637..44bb95575c0 100644 --- a/lib/raster/put_row.c +++ b/lib/raster/put_row.c @@ -333,7 +333,7 @@ static void put_data(int fd, char *null_buf, const CELL *cell, int row, int n, { struct fileinfo *fcb = &R__.fileinfo[fd]; int compressed = (fcb->open_mode == OPEN_NEW_COMPRESSED); - int len = compressed ? sizeof(CELL) : fcb->nbytes; + int len = compressed ? (int)sizeof(CELL) : fcb->nbytes; unsigned char *work_buf, *wk; ssize_t nwrite; @@ -511,6 +511,7 @@ static void write_null_bits_compressed(const unsigned char *flags, int row, unsigned char *compressed_buf; ssize_t nwrite; size_t cmax; + int res; fcb->null_row_ptr[row] = lseek(fcb->null_fd, 0L, SEEK_CUR); @@ -521,14 +522,16 @@ static void write_null_bits_compressed(const unsigned char *flags, int row, /* compress null bits file with LZ4, see lib/gis/compress.h */ nwrite = G_compress((unsigned char *)flags, size, compressed_buf, cmax, 3); - if (nwrite > 0 && nwrite < size) { - if (write(fcb->null_fd, compressed_buf, nwrite) != nwrite) + if (nwrite > 0 && (size_t)nwrite < size) { + if ((res = write(fcb->null_fd, compressed_buf, nwrite)) < 0 || + (unsigned int)res != nwrite) G_fatal_error( _("Error writing compressed null data for row %d of <%s>: %s"), row, fcb->name, strerror(errno)); } else { - if (write(fcb->null_fd, flags, size) != size) + if ((res = write(fcb->null_fd, flags, size)) < 0 || + (unsigned int)res != size) G_fatal_error( _("Error writing compressed null data for row %d of <%s>: %s"), row, fcb->name, strerror(errno)); @@ -553,6 +556,7 @@ void Rast__write_null_bits(int fd, const unsigned char *flags) int row = fcb->null_cur_row++; off_t offset; size_t size; + int res; size = Rast__null_bitstream_size(fcb->cellhd.cols); @@ -566,7 +570,8 @@ void Rast__write_null_bits(int fd, const unsigned char *flags) if (lseek(fcb->null_fd, offset, SEEK_SET) < 0) G_fatal_error(_("Error writing null row %d of <%s>"), row, fcb->name); - if (write(fcb->null_fd, flags, size) != size) + if ((res = write(fcb->null_fd, flags, size)) < 0 || + (unsigned int)res != size) G_fatal_error(_("Error writing null row %d of <%s>: %s"), row, fcb->name, strerror(errno)); } diff --git a/lib/raster/range.c b/lib/raster/range.c index 087c960ab80..10b5b7bfd14 100644 --- a/lib/raster/range.c +++ b/lib/raster/range.c @@ -329,7 +329,7 @@ int Rast_read_rstats(const char *name, const char *mapset, if (nbytes == 0) return 1; - if (nbytes < 1 || nbytes > sizeof(grass_int64)) { + if (nbytes < 1 || (unsigned char)nbytes > sizeof(grass_int64)) { close(fd); G_debug(1, "Invalid byte count in stats file for <%s>", G_fully_qualified_name(name, mapset)); @@ -454,7 +454,7 @@ void Rast_write_rstats(const char *name, const struct R_stats *rstats) char xdr_buf[2][XDR_DOUBLE_NBYTES]; unsigned char cc[8]; char nbytes; - int i; + unsigned int i; grass_int64 count; Rast_init(); diff --git a/lib/raster3d/cache.c b/lib/raster3d/cache.c index 16f402117cf..aa28845f546 100644 --- a/lib/raster3d/cache.c +++ b/lib/raster3d/cache.c @@ -59,6 +59,7 @@ static int cacheWrite_readFun(int tileIndex, void *tileBuf, void *closure) int index; size_t nBytes; size_t offs, offsLast; + ssize_t res; long int pos; pos = map->index[tileIndex]; @@ -83,7 +84,8 @@ static int cacheWrite_readFun(int tileIndex, void *tileBuf, void *closure) Rast3d_error("cacheWrite_readFun: can't position file"); return 0; } - if (read(map->cacheFD, tileBuf, nBytes) != nBytes) { + if ((res = read(map->cacheFD, tileBuf, nBytes)) < 0 || + (size_t)res != nBytes) { Rast3d_error("cacheWrite_readFun: can't read file"); return 0; } @@ -109,7 +111,8 @@ static int cacheWrite_readFun(int tileIndex, void *tileBuf, void *closure) Rast3d_error("cacheWrite_readFun: can't position file"); return 0; } - if (read(map->cacheFD, xdr, nBytes + sizeof(int)) != nBytes + sizeof(int)) { + if ((res = read(map->cacheFD, xdr, nBytes + sizeof(int))) < 0 || + (size_t)res != nBytes + sizeof(int)) { Rast3d_error("cacheWrite_readFun: can't read file"); return 0; } @@ -118,8 +121,8 @@ static int cacheWrite_readFun(int tileIndex, void *tileBuf, void *closure) Rast3d_error("cacheWrite_readFun: can't position file"); return 0; } - if (write(map->cacheFD, xdr, nBytes + sizeof(int)) != - nBytes + sizeof(int)) { + if ((res = write(map->cacheFD, xdr, nBytes + sizeof(int))) < 0 || + (size_t)res != nBytes + sizeof(int)) { Rast3d_error("cacheWrite_readFun: can't write file"); return 0; } @@ -140,6 +143,7 @@ static int cacheWrite_writeFun(int tileIndex, const void *tileBuf, RASTER3D_Map *map = closure; size_t nBytes; size_t offs; + ssize_t res; if (map->index[tileIndex] != -1) return 1; @@ -152,7 +156,8 @@ static int cacheWrite_writeFun(int tileIndex, const void *tileBuf, Rast3d_error("cacheWrite_writeFun: can't position file"); return 0; } - if (write(map->cacheFD, tileBuf, nBytes) != nBytes) { + if ((res = write(map->cacheFD, tileBuf, nBytes)) < 0 || + (size_t)res != nBytes) { Rast3d_error("cacheWrite_writeFun: can't write file"); return 0; } diff --git a/lib/raster3d/doubleio.c b/lib/raster3d/doubleio.c index f205bfce34e..5e57cd86abc 100644 --- a/lib/raster3d/doubleio.c +++ b/lib/raster3d/doubleio.c @@ -15,7 +15,8 @@ int Rast3d_write_doubles(int fd, int useXdr, const double *i, int nofNum) Rast3d_fatal_error("Rast3d_write_doubles: nofNum out of range"); if (useXdr == RASTER3D_NO_XDR) { - if (write(fd, i, sizeof(double) * nofNum) != sizeof(double) * nofNum) { + if (write(fd, i, sizeof(double) * nofNum) != + (int)sizeof(double) * nofNum) { Rast3d_error("Rast3d_write_doubles: writing to file failed"); return 0; } @@ -25,7 +26,7 @@ int Rast3d_write_doubles(int fd, int useXdr, const double *i, int nofNum) } do { - int j; + unsigned int j; n = nofNum % 1024; if (n == 0) @@ -58,7 +59,8 @@ int Rast3d_read_doubles(int fd, int useXdr, double *i, int nofNum) Rast3d_fatal_error("Rast3d_read_doubles: nofNum out of range"); if (useXdr == RASTER3D_NO_XDR) { - if (read(fd, i, sizeof(double) * nofNum) != sizeof(double) * nofNum) { + if (read(fd, i, sizeof(double) * nofNum) != + (int)sizeof(double) * nofNum) { Rast3d_error("Rast3d_read_doubles: reading from file failed"); return 0; } @@ -68,7 +70,7 @@ int Rast3d_read_doubles(int fd, int useXdr, double *i, int nofNum) } do { - int j; + unsigned int j; n = nofNum % 1024; if (n == 0) diff --git a/lib/raster3d/fpcompress.c b/lib/raster3d/fpcompress.c index 7d0ec7a8565..3ee1975167a 100644 --- a/lib/raster3d/fpcompress.c +++ b/lib/raster3d/fpcompress.c @@ -163,7 +163,7 @@ static void G_fpcompress_rearrangeEncodeFloats(unsigned char *src, int size, /*printf ("%d\n", ((*src & mask) >> nBits) << nBits); */ - if (8 - nBits < precision) { + if (8 - nBits < (unsigned int)precision) { cp1++; /*printf ("%d %d\n", *cp1, (*src & mask) << (8 - nBits)); */ @@ -337,7 +337,7 @@ static void G_fpcompress_rearrangeEncodeDoubles(unsigned char *src, int size, if (nBits && precision) { *cp1 |= (unsigned char)((unsigned char)(*src & mask) >> nBits); - if (8 - nBits < precision) { + if (8 - nBits < (unsigned int)precision) { cp1++; *cp1 = (unsigned char)(((unsigned char)(*src & mask)) << (8 - nBits)); @@ -491,7 +491,7 @@ static void G_fpcompress_rearrangeDecodeFloats(unsigned char *src, int size, if (nBits && precision) { *dst = (unsigned char)((*cp1 << nBits) & mask); - if (8 - nBits < precision) { + if (8 - nBits < (unsigned int)precision) { cp1++; *dst |= (unsigned char)((*cp1 >> (8 - nBits)) & mask); nBits += precision - 8; @@ -658,7 +658,7 @@ static void G_fpcompress_rearrangeDecodeDoubles(unsigned char *src, int size, if (nBits && precision) { *dst = (unsigned char)((*cp1 << nBits) & mask); - if (8 - nBits < precision) { + if (8 - nBits < (unsigned int)precision) { cp1++; *dst |= (unsigned char)((*cp1 >> (8 - nBits)) & mask); nBits += precision - 8; diff --git a/lib/raster3d/fpxdr.c b/lib/raster3d/fpxdr.c index 83c3ed16ff3..3056b704091 100644 --- a/lib/raster3d/fpxdr.c +++ b/lib/raster3d/fpxdr.c @@ -120,13 +120,13 @@ int Rast3d_init_copy_to_xdr(RASTER3D_Map *map, int sType) static int xdr_put(const void *src) { if (isFloat) { - if (xdr_off + RASTER3D_XDR_FLOAT_LENGTH > xdrLength) + if (xdr_off + RASTER3D_XDR_FLOAT_LENGTH > (size_t)xdrLength) return 0; G_xdr_put_float((char *)xdr + xdr_off, src); xdr_off += RASTER3D_XDR_FLOAT_LENGTH; } else { - if (xdr_off + RASTER3D_XDR_DOUBLE_LENGTH > xdrLength) + if (xdr_off + RASTER3D_XDR_DOUBLE_LENGTH > (size_t)xdrLength) return 0; G_xdr_put_double((char *)xdr + xdr_off, src); xdr_off += RASTER3D_XDR_DOUBLE_LENGTH; @@ -202,13 +202,13 @@ int Rast3d_init_copy_from_xdr(RASTER3D_Map *map, int dType) static int xdr_get(void *src) { if (isFloat) { - if (xdr_off + RASTER3D_XDR_FLOAT_LENGTH > xdrLength) + if (xdr_off + RASTER3D_XDR_FLOAT_LENGTH > (size_t)xdrLength) return 0; G_xdr_get_float(src, (char *)xdr + xdr_off); xdr_off += RASTER3D_XDR_FLOAT_LENGTH; } else { - if (xdr_off + RASTER3D_XDR_DOUBLE_LENGTH > xdrLength) + if (xdr_off + RASTER3D_XDR_DOUBLE_LENGTH > (size_t)xdrLength) return 0; G_xdr_get_double(src, (char *)xdr + xdr_off); xdr_off += RASTER3D_XDR_DOUBLE_LENGTH; diff --git a/lib/raster3d/index.c b/lib/raster3d/index.c index 6374d5421af..a73e12219c0 100644 --- a/lib/raster3d/index.c +++ b/lib/raster3d/index.c @@ -46,7 +46,7 @@ static int Rast3d_readIndex(RASTER3D_Map *map) if (indexLength < map->indexLongNbytes * map->nTiles) { /* RLE encoded? */ - if (indexLength > sizeof(long) * map->nTiles) { + if (indexLength > (int)sizeof(long) * map->nTiles) { /*->index large enough? */ tmp2 = Rast3d_malloc(indexLength); @@ -67,7 +67,7 @@ static int Rast3d_readIndex(RASTER3D_Map *map) map->indexLongNbytes * map->nTiles, 1, &dummy1, &dummy2); - if (indexLength > sizeof(long) * map->nTiles) + if (indexLength > (int)sizeof(long) * map->nTiles) Rast3d_free(tmp2); } /* END RLE */ diff --git a/lib/raster3d/intio.c b/lib/raster3d/intio.c index 1ed0956e7aa..c4c2f3aec7d 100644 --- a/lib/raster3d/intio.c +++ b/lib/raster3d/intio.c @@ -15,7 +15,7 @@ int Rast3d_write_ints(int fd, int useXdr, const int *i, int nofNum) Rast3d_fatal_error("Rast3d_write_ints: nofNum out of range"); if (useXdr == RASTER3D_NO_XDR) { - if (write(fd, i, sizeof(int) * nofNum) != sizeof(int) * nofNum) { + if (write(fd, i, sizeof(int) * nofNum) != (int)sizeof(int) * nofNum) { Rast3d_error("Rast3d_write_ints: writing to file failed"); return 0; } @@ -25,7 +25,7 @@ int Rast3d_write_ints(int fd, int useXdr, const int *i, int nofNum) } do { - int j; + unsigned int j; n = nofNum % 1024; if (n == 0) @@ -58,7 +58,7 @@ int Rast3d_read_ints(int fd, int useXdr, int *i, int nofNum) Rast3d_fatal_error("Rast3d_read_ints: nofNum out of range"); if (useXdr == RASTER3D_NO_XDR) { - if (read(fd, i, sizeof(int) * nofNum) != sizeof(int) * nofNum) { + if (read(fd, i, sizeof(int) * nofNum) != (int)sizeof(int) * nofNum) { Rast3d_error("Rast3d_read_ints: reading from file failed"); return 0; } @@ -68,7 +68,7 @@ int Rast3d_read_ints(int fd, int useXdr, int *i, int nofNum) } do { - int j; + unsigned int j; n = nofNum % 1024; if (n == 0) diff --git a/lib/raster3d/long.c b/lib/raster3d/long.c index f06fbed782c..ead8ecef30c 100644 --- a/lib/raster3d/long.c +++ b/lib/raster3d/long.c @@ -49,7 +49,7 @@ void Rast3d_long_decode(unsigned char *source, long *dst, int nofNums, dest += nofNums - 1; while (source != srcStop) { *dest = *source--; - if ((eltLength >= RASTER3D_LONG_LENGTH) && (*dest != 0)) + if ((eltLength >= (int)RASTER3D_LONG_LENGTH) && (*dest != 0)) Rast3d_fatal_error("Rast3d_long_decode: decoded long too long"); dest--; } @@ -61,7 +61,7 @@ void Rast3d_long_decode(unsigned char *source, long *dst, int nofNums, while (source != srcStop) { *dest *= 256; *dest += *source--; - if ((eltLength >= RASTER3D_LONG_LENGTH) && (*dest != 0)) + if ((eltLength >= (int)RASTER3D_LONG_LENGTH) && (*dest != 0)) Rast3d_fatal_error("Rast3d_long_decode: decoded long too long"); dest--; } diff --git a/lib/raster3d/open.c b/lib/raster3d/open.c index 6846a92ff7b..96552236f81 100644 --- a/lib/raster3d/open.c +++ b/lib/raster3d/open.c @@ -140,7 +140,7 @@ void *Rast3d_open_cell_old(const char *name, const char *mapset, } /* if our long is to short to store offsets we can't read the file */ - if (map->indexNbytesUsed > sizeof(long)) + if (map->indexNbytesUsed > (int)sizeof(long)) Rast3d_fatal_error( _("Rast3d_open_cell_old: index does not fit into long")); diff --git a/lib/raster3d/tilemath.c b/lib/raster3d/tilemath.c index c029781a4dc..391233a95d1 100644 --- a/lib/raster3d/tilemath.c +++ b/lib/raster3d/tilemath.c @@ -344,7 +344,7 @@ void Rast3d_compute_optimal_tile_dimension(RASTER3D_Region *region, int type, "%li z %li\n", tileSize, x, y, z); - if (tileSize <= maxSize * 1024) + if (maxSize < 0 || tileSize <= (unsigned int)maxSize * 1024) break; /* Compute weighted tile sizes. Take care that the tile size is computed diff --git a/lib/raster3d/tileread.c b/lib/raster3d/tileread.c index 148bd409113..f8cf1713f2e 100644 --- a/lib/raster3d/tileread.c +++ b/lib/raster3d/tileread.c @@ -92,11 +92,14 @@ static int Rast3d_readTileUncompressed(RASTER3D_Map *map, int tileIndex, int nofNum) { size_t nofBytes; + ssize_t res; nofBytes = nofNum * map->numLengthExtern; - nofBytes = RASTER3D_MIN(nofBytes, map->fileEndPtr - map->index[tileIndex]); + nofBytes = + RASTER3D_MIN(nofBytes, (size_t)map->fileEndPtr - map->index[tileIndex]); - if (read(map->data_fd, xdr, nofBytes) != nofBytes) { + if ((res = read(map->data_fd, xdr, nofBytes)) < 0 || + (size_t)res != nofBytes) { Rast3d_error("Rast3d_readTileUncompressed: can't read file"); return 0; } diff --git a/lib/rst/interp_float/output2d.c b/lib/rst/interp_float/output2d.c index 0ce816c2586..aa4add7b9a4 100644 --- a/lib/rst/interp_float/output2d.c +++ b/lib/rst/interp_float/output2d.c @@ -131,7 +131,7 @@ int IL_output_2d(struct interp_params *params, sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_z) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf1, cell1); @@ -147,7 +147,7 @@ int IL_output_2d(struct interp_params *params, sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_dx) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf2, cell1); @@ -163,7 +163,7 @@ int IL_output_2d(struct interp_params *params, sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_dy) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf3, cell1); @@ -179,7 +179,7 @@ int IL_output_2d(struct interp_params *params, sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_xx) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf4, cell1); @@ -195,7 +195,7 @@ int IL_output_2d(struct interp_params *params, sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_yy) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf5, cell1); @@ -211,7 +211,7 @@ int IL_output_2d(struct interp_params *params, sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_xy) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf6, cell1); diff --git a/lib/rst/interp_float/resout2d.c b/lib/rst/interp_float/resout2d.c index 00b76dd1641..cd8e89d14c1 100644 --- a/lib/rst/interp_float/resout2d.c +++ b/lib/rst/interp_float/resout2d.c @@ -125,7 +125,7 @@ int IL_resample_output_2d( sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_z) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf1, cell1); @@ -141,7 +141,7 @@ int IL_resample_output_2d( sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_dx) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf2, cell1); @@ -157,7 +157,7 @@ int IL_resample_output_2d( sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_dy) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf3, cell1); @@ -173,7 +173,7 @@ int IL_resample_output_2d( sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_xx) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf4, cell1); @@ -189,7 +189,7 @@ int IL_resample_output_2d( sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_yy) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf5, cell1); @@ -205,7 +205,7 @@ int IL_resample_output_2d( sizeof(FCELL), 0); if (fread(cell1, sizeof(FCELL), params->nsizc, params->Tmp_fd_xy) != - params->nsizc) + (size_t)params->nsizc) G_fatal_error(_("RST library temporary file reading error: %s"), strerror(errno)); Rast_put_f_row(cf6, cell1); diff --git a/lib/segment/format.c b/lib/segment/format.c index 8b790a70aec..aa64dff19a1 100644 --- a/lib/segment/format.c +++ b/lib/segment/format.c @@ -219,13 +219,13 @@ static int zero_fill(int fd, off_t nbytes) register int n; /* zero buf */ - n = nbytes > sizeof(buf) ? sizeof(buf) : nbytes; + n = nbytes > (int)sizeof(buf) ? (int)sizeof(buf) : nbytes; b = buf; while (n-- > 0) *b++ = 0; while (nbytes > 0) { - n = nbytes > sizeof(buf) ? sizeof(buf) : nbytes; + n = nbytes > (int)sizeof(buf) ? (int)sizeof(buf) : nbytes; errno = 0; if (write(fd, buf, n) != n) { int err = errno; diff --git a/lib/vector/diglib/plus_struct.c b/lib/vector/diglib/plus_struct.c index b4e00889122..509a8027ff1 100644 --- a/lib/vector/diglib/plus_struct.c +++ b/lib/vector/diglib/plus_struct.c @@ -571,7 +571,7 @@ int dig_Rd_Plus_head(struct gvfile *fp, struct Plus_head *ptr) else ptr->off_t_size = 4; - if (sizeof(off_t) < ptr->off_t_size) { + if (sizeof(off_t) < (size_t)ptr->off_t_size) { G_warning(_("Vector exceeds supported file size limit")); return (-1); } diff --git a/lib/vector/diglib/portable.c b/lib/vector/diglib/portable.c index 5c7bc58cb8c..9eb449390d8 100644 --- a/lib/vector/diglib/portable.c +++ b/lib/vector/diglib/portable.c @@ -172,12 +172,12 @@ int dig__fread_port_O(off_t *buf, size_t cnt, struct gvfile *fp, unsigned char *c1, *c2; if (Cur_Head->off_t_quick) { - if (nat_off_t == port_off_t_size) { + if ((size_t)nat_off_t == port_off_t_size) { ret = dig_fread(buf, port_off_t_size, cnt, fp); if (ret != (int)cnt) return 0; } - else if (nat_off_t > port_off_t_size) { + else if ((size_t)nat_off_t > port_off_t_size) { /* read into buffer */ buf_alloc(cnt * port_off_t_size); ret = dig_fread(buffer, port_off_t_size, cnt, fp); @@ -205,13 +205,13 @@ int dig__fread_port_O(off_t *buf, size_t cnt, struct gvfile *fp, c2 += sizeof(off_t); } } - else if (nat_off_t < port_off_t_size) { + else if ((size_t)nat_off_t < port_off_t_size) { /* should never happen */ G_fatal_error(_("Vector exceeds supported file size limit")); } } else { - if (nat_off_t >= port_off_t_size) { + if ((size_t)nat_off_t >= port_off_t_size) { /* read into buffer */ buf_alloc(cnt * port_off_t_size); ret = dig_fread(buffer, port_off_t_size, cnt, fp); @@ -238,7 +238,7 @@ int dig__fread_port_O(off_t *buf, size_t cnt, struct gvfile *fp, c2 += sizeof(off_t); } } - else if (nat_off_t < port_off_t_size) { + else if ((size_t)nat_off_t < port_off_t_size) { /* should never happen */ G_fatal_error(_("Vector exceeds supported file size limit")); } @@ -640,11 +640,11 @@ int dig__fwrite_port_O(const off_t *buf, size_t cnt, struct gvfile *fp, unsigned char *c1, *c2; if (Cur_Head->off_t_quick) { - if (nat_off_t == port_off_t_size) { + if ((size_t)nat_off_t == port_off_t_size) { if (dig_fwrite(buf, port_off_t_size, cnt, fp) == cnt) return 1; } - else if (nat_off_t > port_off_t_size) { + else if ((size_t)nat_off_t > port_off_t_size) { buf_alloc(cnt * port_off_t_size); c1 = (unsigned char *)buf; c2 = (unsigned char *)buffer; @@ -660,13 +660,13 @@ int dig__fwrite_port_O(const off_t *buf, size_t cnt, struct gvfile *fp, if (dig_fwrite(buffer, port_off_t_size, cnt, fp) == cnt) return 1; } - else if (nat_off_t < port_off_t_size) { + else if ((size_t)nat_off_t < port_off_t_size) { /* should never happen */ G_fatal_error("Vector exceeds supported file size limit"); } } else { - if (nat_off_t >= port_off_t_size) { + if ((size_t)nat_off_t >= port_off_t_size) { buf_alloc(cnt * port_off_t_size); c1 = (unsigned char *)buf; c2 = (unsigned char *)buffer; @@ -679,7 +679,7 @@ int dig__fwrite_port_O(const off_t *buf, size_t cnt, struct gvfile *fp, if (dig_fwrite(buffer, port_off_t_size, cnt, fp) == cnt) return 1; } - else if (nat_off_t < port_off_t_size) { + else if ((size_t)nat_off_t < port_off_t_size) { /* should never happen */ G_fatal_error(_("Vector exceeds supported file size limit")); } @@ -976,7 +976,7 @@ void dig_init_portable(struct Port_info *port, int byte_order) else port->off_t_quick = FALSE; - for (i = 0; i < nat_off_t; i++) { + for (i = 0; i < (size_t)nat_off_t; i++) { if (port->byte_order == ENDIAN_BIG) port->off_t_cnvrt[i] = off_t_cnvrt[i]; else From 48dc0040f9f66f83ddf6c7d130479ba1d5eacb41 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 12 Jan 2023 18:35:39 +0100 Subject: [PATCH 2/4] fix -Wsign-compare warnings in modules --- db/drivers/dbf/table.c | 2 +- display/d.legend/draw.c | 2 +- display/d.linegraph/main.c | 6 +++--- display/d.mon/start.c | 22 +++++++++++----------- general/g.mkfontcap/stroke_fonts.c | 6 +++--- imagery/i.zc/main.c | 10 +++++----- raster/r.coin/format.c | 2 +- raster/r.fill.stats/main.c | 2 +- raster/r.in.ascii/main.c | 2 +- raster/r.in.bin/main.c | 2 +- raster/r.in.mat/main.c | 16 +++++++++------- raster/r.in.png/main.c | 3 ++- raster/r.li/r.li.cwed/utility.c | 4 ++-- raster/r.li/r.li.daemon/daemon.c | 2 +- raster/r.mapcalc/mapcalc.l | 2 +- raster/r.out.bin/main.c | 2 +- raster/r.path/main.c | 18 +++++++++--------- raster/r.regression.multi/main.c | 2 +- raster/r.report/format.c | 2 +- raster/r.resamp.rst/main.c | 3 ++- raster/r.statistics/o_adev.c | 3 ++- raster/r.statistics/o_kurt.c | 3 ++- raster/r.statistics/o_sdev.c | 3 ++- raster/r.statistics/o_skew.c | 3 ++- raster/r.statistics/o_var.c | 3 ++- raster/r.support/main.c | 4 +--- raster/r.univar/r3.univar_main.c | 2 +- raster3d/r3.out.netcdf/main.c | 6 +++--- raster3d/r3.support/main.c | 4 +--- vector/v.decimate/main.c | 2 +- vector/v.delaunay/memory.c | 4 ++-- vector/v.label.sa/annealing.c | 2 +- vector/v.label.sa/labels.c | 3 ++- vector/v.qcount/findquads.c | 6 +++--- vector/v.random/main.c | 4 ++-- vector/v.surf.rst/main.c | 3 ++- vector/v.vol.rst/user1.c | 2 +- visualization/ximgview/main.c | 2 +- 38 files changed, 88 insertions(+), 81 deletions(-) diff --git a/db/drivers/dbf/table.c b/db/drivers/dbf/table.c index b827ccc7db7..9ade4e3d214 100644 --- a/db/drivers/dbf/table.c +++ b/db/drivers/dbf/table.c @@ -58,7 +58,7 @@ int add_table(char *table, char *name) #else res = snprintf(db.tables[db.ntables].file, buf_s, "%s/%s", db.name, name); #endif - if (res >= buf_s) { + if (res < 0 || (size_t)res >= buf_s) { db_d_append_error(_("Unable to add table %s to %s. " "The file path is too long."), name, db.name); diff --git a/display/d.legend/draw.c b/display/d.legend/draw.c index 1e7c6807084..0c8a222f7b1 100644 --- a/display/d.legend/draw.c +++ b/display/d.legend/draw.c @@ -283,7 +283,7 @@ void draw(const char *map_name, int maptype, int color, int thin, int lines, if (maxCat > 0.0) { size_t b_s = sizeof(DispFormat); int log_maxCat = (int)(log10(fabs(maxCat))) + 1; - if (snprintf(DispFormat, b_s, "%%%dd", log_maxCat) >= b_s) + if (snprintf(DispFormat, b_s, "%%%dd", log_maxCat) >= (int)b_s) G_fatal_error( _("Failed to create format string with maxCat=%f."), maxCat); diff --git a/display/d.linegraph/main.c b/display/d.linegraph/main.c index 63908ee593b..343682000d2 100644 --- a/display/d.linegraph/main.c +++ b/display/d.linegraph/main.c @@ -386,7 +386,7 @@ int main(int argc, char **argv) /* TODO: put this to variables, and avoid -Wsign-compare */ for (i = 0; i < 3; i++) { - for (j = 0; j < strlen(title[i]->answer); j++) + for (j = 0; (size_t)j < strlen(title[i]->answer); j++) if (title[i]->answer[j] == '_') title[i]->answer[j] = ' '; } @@ -519,9 +519,9 @@ int main(int argc, char **argv) c = 0; j = 1; if (y_color_opt->answer != NULL) { - for (i = 0; i <= (strlen(y_color_opt->answer)); i++) { + for (i = 0; (size_t)i <= (strlen(y_color_opt->answer)); i++) { if ((y_color_opt->answer[i] == ',') || - (i == (strlen(y_color_opt->answer)))) { + ((size_t)i == (strlen(y_color_opt->answer)))) { color_name[c] = '\0'; in[j].color = D_translate_color(color_name); j++; diff --git a/display/d.mon/start.c b/display/d.mon/start.c index c838eebf179..78d0084afd6 100644 --- a/display/d.mon/start.c +++ b/display/d.mon/start.c @@ -186,34 +186,34 @@ int start_mon(const char *name, const char *output, int select, int width, if (G_strncasecmp(name, "wx", 2) == 0) { sprintf(buf, "GRASS_RENDER_IMMEDIATE=default\n"); /* TODO: read settings from wxGUI */ - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); sprintf(buf, "GRASS_RENDER_FILE_READ=FALSE\n"); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); sprintf(buf, "GRASS_RENDER_TRANSPARENT=TRUE\n"); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); } else { sprintf(buf, "GRASS_RENDER_IMMEDIATE=%s\n", name); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); sprintf(buf, "GRASS_RENDER_FILE_READ=TRUE\n"); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); } sprintf(buf, "GRASS_RENDER_FILE=%s\n", out_file); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); sprintf(buf, "GRASS_RENDER_WIDTH=%d\n", width); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); sprintf(buf, "GRASS_RENDER_HEIGHT=%d\n", height); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); sprintf(buf, "GRASS_LEGEND_FILE=%s\n", leg_file); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); if (bgcolor) { @@ -221,12 +221,12 @@ int start_mon(const char *name, const char *output, int select, int width, sprintf(buf, "GRASS_RENDER_TRANSPARENT=TRUE\n"); else sprintf(buf, "GRASS_RENDER_BACKGROUNDCOLOR=%s\n", bgcolor); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); } if (truecolor) { sprintf(buf, "GRASS_RENDER_TRUECOLOR=TRUE\n"); - if (write(fd, buf, strlen(buf)) != strlen(buf)) + if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) G_fatal_error(_("Failed to write to file <%s>"), env_file); } close(fd); diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index 8c9cd0cd055..d94b0f441c0 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -31,7 +31,7 @@ struct font_desc { }; static struct font_desc *font_descriptions = NULL; -static int num_descriptions = 0; +static unsigned int num_descriptions = 0; static int load_font_descriptions(const char *); static void free_font_descriptions(void); @@ -160,7 +160,7 @@ static int load_font_descriptions(const char *descfile) static const char *get_desc(const char *filename) { - int i; + unsigned int i; for (i = 0; i < num_descriptions; i++) if (G_strcasecmp(filename, font_descriptions[i].filename) == 0) @@ -179,7 +179,7 @@ static const char *get_desc(const char *filename) static void free_font_descriptions(void) { - int i; + unsigned int i; for (i = 0; i < num_descriptions; i++) { G_free(font_descriptions[i].filename); diff --git a/imagery/i.zc/main.c b/imagery/i.zc/main.c index 96e108cabae..322ae3b6c02 100644 --- a/imagery/i.zc/main.c +++ b/imagery/i.zc/main.c @@ -35,11 +35,11 @@ int main(int argc, char *argv[]) CELL *cell_row; float Width; - size_t i, j; /* Loop control variables */ - int or, oc; /* Original dimensions of image */ - int rows, cols; /* Smallest powers of 2 >= number of rows & columns */ - size_t size; /* the length of one side */ - size_t totsize; /* the Total number of data points */ + size_t i, j; /* Loop control variables */ + unsigned int or, oc; /* Original dimensions of image */ + int rows, cols; /* Smallest powers of 2 >= number of rows & columns */ + size_t size; /* the length of one side */ + size_t totsize; /* the Total number of data points */ double *data[2]; /* Data structure containing real & complex values of FFT */ struct GModule *module; diff --git a/raster/r.coin/format.c b/raster/r.coin/format.c index ebdf61534a5..412e2d0c4c3 100644 --- a/raster/r.coin/format.c +++ b/raster/r.coin/format.c @@ -27,7 +27,7 @@ int format_double(double v, char *buf, int n) sprintf(fmt, "%%%d.2lf", n); sprintf(buf, fmt, v); - for (k = n; strlen(buf) > n; k--) { + for (k = n; (ssize_t)strlen(buf) > n; k--) { sprintf(fmt, "%%%d.%dg", n, k); sprintf(buf, fmt, v); } diff --git a/raster/r.fill.stats/main.c b/raster/r.fill.stats/main.c index a994af32dd0..3e36f70f477 100644 --- a/raster/r.fill.stats/main.c +++ b/raster/r.fill.stats/main.c @@ -155,7 +155,7 @@ long int estimate_mem_needed(long int cols, char *mode) void print_weights_matrix(long int rows, long int cols) { int i, j; - int weight_matrix_line_length = 80; + size_t weight_matrix_line_length = 80; char weight_matrix_line_buf[weight_matrix_line_length + 1]; char weight_matrix_weight_buf[weight_matrix_line_length + 1]; diff --git a/raster/r.in.ascii/main.c b/raster/r.in.ascii/main.c index fcac172a593..deb32f889d1 100644 --- a/raster/r.in.ascii/main.c +++ b/raster/r.in.ascii/main.c @@ -233,7 +233,7 @@ int main(int argc, char *argv[]) } for (row = 0; row < nrows; row += 1) { - if (fread(rast, Rast_cell_size(data_type), ncols, ft) != ncols) + if (fread(rast, Rast_cell_size(data_type), ncols, ft) != (size_t)ncols) G_fatal_error(_("Read from file error: %s"), strerror(errno)); Rast_put_row(cf, rast, data_type); G_fseek(ft, sz, SEEK_CUR); diff --git a/raster/r.in.bin/main.c b/raster/r.in.bin/main.c index 8e6b4c48fc8..6ca4f7e2f0e 100644 --- a/raster/r.in.bin/main.c +++ b/raster/r.in.bin/main.c @@ -642,7 +642,7 @@ int main(int argc, char *argv[]) SEEK_SET); } - if (fread(in_buf, bytes, ncols, fp) != ncols) + if (fread(in_buf, bytes, ncols, fp) != (size_t)ncols) G_fatal_error(_("Error reading data")); convert_row(out_buf, in_buf, ncols, is_fp, is_signed, bytes, diff --git a/raster/r.in.mat/main.c b/raster/r.in.mat/main.c index 6b2050b664a..206e6e6f870 100644 --- a/raster/r.in.mat/main.c +++ b/raster/r.in.mat/main.c @@ -212,11 +212,12 @@ int main(int argc, char *argv[]) G_fatal_error(_("Invalid 'map_name' array")); if (data_format == 5) { - if (fread(&map_name, sizeof(char), ncols, fp1) != ncols) + if (fread(&map_name, sizeof(char), ncols, fp1) != (size_t)ncols) G_fatal_error(_("Error reading data")); } else if (data_format == 0) { /* sigh.. */ - if (fread(&map_name_d, sizeof(double), ncols, fp1) != ncols) + if (fread(&map_name_d, sizeof(double), ncols, fp1) != + (size_t)ncols) G_fatal_error(_("Error reading data")); for (i = 0; i < ncols; i++) map_name[i] = (char)map_name_d[i]; @@ -271,12 +272,13 @@ int main(int argc, char *argv[]) G_fatal_error(_("Invalid 'map_title' array")); if (data_format == 5) { - if (fread(&map_title, sizeof(char), ncols, fp1) != ncols) + if (fread(&map_title, sizeof(char), ncols, fp1) != + (size_t)ncols) G_fatal_error(_("Error reading data")); } else if (data_format == 0) { /* sigh.. */ if (fread(&map_name_d, sizeof(double), ncols, fp1) != - ncols) /* note reusing variable */ + (size_t)ncols) /* note reusing variable */ G_fatal_error(_("Error reading data")); for (i = 0; i < ncols; i++) map_title[i] = (char)map_name_d[i]; @@ -306,7 +308,7 @@ int main(int argc, char *argv[]) array_data = G_calloc(mrows * (ncols + 1), Rast_cell_size(map_type)); if (fread(array_data, sizeof(double), (size_t)mrows * ncols, - fp1) != (mrows * ncols)) + fp1) != (size_t)(mrows * ncols)) G_fatal_error(_("Error reading data")); break; case 1: @@ -315,7 +317,7 @@ int main(int argc, char *argv[]) array_data = G_calloc(mrows * (ncols + 1), Rast_cell_size(map_type)); if (fread(array_data, sizeof(float), (size_t)mrows * ncols, - fp1) != (mrows * ncols)) + fp1) != (size_t)(mrows * ncols)) G_fatal_error(_("Error reading data")); break; case 2: @@ -324,7 +326,7 @@ int main(int argc, char *argv[]) array_data = G_calloc(mrows * (ncols + 1), Rast_cell_size(map_type)); if (fread(array_data, sizeof(int), (size_t)mrows * ncols, - fp1) != (mrows * ncols)) + fp1) != (size_t)(mrows * ncols)) G_fatal_error(_("Error reading data")); break; default: diff --git a/raster/r.in.png/main.c b/raster/r.in.png/main.c index ddac5875496..6b808979c22 100644 --- a/raster/r.in.png/main.c +++ b/raster/r.in.png/main.c @@ -333,7 +333,8 @@ static void read_png(void) linesize = png_get_rowbytes(png_ptr, info_ptr); - png_buffer = G_malloc(interlace ? height * linesize : linesize); + png_buffer = + G_malloc((size_t)interlace ? height * linesize : (size_t)linesize); if (interlace) { png_rows = G_malloc(height * sizeof(png_bytep)); diff --git a/raster/r.li/r.li.cwed/utility.c b/raster/r.li/r.li.cwed/utility.c index 447b2442cd1..49b19e5c787 100644 --- a/raster/r.li/r.li.cwed/utility.c +++ b/raster/r.li/r.li.cwed/utility.c @@ -35,8 +35,8 @@ char **split_arg(char *linea, char separatore, long *numerotoken) char **argv; /* token array */ char *copialinea; /* line copy */ - long i; /* find token number */ - long it; /* iterator */ + long i; /* find token number */ + size_t it; /* iterator */ long num; int term; /* =0 if last token has not /0 */ diff --git a/raster/r.li/r.li.daemon/daemon.c b/raster/r.li/r.li.daemon/daemon.c index 39d984f6566..0afa5851107 100644 --- a/raster/r.li/r.li.daemon/daemon.c +++ b/raster/r.li/r.li.daemon/daemon.c @@ -682,7 +682,7 @@ int error_Output(int out, msg m) sprintf(s, "ERROR %i", m.f.f_d.aid); - if (write(out, s, strlen(s)) == strlen(s)) + if (write(out, s, strlen(s)) == (ssize_t)strlen(s)) return 1; else return 0; diff --git a/raster/r.mapcalc/mapcalc.l b/raster/r.mapcalc/mapcalc.l index a9ddd3570b5..fc260ca839c 100644 --- a/raster/r.mapcalc/mapcalc.l +++ b/raster/r.mapcalc/mapcalc.l @@ -58,7 +58,7 @@ static int get_input_stream(char *buf, int max_size) line_read = readline("mapcalc> "); if (!line_read) return YY_NULL; - if (strlen(line_read) > max_size - 2) + if ((ssize_t)strlen(line_read) > max_size - 2) G_fatal_error("input line too long"); strcpy(buf, line_read); strcat(buf, "\n"); diff --git a/raster/r.out.bin/main.c b/raster/r.out.bin/main.c index 21aaa4de731..f7a0f9f2f8f 100644 --- a/raster/r.out.bin/main.c +++ b/raster/r.out.bin/main.c @@ -485,7 +485,7 @@ int main(int argc, char *argv[]) convert_row(out_buf, in_buf, ncols, is_fp, bytes, swap_flag, null_val); - if (fwrite(out_buf, bytes, ncols, fp) != ncols) + if (fwrite(out_buf, bytes, ncols, fp) != (size_t)ncols) G_fatal_error(_("Error writing data")); } diff --git a/raster/r.path/main.c b/raster/r.path/main.c index c678979d8e1..e58995695de 100644 --- a/raster/r.path/main.c +++ b/raster/r.path/main.c @@ -376,7 +376,7 @@ int main(int argc, char **argv) for (i = 0; i < nrows; i++) { Rast_get_d_row(fd, map_buf, i); if (write(val_fd, map_buf, ncols * sizeof(DCELL)) != - ncols * sizeof(DCELL)) { + ncols * (int)sizeof(DCELL)) { G_fatal_error(_("Unable to write to tempfile")); } } @@ -447,7 +447,7 @@ int main(int argc, char **argv) for (i = 0; i < nrows; i++) { Rast_get_c_row(dir_id, dir_buf, i); if (write(dir_fd, dir_buf, ncols * sizeof(CELL)) != - ncols * sizeof(CELL)) { + ncols * (int)sizeof(CELL)) { G_fatal_error(_("Unable to write to tempfile")); } } @@ -464,7 +464,7 @@ int main(int argc, char **argv) *dp *= 45; } if (write(dir_fd, dir_buf, ncols * sizeof(DCELL)) != - ncols * sizeof(DCELL)) { + ncols * (int)sizeof(DCELL)) { G_fatal_error(_("Unable to write to tempfile")); } } @@ -743,7 +743,7 @@ int dir_bitmask(int dir_fd, int val_fd, struct point *startp, lseek(val_fd, (off_t)stackp->row * window->cols * sizeof(DCELL), SEEK_SET); if (read(val_fd, val_buf, window->cols * sizeof(DCELL)) != - window->cols * sizeof(DCELL)) { + window->cols * (int)sizeof(DCELL)) { G_fatal_error(_("Unable to read from temp file")); } val_row = stackp->row; @@ -774,7 +774,7 @@ int dir_bitmask(int dir_fd, int val_fd, struct point *startp, lseek(dir_fd, (off_t)next_row * window->cols * sizeof(CELL), SEEK_SET); if (read(dir_fd, dir_buf, window->cols * sizeof(CELL)) != - window->cols * sizeof(CELL)) { + window->cols * (int)sizeof(CELL)) { G_fatal_error(_("Unable to read from temp file")); } dir_row = next_row; @@ -903,7 +903,7 @@ int dir_bitmask(int dir_fd, int val_fd, struct point *startp, SEEK_SET); if (read(val_fd, val_buf, window->cols * sizeof(DCELL)) != - window->cols * sizeof(DCELL)) { + window->cols * (int)sizeof(DCELL)) { G_fatal_error( _("Unable to read from temp file")); } @@ -1014,7 +1014,7 @@ int dir_degree(int dir_fd, int val_fd, struct point *startp, lseek(val_fd, (off_t)next_row * window->cols * sizeof(DCELL), SEEK_SET); if (read(val_fd, val_buf, window->cols * sizeof(DCELL)) != - window->cols * sizeof(DCELL)) { + window->cols * (int)sizeof(DCELL)) { G_fatal_error(_("Unable to read from temp file")); } val_row = next_row; @@ -1040,7 +1040,7 @@ int dir_degree(int dir_fd, int val_fd, struct point *startp, lseek(dir_fd, (off_t)next_row * window->cols * sizeof(DCELL), SEEK_SET); if (read(dir_fd, dir_buf, window->cols * sizeof(DCELL)) != - window->cols * sizeof(DCELL)) { + window->cols * (int)sizeof(DCELL)) { G_fatal_error(_("Unable to read from temp file")); } dir_row = next_row; @@ -1139,7 +1139,7 @@ int dir_degree(int dir_fd, int val_fd, struct point *startp, SEEK_SET); if (read(val_fd, val_buf, window->cols * sizeof(DCELL)) != - window->cols * sizeof(DCELL)) { + window->cols * (int)sizeof(DCELL)) { G_fatal_error(_("Unable to read from temp file")); } val_row = next_row; diff --git a/raster/r.regression.multi/main.c b/raster/r.regression.multi/main.c index d4cf0378244..4477876d462 100644 --- a/raster/r.regression.multi/main.c +++ b/raster/r.regression.multi/main.c @@ -321,7 +321,7 @@ int main(int argc, char *argv[]) } G_percent(rows, rows, 2); - if (count < n_predictors + 1) + if (count < (unsigned int)n_predictors + 1) G_fatal_error(_("Not enough valid cells available")); for (k = 0; k <= n_predictors; k++) { diff --git a/raster/r.report/format.c b/raster/r.report/format.c index 899a7258286..df267ce59cc 100644 --- a/raster/r.report/format.c +++ b/raster/r.report/format.c @@ -24,7 +24,7 @@ int format_parms(double v, int *n, int *dp, int *eformat, int e_option) else scient_format(v, buf, *n, *dp); - if (strlen(buf) <= *n) + if ((int)strlen(buf) <= *n) break; if (*dp) { diff --git a/raster/r.resamp.rst/main.c b/raster/r.resamp.rst/main.c index 7087b75abbb..31bce0cdd3b 100644 --- a/raster/r.resamp.rst/main.c +++ b/raster/r.resamp.rst/main.c @@ -545,7 +545,8 @@ static FILE *create_temp_file(const char *name, char **tmpname) G_fatal_error(_("Unable to open temporary file <%s>"), *tmpname); for (i = 0; i < nsizr; i++) { - if (fwrite(zero_array_cell, sizeof(FCELL), nsizc, fp) != nsizc) { + if (fwrite(zero_array_cell, sizeof(FCELL), nsizc, fp) != + (size_t)nsizc) { clean(); G_fatal_error(_("Error writing temporary file <%s>"), *tmpname); } diff --git a/raster/r.statistics/o_adev.c b/raster/r.statistics/o_adev.c index 924102365d8..8c20f1f380a 100644 --- a/raster/r.statistics/o_adev.c +++ b/raster/r.statistics/o_adev.c @@ -17,7 +17,8 @@ int o_adev(const char *basemap, const char *covermap, const char *outputmap, { struct Popen stats_child, reclass_child; FILE *stats, *reclass; - int first, mem, i, count; + int first, i, count; + size_t mem; long basecat, covercat, catb, catc; double value, adev, x; double *tab; diff --git a/raster/r.statistics/o_kurt.c b/raster/r.statistics/o_kurt.c index 6de0f8f2ebe..b6383811dd4 100644 --- a/raster/r.statistics/o_kurt.c +++ b/raster/r.statistics/o_kurt.c @@ -17,7 +17,8 @@ int o_kurt(const char *basemap, const char *covermap, const char *outputmap, { struct Popen stats_child, reclass_child; FILE *stats, *reclass; - int first, mem, i, count; + int first, i, count; + size_t mem; long basecat, covercat, catb, catc; double value, var, x; double *tab; diff --git a/raster/r.statistics/o_sdev.c b/raster/r.statistics/o_sdev.c index f7a69b425ff..4a39cd76559 100644 --- a/raster/r.statistics/o_sdev.c +++ b/raster/r.statistics/o_sdev.c @@ -17,7 +17,8 @@ int o_sdev(const char *basemap, const char *covermap, const char *outputmap, { struct Popen stats_child, reclass_child; FILE *stats, *reclass; - int first, mem, i, count; + int first, i, count; + size_t mem; long basecat, covercat, catb, catc; double value, sdev, x; double *tab; diff --git a/raster/r.statistics/o_skew.c b/raster/r.statistics/o_skew.c index ae528bdb476..e08c97e5951 100644 --- a/raster/r.statistics/o_skew.c +++ b/raster/r.statistics/o_skew.c @@ -17,7 +17,8 @@ int o_skew(const char *basemap, const char *covermap, const char *outputmap, { struct Popen stats_child, reclass_child; FILE *stats, *reclass; - int first, mem, i, count; + int first, i, count; + size_t mem; long basecat, covercat, catb, catc; double value, var, x; double *tab; diff --git a/raster/r.statistics/o_var.c b/raster/r.statistics/o_var.c index 49f571d17f6..1e880d0026f 100644 --- a/raster/r.statistics/o_var.c +++ b/raster/r.statistics/o_var.c @@ -17,7 +17,8 @@ int o_var(const char *basemap, const char *covermap, const char *outputmap, { struct Popen stats_child, reclass_child; FILE *stats, *reclass; - int first, mem, i, count; + int first, i, count; + size_t mem; long basecat, covercat, catb, catc; double value, vari, x; double *tab; diff --git a/raster/r.support/main.c b/raster/r.support/main.c index dfed5f11428..061a62cd232 100644 --- a/raster/r.support/main.c +++ b/raster/r.support/main.c @@ -233,9 +233,7 @@ int main(int argc, char *argv[]) * the hist file. bug? */ /* Should be RECORD_LEN, but r.info truncates at > 71 chars */ if (strlen(history_opt->answer) > 71) { - int i; - - for (i = 0; i < strlen(history_opt->answer); i += 71) { + for (unsigned int i = 0; i < strlen(history_opt->answer); i += 71) { char buf[72]; strncpy(buf, &history_opt->answer[i], sizeof(buf) - 1); diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index 0a0acf170fb..f0a8c71b09b 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -200,7 +200,7 @@ int main(int argc, char *argv[]) n_zones = 1; stats = create_univar_stat_struct(map_type, i); - for (i = 0; i < n_zones; i++) { + for (i = 0; i < (unsigned int)n_zones; i++) { unsigned int j; for (j = 0; j < stats[i].n_perc; j++) { diff --git a/raster3d/r3.out.netcdf/main.c b/raster3d/r3.out.netcdf/main.c index bf4d4abb666..8e6e6bc0add 100644 --- a/raster3d/r3.out.netcdf/main.c +++ b/raster3d/r3.out.netcdf/main.c @@ -473,18 +473,18 @@ static void write_netcdf_header(int ncid, RASTER3D_Region *region, int *varid, * dimensions * */ - for (i = 0; i < region->cols; i++) { + for (i = 0; i < (unsigned int)region->cols; i++) { c = region->west + i * region->ew_res + 0.5 * region->ew_res; nc_put_var1_float(ncid, lon_varid, &i, &c); } - for (i = 0; i < region->rows; i++) { + for (i = 0; i < (unsigned int)region->rows; i++) { /* c = region->south + i * region->ns_res + 0.5 * region->ns_res; */ c = region->north - i * region->ns_res - 0.5 * region->ns_res; nc_put_var1_float(ncid, lat_varid, &i, &c); } - for (i = 0; i < region->depths; i++) { + for (i = 0; i < (unsigned int)region->depths; i++) { if (is_time) { c = i * region->tb_res; time = (int)c; diff --git a/raster3d/r3.support/main.c b/raster3d/r3.support/main.c index eab0b713dec..f1f57796865 100644 --- a/raster3d/r3.support/main.c +++ b/raster3d/r3.support/main.c @@ -193,9 +193,7 @@ int main(int argc, char *argv[]) * the hist file. bug? */ /* Should be RECORD_LEN, but r.info truncates at > 71 chars */ if (strlen(history_opt->answer) > 71) { - int i; - - for (i = 0; i < strlen(history_opt->answer); i += 71) { + for (unsigned int i = 0; i < strlen(history_opt->answer); i += 71) { char buf[72]; strncpy(buf, &history_opt->answer[i], sizeof(buf) - 1); diff --git a/vector/v.decimate/main.c b/vector/v.decimate/main.c index 85787da8593..9910596c0d3 100644 --- a/vector/v.decimate/main.c +++ b/vector/v.decimate/main.c @@ -37,7 +37,7 @@ static int if_add_point(struct DecimationPoint *point, void *point_data, /* according to cat (which could be cluster, return or class) */ struct DecimationContext *dc = context; double zdiff = dc->zdiff; - int j; + unsigned int j; /* TODO: use something like Vect_cat_in_cat_list? */ for (j = 0; j < npoints; j++) { diff --git a/vector/v.delaunay/memory.c b/vector/v.delaunay/memory.c index f70a6220ff4..d47a4cb8769 100644 --- a/vector/v.delaunay/memory.c +++ b/vector/v.delaunay/memory.c @@ -56,7 +56,7 @@ static unsigned int n_free_e; void alloc_memory(unsigned int n) { struct edge *e; - int i; + unsigned int i; /* Sites storage. */ sites = (struct vertex *)G_calloc(n, sizeof(struct vertex)); @@ -95,7 +95,7 @@ void realloc_sites(unsigned int n) void alloc_edges(unsigned int n) { struct edge *e; - int i; + unsigned int i; /* Edges. Euler's formula - at most 3n edges on a set of n sites */ n_free_e = 3 * n; diff --git a/vector/v.label.sa/annealing.c b/vector/v.label.sa/annealing.c index 986267893e9..a271051e53c 100644 --- a/vector/v.label.sa/annealing.c +++ b/vector/v.label.sa/annealing.c @@ -115,7 +115,7 @@ void simulate_annealing(label_t *labels, int n_labels, struct params *p) } } /* decrease immediately */ - if (consec_successes > (5 * n_labels)) { + if (consec_successes > (unsigned int)(5 * n_labels)) { consec_successes = 0; break; } diff --git a/vector/v.label.sa/labels.c b/vector/v.label.sa/labels.c index 6b9ffc248e3..3141f7c583c 100644 --- a/vector/v.label.sa/labels.c +++ b/vector/v.label.sa/labels.c @@ -41,7 +41,8 @@ static double buffer = 0.0; label_t *labels_init(struct params *p, int *n_labels) { label_t *labels; - int legal_types, layer, i = 0, error, sql_len; + int legal_types, layer, error, sql_len; + unsigned int i = 0; size_t label_sz; struct field_info *fi; dbDriver *driver; diff --git a/vector/v.qcount/findquads.c b/vector/v.qcount/findquads.c index 93706bdfb45..7f8c447710c 100644 --- a/vector/v.qcount/findquads.c +++ b/vector/v.qcount/findquads.c @@ -21,7 +21,7 @@ COOR *find_quadrats(int n, double r, struct Cell_head window) { int i = 1, j, overlapped; - unsigned k; + unsigned int k; double east, north, e_max, e_min, n_max, n_min; COOR *quads = NULL; @@ -55,10 +55,10 @@ COOR *find_quadrats(int n, double r, struct Cell_head window) j = -1; } } - if (k == n * n) + if (k == (unsigned int)n * n) G_warning("Having difficulties fitting that many circles with " "that radius"); - if (k == 2 * n * n) + if (k == (unsigned int)2 * n * n) G_fatal_error("Maximum number of iterations exceeded\nTry " "smaller radius or smaller number of quads"); } diff --git a/vector/v.random/main.c b/vector/v.random/main.c index edc15cb4225..cfc4a06fceb 100644 --- a/vector/v.random/main.c +++ b/vector/v.random/main.c @@ -359,7 +359,7 @@ int main(int argc, char *argv[]) count = 0; - for (i = 1; i <= nareas; i++) { + for (i = 1; i <= (unsigned int)nareas; i++) { if (!Vect_get_area_centroid(&In, i)) continue; @@ -481,7 +481,7 @@ int main(int argc, char *argv[]) cat_area = -1; if (field > 0) { if (cat_list) { - for (i = 0; i < Cats->n_cats; i++) { + for (i = 0; i < (unsigned int)Cats->n_cats; i++) { if (Cats->field[i] == field && Vect_cat_in_cat_list(Cats->cat[i], cat_list)) { cat_area = Cats->cat[i]; diff --git a/vector/v.surf.rst/main.c b/vector/v.surf.rst/main.c index 38e9d94eeca..95f10e14fc2 100644 --- a/vector/v.surf.rst/main.c +++ b/vector/v.surf.rst/main.c @@ -899,7 +899,8 @@ static FILE *create_temp_file(const char *name, char **tmpname) G_fatal_error(_("Unable to open temporary file <%s>"), *tmpname); for (i = 0; i < n_rows; i++) { - if (fwrite(zero_array_cell, sizeof(FCELL), n_cols, fp) != n_cols) { + if (fwrite(zero_array_cell, sizeof(FCELL), n_cols, fp) != + (size_t)n_cols) { clean(); G_fatal_error(_("Error writing temporary file <%s>"), *tmpname); } diff --git a/vector/v.vol.rst/user1.c b/vector/v.vol.rst/user1.c index 1fc4425d91d..3bf36368b79 100644 --- a/vector/v.vol.rst/user1.c +++ b/vector/v.vol.rst/user1.c @@ -409,7 +409,7 @@ int OUTGR() G_fseek(Tmp_fd_cell, ((off_t)(nsizr - 1 - i) * nsizc * sizeof(FCELL)), 0); read_val = fread(cell, sizeof(FCELL), nsizc, Tmp_fd_cell); - if (read_val != nsizc) { + if (read_val != (size_t)nsizc) { clean(); G_fatal_error(_("Unable to read data from temp file")); } diff --git a/visualization/ximgview/main.c b/visualization/ximgview/main.c index 8da60efb32c..1194f2b6fec 100644 --- a/visualization/ximgview/main.c +++ b/visualization/ximgview/main.c @@ -226,7 +226,7 @@ static int read_bmp_header(const unsigned char *p) if (get_4(&p) != 0) return 0; - if (get_4(&p) != i_width * i_height * 4) + if (get_4(&p) != (unsigned int)i_width * i_height * 4) return 0; if (size != HEADER_SIZE + i_width * i_height * 4) From 8a05a47c232a47a2b887159a66751135429acff6 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 19 Jan 2023 08:53:35 +0100 Subject: [PATCH 3/4] cast before multiplication to prevent possible overflow (CodeQL) --- raster/r.in.png/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/raster/r.in.png/main.c b/raster/r.in.png/main.c index 6b808979c22..c5df965d5bc 100644 --- a/raster/r.in.png/main.c +++ b/raster/r.in.png/main.c @@ -333,8 +333,8 @@ static void read_png(void) linesize = png_get_rowbytes(png_ptr, info_ptr); - png_buffer = - G_malloc((size_t)interlace ? height * linesize : (size_t)linesize); + png_buffer = G_malloc((size_t)interlace ? (size_t)height * linesize + : (size_t)linesize); if (interlace) { png_rows = G_malloc(height * sizeof(png_bytep)); From 7c6892b3dc28aaf47716b4a3ae21df86bfcbe896 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 19 Jan 2023 11:50:18 +0100 Subject: [PATCH 4/4] cast before multiplication to prevent possible overflow (CodeQL) 2 --- lib/raster/get_row.c | 2 +- lib/raster3d/tileread.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/raster/get_row.c b/lib/raster/get_row.c index 3c7bbf2f24c..411bbfa42d5 100644 --- a/lib/raster/get_row.c +++ b/lib/raster/get_row.c @@ -163,7 +163,7 @@ static void read_data_compressed(int fd, int row, unsigned char *data_buf, /* pre 3.0 compression */ n = *nbytes = fcb->nbytes; - bufsize = n * fcb->cellhd.cols; + bufsize = (size_t)n * fcb->cellhd.cols; if (fcb->cellhd.compressed < 0 || (size_t)readamount < bufsize) { if (fcb->cellhd.compressed == 1) rle_decompress(data_buf, cmp, n, readamount); diff --git a/lib/raster3d/tileread.c b/lib/raster3d/tileread.c index f8cf1713f2e..d490732d4d7 100644 --- a/lib/raster3d/tileread.c +++ b/lib/raster3d/tileread.c @@ -94,7 +94,7 @@ static int Rast3d_readTileUncompressed(RASTER3D_Map *map, int tileIndex, size_t nofBytes; ssize_t res; - nofBytes = nofNum * map->numLengthExtern; + nofBytes = (size_t)nofNum * map->numLengthExtern; nofBytes = RASTER3D_MIN(nofBytes, (size_t)map->fileEndPtr - map->index[tileIndex]);