diff --git a/CMakeLists.txt b/CMakeLists.txt index 80656e15..ece02309 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,10 @@ if(NOT MSVC) # Use default warnings if MSVC otherwise inundated if(C_COMPILER_FLAG_WSHADOW) add_compile_options("-Wshadow") endif() + check_c_compiler_flag("-Wshorten-64-to-32" C_COMPILER_FLAG_WSHORTEN64TO32) + if(C_COMPILER_FLAG_WSHORTEN64TO32) + add_compile_options("-Wshorten-64-to-32") + endif() check_c_compiler_flag("-Wundef" C_COMPILER_FLAG_WUNDEF) if(C_COMPILER_FLAG_WUNDEF) add_compile_options("-Wundef") diff --git a/backend/2of5.c b/backend/2of5.c index aafee388..dd629c2c 100644 --- a/backend/2of5.c +++ b/backend/2of5.c @@ -1,7 +1,7 @@ /* 2of5.c - Handles non-interleaved Code 2 of 5 barcodes */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -103,7 +103,7 @@ static int c25_common(struct zint_symbol *symbol, const unsigned char source[], memcpy(d, start_stop[1], start_length - 1); d += start_length - 1; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); /* Exclude check digit from HRT if hidden */ z_hrt_cpy_nochk(symbol, local_source, length - (symbol->option_2 == 2)); diff --git a/backend/2of5inter.c b/backend/2of5inter.c index 83d27105..7873197c 100644 --- a/backend/2of5inter.c +++ b/backend/2of5inter.c @@ -1,7 +1,7 @@ /* 2of5inter.c - Handles Code 2 of 5 Interleaved */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -96,7 +96,7 @@ INTERNAL int zint_c25_inter_common(struct zint_symbol *symbol, unsigned char sou memcpy(d, "311", 3); d += 3; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (!dont_set_height) { if (symbol->output_options & COMPLIANT_HEIGHT) { diff --git a/backend/auspost.c b/backend/auspost.c index 8f6b2f15..2d2b562d 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -1,7 +1,7 @@ /* auspost.c - Handles Australia Post 4-State Barcode */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -76,7 +76,7 @@ static unsigned char aus_convert_pattern(const char data, const int shift) { /* Adds Reed-Solomon error correction to auspost */ static char *aus_rs_error(const char data_pattern[], char *d) { - const int length = d - data_pattern; + const int length = (int) (d - data_pattern); int reader, triple_writer; unsigned char triple[31]; unsigned char result[5]; @@ -228,7 +228,7 @@ INTERNAL int zint_auspost(struct zint_symbol *symbol, unsigned char source[], in } /* Filler bar */ - h = d - data_pattern; + h = (int) (d - data_pattern); switch (h) { case 22: case 37: @@ -248,7 +248,7 @@ INTERNAL int zint_auspost(struct zint_symbol *symbol, unsigned char source[], in /* Turn the symbol into a bar pattern ready for plotting */ writer = 0; - h = d - data_pattern; + h = (int) (d - data_pattern); for (loopey = 0; loopey < h; loopey++) { if (data_pattern[loopey] == '1' || data_pattern[loopey] == '0') { z_set_module(symbol, 0, writer); diff --git a/backend/bc412.c b/backend/bc412.c index 79074989..1e3c8e36 100644 --- a/backend/bc412.c +++ b/backend/bc412.c @@ -1,7 +1,7 @@ /* bc412.c - Handles IBM BC412 (SEMI T1-95) symbology */ /* libzint - the open source barcode library - Copyright (C) 2022-2025 Robin Stuart + Copyright (C) 2022-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -130,7 +130,7 @@ INTERNAL int zint_bc412(struct zint_symbol *symbol, unsigned char source[], int memcpy(d, "111", 3); d += 3; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { /* SEMI T1-95 Table 1 "Module" (Character) Height 2mm ± 0.025mm, using Module Spacing 0.12mm ± 0.025mm as diff --git a/backend/channel.c b/backend/channel.c index 785ab191..82e834da 100644 --- a/backend/channel.c +++ b/backend/channel.c @@ -240,7 +240,7 @@ INTERNAL int zint_channel(struct zint_symbol *symbol, unsigned char source[], in *d++ = z_itoc(B[i]); } - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { /* ANSI/AIM BC12-1998 gives min height as 5mm or 15% of length; X left as application specification so use diff --git a/backend/codabar.c b/backend/codabar.c index 4ba1e6e2..f9736009 100644 --- a/backend/codabar.c +++ b/backend/codabar.c @@ -1,7 +1,7 @@ /* codabar.c - Handles Codabar */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -115,7 +115,7 @@ INTERNAL int zint_codabar(struct zint_symbol *symbol, unsigned char source[], in } } - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { /* BS EN 798:1995 4.4.1 (d) max of 5mm / 0.43mm (X max) ~ 11.628 or 15% of width where (taking N = diff --git a/backend/codablock.c b/backend/codablock.c index 7abcdcd7..543310e7 100644 --- a/backend/codablock.c +++ b/backend/codablock.c @@ -1,7 +1,7 @@ /* codablock.c - Handles Codablock-F */ /* libzint - the open source barcode library - Copyright (C) 2016-2025 Harald Oehlmann + Copyright (C) 2016-2026 Harald Oehlmann Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -861,7 +861,7 @@ INTERNAL int zint_codablockf(struct zint_symbol *symbol, unsigned char source[], } memcpy(d, "2331112", 7); /* Stop character (106, not in `zint_C128Table[]`) */ d += 7; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); } if (symbol->output_options & COMPLIANT_HEIGHT) { diff --git a/backend/code.c b/backend/code.c index cb5cc5d7..af46fff3 100644 --- a/backend/code.c +++ b/backend/code.c @@ -1,7 +1,7 @@ /* code.c - Handles Code 39, 39+, 93 and VIN */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -174,7 +174,7 @@ INTERNAL int zint_code39(struct zint_symbol *symbol, unsigned char source[], int if (symbol->symbology == BARCODE_LOGMARS || symbol->symbology == BARCODE_HIBC_39) { /* LOGMARS and HIBC use wider 'wide' bars than normal Code 39 */ - counter = d - dest; + counter = (int) (d - dest); for (i = 0; i < counter; i++) { if (dest[i] == '2') { dest[i] = '3'; @@ -186,7 +186,7 @@ INTERNAL int zint_code39(struct zint_symbol *symbol, unsigned char source[], int printf("Barspaces: %.*s\n", (int) (d - dest), dest); } - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { if (symbol->symbology == BARCODE_LOGMARS) { @@ -261,7 +261,7 @@ INTERNAL int zint_excode39(struct zint_symbol *symbol, unsigned char source[], i memcpy(b, EC39Ctrl[source[i]], 2); b += EC39Ctrl[source[i]][1] ? 2 : 1; } - if (b - buffer > 86) { + if ((int) (b - buffer) > 86) { return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 317, "Input too long, requires %d symbol characters (maximum 86)", (int) (b - buffer)); } @@ -275,7 +275,7 @@ INTERNAL int zint_excode39(struct zint_symbol *symbol, unsigned char source[], i } /* Then send the buffer to the C39 function */ - if ((error_number = zint_code39(symbol, buffer, b - buffer)) >= ZINT_ERROR) { + if ((error_number = zint_code39(symbol, buffer, (int) (b - buffer))) >= ZINT_ERROR) { return error_number; } @@ -341,7 +341,7 @@ INTERNAL int zint_code93(struct zint_symbol *symbol, unsigned char source[], int } /* Now we can check the true length of the barcode */ - h = b - buffer; + h = (int) (b - buffer); if (h > 123) { return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 332, "Input too long, requires %d symbol characters (maximum 123)", h); @@ -394,7 +394,7 @@ INTERNAL int zint_code93(struct zint_symbol *symbol, unsigned char source[], int memcpy(d, "1111411", 7); d += 7; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { /* ANSI/AIM BC5-1995 Section 2.6 minimum height 0.2" or 15% of symbol length, whichever is greater @@ -504,7 +504,7 @@ INTERNAL int zint_vin(struct zint_symbol *symbol, unsigned char source[], int le memcpy(d, C39Table[43], 9); d += 9; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); z_hrt_cpy_nochk(symbol, source, length); diff --git a/backend/code11.c b/backend/code11.c index 7bd2ad62..c308b04b 100644 --- a/backend/code11.c +++ b/backend/code11.c @@ -1,7 +1,7 @@ /* code11.c - Handles Code 11 */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -142,7 +142,7 @@ INTERNAL int zint_code11(struct zint_symbol *symbol, unsigned char source[], int memcpy(d, C11Table[11], 5); d += 5; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); /* TODO: Find documentation on BARCODE_CODE11 dimensions/height */ diff --git a/backend/code128.c b/backend/code128.c index be8e7e9b..ef8343f0 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -336,7 +336,7 @@ static void c128_expand(struct zint_symbol *symbol, int values[C128_VALUES_MAX], } #endif - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); } /* Helper to set `priority` array based on flags */ diff --git a/backend/code16k.c b/backend/code16k.c index df8bd9ee..c225843c 100644 --- a/backend/code16k.c +++ b/backend/code16k.c @@ -1,7 +1,7 @@ /* code16k.c - Handles Code 16k stacked symbology */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -560,7 +560,7 @@ INTERNAL int zint_code16k(struct zint_symbol *symbol, unsigned char source[], in /* Write the information into the symbol */ writer = 0; flip_flop = 1; - for (mx_reader = 0, len = d - width_pattern; mx_reader < len; mx_reader++) { + for (mx_reader = 0, len = (int) (d - width_pattern); mx_reader < len; mx_reader++) { for (looper = 0; looper < z_ctoi(width_pattern[mx_reader]); looper++) { if (flip_flop == 1) { z_set_module(symbol, current_row, writer); diff --git a/backend/code49.c b/backend/code49.c index 2ab1da02..8c460dc7 100644 --- a/backend/code49.c +++ b/backend/code49.c @@ -1,7 +1,7 @@ /* code49.c - Handles Code 49 */ /* libzint - the open source barcode library - Copyright (C) 2009-2025 Robin Stuart + Copyright (C) 2009-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -79,7 +79,7 @@ INTERNAL int zint_code49(struct zint_symbol *symbol, unsigned char source[], int codeword_count = 0; i = 0; - h = d - intermediate; + h = (int) (d - intermediate); do { if (z_isdigit(intermediate[i])) { /* Numeric data */ diff --git a/backend/common.c b/backend/common.c index ae40691b..d1cb326d 100644 --- a/backend/common.c +++ b/backend/common.c @@ -161,7 +161,7 @@ INTERNAL int z_posn(const char set_string[], const char data) { for (s = set_string; *s; s++) { if (data == *s) { - return s - set_string; + return (int) (s - set_string); } } return -1; diff --git a/backend/gs1.c b/backend/gs1.c index a2d38a47..93a31fc9 100644 --- a/backend/gs1.c +++ b/backend/gs1.c @@ -86,7 +86,7 @@ static int gs1_numeric(const unsigned char *data, int data_len, int offset, int for (; d < de; d++) { if (!z_isdigit(*d)) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Non-numeric character '%c'", *d); } } @@ -136,7 +136,7 @@ static int gs1_cset82(const unsigned char *data, int data_len, int offset, int m for (; d < de; d++) { if (*d < '!' || *d > 'z' || gs1_c82[*d - '!'] == 82) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid CSET 82 character '%c'", *d); } } @@ -164,7 +164,7 @@ static int gs1_cset39(const unsigned char *data, int data_len, int offset, int m /* 0-9, A-Z and "#", "-", "/" */ if ((*d < '0' && *d != '#' && *d != '-' && *d != '/') || (*d > '9' && *d < 'A') || *d > 'Z') { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid CSET 39 character '%c'", *d); } } @@ -196,7 +196,7 @@ static int gs1_cset64(const unsigned char *data, int data_len, int offset, int m break; } *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid CSET 64 character '%c'", *d); } } @@ -232,7 +232,7 @@ static int gs1_csum(const unsigned char *data, int data_len, int offset, int min } if (checksum != *d - '0') { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Bad checksum '%c', expected '%c'", *d, checksum + '0'); } } @@ -274,7 +274,7 @@ static int gs1_csumalpha(const unsigned char *data, int data_len, int offset, in if (de[0] != c1 || de[1] != c2) { *p_err_no = 3; - *p_err_posn = (de - data) + 1; + *p_err_posn = (int) (de - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Bad checksum '%.2s', expected '%c%c'", de, c1, c2); } } @@ -665,12 +665,12 @@ static int gs1_pcenc(const unsigned char *data, int data_len, int offset, int mi if (*d == '%') { if (de - d < 3) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Invalid % escape"); } if (strchr(hex_chars, *(++d)) == NULL || strchr(hex_chars, *(++d)) == NULL) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Invalid character for percent encoding"); } } @@ -858,19 +858,19 @@ static int gs1_iban(const unsigned char *data, int data_len, int offset, int min /* 1st 2 chars alphabetic country code */ if (!z_isupper(d[0]) || !z_isupper(d[1])) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Non-alphabetic IBAN country code '%.2s'", d); } if (!iso3166_alpha2((const char *) d)) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid IBAN country code '%.2s'", d); } d += 2; /* 2nd 2 chars numeric checksum */ if (!z_isdigit(d[0]) || !z_isdigit(d[1])) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Non-numeric IBAN checksum '%.2s'", d); } given_checksum = z_to_int(d, 2); @@ -879,7 +879,7 @@ static int gs1_iban(const unsigned char *data, int data_len, int offset, int min /* 0-9, A-Z */ if (*d < '0' || (*d > '9' && *d < 'A') || *d > 'Z') { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid IBAN character '%c'", *d); } if (*d >= 'A') { @@ -944,14 +944,14 @@ static const unsigned char *gs1_coupon_vli(const unsigned char *data, const int if (d - data + 1 > data_len) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; (void) gs1_err_msg_printf_nochk(err_msg, "%s VLI missing", name); return NULL; } vli = z_to_int(d, 1); if ((vli < vli_min || vli > vli_max) && (vli != 9 || !vli_nine)) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; if (vli < 0) { (void) gs1_err_msg_printf_nochk(err_msg, "Non-numeric %s VLI '%c'", name, *d); } else { @@ -963,7 +963,7 @@ static const unsigned char *gs1_coupon_vli(const unsigned char *data, const int if (vli != 9 || !vli_nine) { if (d - data + vli + vli_offset > data_len) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; (void) gs1_err_msg_printf_nochk(err_msg, "%s incomplete", name); return NULL; } @@ -971,7 +971,7 @@ static const unsigned char *gs1_coupon_vli(const unsigned char *data, const int for (; d < de; d++) { if (!z_isdigit(*d)) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; (void) gs1_err_msg_printf_nochk(err_msg, "Non-numeric %s '%c'", name, *d); return NULL; } @@ -988,14 +988,14 @@ static const unsigned char *gs1_coupon_val(const unsigned char *data, const int if (d - data + val_len > data_len) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; (void) gs1_err_msg_printf_nochk(err_msg, "%s incomplete", name); return NULL; } val = z_to_int(d, val_len); if (val < 0) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; (void) gs1_err_msg_printf_nochk(err_msg, "Non-numeric %s", name); return NULL; } @@ -1059,7 +1059,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if (val > 5 && val < 9) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid Primary Purch. Req. Code '%c'", *(d - 1)); } if (!(d = gs1_coupon_val(data, data_len, d, "Primary Purch. Family Code", 3, NULL, p_err_no, p_err_posn, @@ -1080,7 +1080,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if (val > 3) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid Add. Purch. Rules Code '%c'", *(d - 1)); } if (!(d = gs1_coupon_vli(data, data_len, d, "2nd Purch. Req.", 0, 1, 5, 0, p_err_no, p_err_posn, @@ -1093,7 +1093,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if (val > 4 && val < 9) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid 2nd Purch. Req. Code '%c'", *(d - 1)); } if (!(d = gs1_coupon_val(data, data_len, d, "2nd Purch. Family Code", 3, NULL, p_err_no, p_err_posn, @@ -1117,7 +1117,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if (val > 4 && val < 9) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid 3rd Purch. Req. Code '%c'", *(d - 1)); } if (!(d = gs1_coupon_val(data, data_len, d, "3rd Purch. Family Code", 3, NULL, p_err_no, p_err_posn, @@ -1135,7 +1135,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i err_msg))) { return 0; } - if (!gs1_yymmd0(data, data_len, d - 6 - data, 6, 6, p_err_no, p_err_posn, err_msg, 0)) { + if (!gs1_yymmd0(data, data_len, (int) (d - 6 - data), 6, 6, p_err_no, p_err_posn, err_msg, 0)) { return 0; } @@ -1144,7 +1144,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i if (!(d = gs1_coupon_val(data, data_len, d, "Start Date", 6, NULL, p_err_no, p_err_posn, err_msg))) { return 0; } - if (!gs1_yymmd0(data, data_len, d - 6 - data, 6, 6, p_err_no, p_err_posn, err_msg, 0)) { + if (!gs1_yymmd0(data, data_len, (int) (d - 6 - data), 6, 6, p_err_no, p_err_posn, err_msg, 0)) { return 0; } @@ -1170,7 +1170,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if ((val > 2 && val < 5) || val > 6) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid Save Value Code '%c'", *(d - 1)); } if (!(d = gs1_coupon_val(data, data_len, d, "Save Value Applies To", 1, &val, p_err_no, p_err_posn, @@ -1179,7 +1179,7 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if (val > 2) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid Save Value Applies To '%c'", *(d - 1)); } if (!(d = gs1_coupon_val(data, data_len, d, "Store Coupon Flag", 1, NULL, p_err_no, p_err_posn, @@ -1192,14 +1192,14 @@ static int gs1_couponcode(const unsigned char *data, int data_len, int offset, i } if (val > 1) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid Don't Multiply Flag '%c'", *(d - 1)); } } else { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; if (data_field < 0) { (void) gs1_err_msg_printf_nochk(err_msg, "Non-numeric Data Field '%c'", *(d - 1)); } else { @@ -1247,7 +1247,7 @@ static int gs1_couponposoffer(const unsigned char *data, int data_len, int offse } if (val != 0 && val != 1) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Coupon Format must be 0 or 1"); } if (!(d = gs1_coupon_vli(data, data_len, d, "Coupon Funder ID", 6, 0, 6, 0, p_err_no, p_err_posn, err_msg))) { @@ -1261,7 +1261,7 @@ static int gs1_couponposoffer(const unsigned char *data, int data_len, int offse } if (d - data != data_len) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Reserved trailing characters"); } } @@ -1290,7 +1290,7 @@ static int gs1_latitude(const unsigned char *data, int data_len, int offset, int } if (lat > 1800000000) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Invalid latitude"); } } @@ -1319,7 +1319,7 @@ static int gs1_longitude(const unsigned char *data, int data_len, int offset, in } if (lng > 3600000000) { *p_err_no = 3; - *p_err_posn = d - 1 - data + 1; + *p_err_posn = (int) (d - 1 - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Invalid longitude"); } } @@ -1348,7 +1348,7 @@ static int gs1_mediatype(const unsigned char *data, int data_len, int offset, in } if (val == 0 || (val > 10 && val < 80)) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Invalid AIDC media type"); } } @@ -1373,7 +1373,7 @@ static int gs1_hyphen(const unsigned char *data, int data_len, int offset, int m for (; d < de; d++) { if (*d != '-') { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Invalid temperature indicator (hyphen only)"); } } @@ -1425,17 +1425,17 @@ static int gs1_posinseqslash(const unsigned char *data, int data_len, int offset if (!z_isdigit(*d)) { if (*d != '/') { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_printf_nochk(err_msg, "Invalid character '%c' in sequence", *d); } if (slash) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Single sequence separator ('/') only"); } if (d == data + offset || d + 1 == de) { *p_err_no = 3; - *p_err_posn = d - data + 1; + *p_err_posn = (int) (d - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Sequence separator '/' cannot start or end"); } slash = d; @@ -1446,16 +1446,16 @@ static int gs1_posinseqslash(const unsigned char *data, int data_len, int offset *p_err_posn = offset + 1; return gs1_err_msg_cpy_nochk(err_msg, "No sequence separator ('/')"); } - pos = z_to_int(data + offset, slash - (data + offset)); + pos = z_to_int(data + offset, (int) (slash - (data + offset))); if (pos == 0) { *p_err_no = 3; *p_err_posn = offset + 1; return gs1_err_msg_cpy_nochk(err_msg, "Sequence position cannot be zero"); } - tot = z_to_int(slash + 1, de - (slash + 1)); + tot = z_to_int(slash + 1, (int) (de - (slash + 1))); if (tot == 0) { *p_err_no = 3; - *p_err_posn = slash + 1 - data + 1; + *p_err_posn = (int) (slash + 1 - data) + 1; return gs1_err_msg_cpy_nochk(err_msg, "Sequence total cannot be zero"); } if (pos > tot) { diff --git a/backend/mailmark.c b/backend/mailmark.c index 9dfd95ed..cc91a4e3 100644 --- a/backend/mailmark.c +++ b/backend/mailmark.c @@ -1,7 +1,7 @@ /* mailmark.c - Royal Mail 4-state and 2D Mailmark barcodes */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -467,7 +467,7 @@ INTERNAL int zint_mailmark_4s(struct zint_symbol *symbol, unsigned char source[] /* Translate 4-state data pattern to symbol */ j = 0; - for (i = 0, len = d - bar; i < len; i++) { + for (i = 0, len = (int) (d - bar); i < len; i++) { if (bar[i] == 'F' || bar[i] == 'A') { z_set_module(symbol, 0, j); } diff --git a/backend/medical.c b/backend/medical.c index 2da52537..b1fc9979 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -83,14 +83,14 @@ INTERNAL int zint_pharma(struct zint_symbol *symbol, unsigned char source[], int } } while (tester != 0); - h = in - inter; + h = (int) (in - inter); for (counter = h - 1; counter >= 0; counter--) { *d++ = inter[counter] == 'W' ? '3' : '1'; *d++ = '2'; } *--d = '\0'; /* Chop off final bar */ - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { /* Laetus Pharmacode Guide 1.2 Standard one-track height 8mm / 0.5mm (X) */ @@ -133,7 +133,7 @@ static int pharma_two_calc(int tester, char *d) { } } while (tester != 0); - h = in - inter; + h = (int) (in - inter); for (counter = h - 1; counter >= 0; counter--) { *d++ = inter[counter]; } diff --git a/backend/plessey.c b/backend/plessey.c index 2d532155..9b411ba9 100644 --- a/backend/plessey.c +++ b/backend/plessey.c @@ -1,7 +1,7 @@ /* plessey.c - Handles Plessey and MSI Plessey */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -116,7 +116,7 @@ INTERNAL int zint_plessey(struct zint_symbol *symbol, unsigned char source[], in memcpy(d, "331311313", 9); d += 9; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); /* TODO: Find documentation on BARCODE_PLESSEY dimensions/height */ @@ -375,7 +375,7 @@ INTERNAL int zint_msi_plessey(struct zint_symbol *symbol, unsigned char source[] memcpy(d, "121", 3); d += 3; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); /* TODO: Find documentation on BARCODE_MSI_PLESSEY dimensions/height */ diff --git a/backend/postal.c b/backend/postal.c index 9d4bdc82..4fd0361b 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -1,7 +1,7 @@ /* postal.c - Handles POSTNET, PLANET, CEPNet, FIM. RM4SCC and Flattermarken */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Including bug fixes by Bryan Hatton Redistribution and use in source and binary forms, with or without @@ -330,7 +330,7 @@ INTERNAL int zint_koreapost(struct zint_symbol *symbol, unsigned char source[], memcpy(d, KoreaTable[check], 10); d += KoreaTable[check][8] ? 10 : 8; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); /* TODO: Find documentation on BARCODE_KOREAPOST dimensions/height */ @@ -557,7 +557,7 @@ INTERNAL int zint_kix(struct zint_symbol *symbol, unsigned char source[], int le } writer = 0; - h = d - height_pattern; + h = (int) (d - height_pattern); for (loopey = 0; loopey < h; loopey++) { if (height_pattern[loopey] == '1' || height_pattern[loopey] == '0') { z_set_module(symbol, 0, writer); @@ -668,7 +668,7 @@ INTERNAL int zint_flat(struct zint_symbol *symbol, unsigned char source[], int l d += entry[2] ? 4 : 2; } - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); /* TODO: Find documentation on BARCODE_FLAT dimensions/height */ @@ -760,7 +760,7 @@ INTERNAL int zint_japanpost(struct zint_symbol *symbol, unsigned char source[], /* Resolve pattern to 4-state symbols */ writer = 0; - h = d - pattern; + h = (int) (d - pattern); for (loopey = 0; loopey < h; loopey++) { if (pattern[loopey] == '2' || pattern[loopey] == '1') { z_set_module(symbol, 0, writer); diff --git a/backend/telepen.c b/backend/telepen.c index e5559d59..1e170566 100644 --- a/backend/telepen.c +++ b/backend/telepen.c @@ -1,7 +1,7 @@ /* telepen.c - Handles Telepen and Telepen numeric */ /* libzint - the open source barcode library - Copyright (C) 2008-2025 Robin Stuart + Copyright (C) 2008-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -128,7 +128,7 @@ INTERNAL int zint_telepen(struct zint_symbol *symbol, unsigned char source[], in memcpy(d, TeleTable['z'], 12); d += 12; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { /* Default height from various Telepen docs is based on default 26pt at X 0.01125" @@ -210,7 +210,7 @@ INTERNAL int zint_telepen_num(struct zint_symbol *symbol, unsigned char source[] memcpy(d, TeleTable['z'], 12); d += 12; - z_expand(symbol, dest, d - dest); + z_expand(symbol, dest, (int) (d - dest)); if (symbol->output_options & COMPLIANT_HEIGHT) { (void) z_set_height(symbol, 0.0f, 32.0f, 0, 1 /*no_errtxt*/); /* Same as alphanumeric Telepen */ diff --git a/backend/tests/test_bwipp.c b/backend/tests/test_bwipp.c index cce26ab3..28485cb7 100644 --- a/backend/tests/test_bwipp.c +++ b/backend/tests/test_bwipp.c @@ -111,7 +111,7 @@ static void test_bwipp_random(const testCtx *const p_ctx, const struct random_it bwipp_buf, sizeof(bwipp_buf), NULL); assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - bwipp_len = strlen(bwipp_buf); + bwipp_len = (int) strlen(bwipp_buf); assert_nonzero(bwipp_len, "i:%d bwipp_len %d = 0\n", i, bwipp_len); symbol->width = width_func ? width_func(rdata, bwipp_len) : bwipp_len; @@ -405,7 +405,7 @@ static void test_aztec_bwipjs_354(const testCtx *const p_ctx) { sizeof(bwipp_buf), NULL); assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - bwipp_len = strlen(bwipp_buf); + bwipp_len = (int) strlen(bwipp_buf); assert_nonzero(bwipp_len, "i:%d bwipp_len %d = 0\n", i, bwipp_len); symbol->width = sqrt_width_func(NULL /*rdata*/, bwipp_len); @@ -496,7 +496,7 @@ static void test_codablockf_fnc4_digit(const testCtx *const p_ctx) { bwipp_buf, sizeof(bwipp_buf), NULL); assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); - bwipp_len = strlen(bwipp_buf); + bwipp_len = (int) strlen(bwipp_buf); assert_nonzero(bwipp_len, "i:%d bwipp_len %d = 0\n", i, bwipp_len); symbol->width = codablockf_width_func(rdata, bwipp_len); diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index 26d8fe77..0cd433ab 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -1468,7 +1468,7 @@ static void test_encode_file_unreadable(const testCtx *const p_ctx) { fd = creat(filename, S_IWUSR); assert_notequal(fd, -1, "Unreadable input file (%s) not created == -1 (%d: %s)\n", filename, errno, strerror(errno)); - ret = write(fd, buf, 1); + ret = (int) write(fd, buf, 1); assert_equal(ret, 1, "Unreadable write ret %d != 1\n", ret); ret = close(fd); assert_zero(ret, "Unreadable close(%s) != 0(%d: %s)\n", filename, errno, strerror(errno)); diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index df499aa7..bc6d00d7 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -1182,7 +1182,7 @@ int testUtilModulesDump(const struct zint_symbol *symbol, char dump[], int dump_ return -1; } *d = '\0'; - return d - dump; + return (int) (d - dump); } /* Print out module dump (for generate tests) */ @@ -1492,24 +1492,24 @@ int testUtilDataPath(char *buffer, int buffer_size, const char *subdir, const ch s = s2; } *s = '\0'; - len = s - buffer; + len = (int) (s - buffer); } if ((s = strstr(buffer, "/backend")) != NULL) { while ((s2 = strstr(s + 1, "/backend")) != NULL) { /* Find rightmost */ s = s2; } *s = '\0'; - len = s - buffer; + len = (int) (s - buffer); } else if ((s = strstr(buffer, "/frontend")) != NULL) { while ((s2 = strstr(s + 1, "/frontend")) != NULL) { /* Find rightmost */ s = s2; } *s = '\0'; - len = s - buffer; + len = (int) (s - buffer); } if (cmake_src_dir == NULL && (s = strrchr(buffer, '/')) != NULL) { /* Remove "build" dir */ *s = '\0'; - len = s - buffer; + len = (int) (s - buffer); } if (subdir_len) { @@ -2196,7 +2196,7 @@ int testUtilVerifyLibreOffice(const char *filename, int debug) { return -1; } while (!feof(fp) && b < be) { - if (fgets(b, be - b, fp) == NULL) { + if (fgets(b, (int) (be - b), fp) == NULL) { fprintf(stderr, "testUtilVerifyLibreOffice: failed to get line from '%s' (%s)\n", svg, cmd); fclose(fp); return -1; @@ -2642,7 +2642,7 @@ static char *testUtilBwippCvtGS1Data(char *bwipp_data, const int bwipp_data_size *b = ')'; } else if ((*c == '+' || *c == ' ') && upcean && !pipe) { *b = ' '; - *addon_posn = b - bwipp_data; + *addon_posn = (int) (b - bwipp_data); } else { *b = *c; } @@ -3780,7 +3780,7 @@ int testUtilBwippSegs(int index, struct zint_symbol *symbol, int option_1, int o d += local_segs[i].length; } } - total_len = d - data; + total_len = (int) (d - data); if (unicode_mode) { symbol->input_mode = DATA_MODE; @@ -4273,7 +4273,7 @@ static int textUtilZXingCPPDX(const char *expected, const int expected_len, cons static int textUtilZXingCPPEAN13AddOn(const char *expected, const int expected_len, char *out) { char *sep; if ((sep = strchr(expected, '+')) != NULL || (sep = strchr(expected, ' ')) != NULL) { - const int addon_len = expected_len - (sep + 1 - expected); + const int addon_len = expected_len - (int) (sep + 1 - expected); if (addon_len <= 2) { memset(out + 13, '0', 2 - addon_len); memcpy(out + 13 + (2 - addon_len), sep + 1, addon_len); diff --git a/backend/tif.c b/backend/tif.c index f71cfb1a..8bc6c209 100644 --- a/backend/tif.c +++ b/backend/tif.c @@ -1,7 +1,7 @@ /* tif.c - Aldus Tagged Image File Format support */ /* libzint - the open source barcode library - Copyright (C) 2016-2025 Robin Stuart + Copyright (C) 2016-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -376,7 +376,7 @@ INTERNAL int zint_tif_pixel_plot(struct zint_symbol *symbol, const unsigned char (void) zint_fm_close(fmp, symbol); return z_errtxt(ZINT_ERROR_MEMORY, symbol, 673, "Insufficient memory for TIF LZW hash table"); } - bytes_put = zint_fm_tell(fmp) - file_pos; + bytes_put = (unsigned int) (zint_fm_tell(fmp) - file_pos); if (bytes_put != strip_bytes[strip]) { const int diff = bytes_put - strip_bytes[strip]; strip_bytes[strip] = bytes_put;