diff --git a/backend/auspost.c b/backend/auspost.c index 4be9f356..8786d0c1 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -91,6 +91,7 @@ void rs_error(char data_pattern[]) { concat(data_pattern, AusBarTable[(int)result[reader - 1]]); } + rs_free(); } int australia_post(struct zint_symbol *symbol, unsigned char source[]) diff --git a/backend/aztec.c b/backend/aztec.c index 8062e3da..05106695 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -802,6 +802,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } } + rs_free(); break; case 8: for(i = 0; i < data_blocks; i++) { @@ -827,6 +828,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } } + rs_free(); break; case 10: for(i = 0; i < data_blocks; i++) { @@ -856,6 +858,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } } + rs_free(); break; case 12: for(i = 0; i < data_blocks; i++) { @@ -889,6 +892,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } } + rs_free(); break; } @@ -968,6 +972,7 @@ int aztec(struct zint_symbol *symbol, unsigned char source[]) if(desc_ecc[i] & 0x01) { descriptor[(i * 4) + 19] = '1'; } } } + rs_free(); /* Merge descriptor with the rest of the symbol */ for(i = 0; i < 40; i++) { diff --git a/backend/dm200.c b/backend/dm200.c index 0a547558..ce458997 100644 --- a/backend/dm200.c +++ b/backend/dm200.c @@ -221,6 +221,7 @@ static void ecc200(unsigned char *binary, int bytes, int datablock, int rsblock) for (n = b; n < rsblock * blocks; n += blocks) binary[bytes + n] = ecc[p--]; } + rs_free(); } /* @@ -237,6 +238,7 @@ char ecc200encode(unsigned char *t, int tl, unsigned char *s, int sl, char *enco fprintf(stderr, "Encoding string too short\n"); return 0; } + // do the encoding while (sp < sl && tp < tl) { char newenc = enc; // suggest new encoding @@ -851,14 +853,12 @@ int iec16022ecc200(unsigned char *barcode, int barcodelen, struct zint_symbol *s } symbol->row_height[(H - y) - 1] = 1; } - free(grid); free(places); } symbol->rows = H; symbol->width = W; - free(encoding); return 0; } diff --git a/backend/maxicode.c b/backend/maxicode.c index 9646cc96..b86bc626 100644 --- a/backend/maxicode.c +++ b/backend/maxicode.c @@ -48,6 +48,7 @@ void maxi_do_primary_check( ) for ( j = 0; j < ecclen; j += 1) maxi_codeword[ datalen + j] = results[j]; + rs_free(); } void maxi_do_secondary_chk_odd( int ecclen ) @@ -72,6 +73,7 @@ void maxi_do_secondary_chk_odd( int ecclen ) for ( j = 0; j < (ecclen); j += 1) maxi_codeword[ datalen + (2 *j) + 1 + 20 ] = results[j]; + rs_free(); } void maxi_do_secondary_chk_even(int ecclen ) @@ -96,6 +98,7 @@ void maxi_do_secondary_chk_even(int ecclen ) for ( j = 0; j < (ecclen); j += 1) maxi_codeword[ datalen + (2 *j) + 20] = results[j]; + rs_free(); } void maxi_bump(int set[], int character[], int bump_posn) diff --git a/backend/reedsol.c b/backend/reedsol.c index 81515ad4..ce6b7dd5 100644 --- a/backend/reedsol.c +++ b/backend/reedsol.c @@ -104,8 +104,7 @@ void rs_init_code(int nsym, int index) rspoly[i] = 1; for (k = i - 1; k > 0; k--) { if (rspoly[k]) - rspoly[k] = - alog[(log[rspoly[k]] + index) % logmod]; + rspoly[k] = alog[(log[rspoly[k]] + index) % logmod]; rspoly[k] ^= rspoly[k - 1]; } rspoly[0] = alog[(log[rspoly[0]] + index) % logmod]; @@ -122,10 +121,7 @@ void rs_encode(int len, unsigned char *data, unsigned char *res) m = res[rlen - 1] ^ data[i]; for (k = rlen - 1; k > 0; k--) { if (m && rspoly[k]) - res[k] = - res[k - - 1] ^ alog[(log[m] + - log[rspoly[k]]) % logmod]; + res[k] = res[k - 1] ^ alog[(log[m] + log[rspoly[k]]) % logmod]; else res[k] = res[k - 1]; } @@ -134,12 +130,6 @@ void rs_encode(int len, unsigned char *data, unsigned char *res) else res[0] = 0; } - - free(log); - free(alog); - free(rspoly); - rspoly = NULL; - } void rs_encode_long(int len, unsigned int *data, unsigned int *res) @@ -151,10 +141,7 @@ void rs_encode_long(int len, unsigned int *data, unsigned int *res) m = res[rlen - 1] ^ data[i]; for (k = rlen - 1; k > 0; k--) { if (m && rspoly[k]) - res[k] = - res[k - - 1] ^ alog[(log[m] + - log[rspoly[k]]) % logmod]; + res[k] = res[k - 1] ^ alog[(log[m] + log[rspoly[k]]) % logmod]; else res[k] = res[k - 1]; } @@ -163,10 +150,12 @@ void rs_encode_long(int len, unsigned int *data, unsigned int *res) else res[0] = 0; } - +} + +void rs_free() +{ /* Free memory */ free(log); free(alog); free(rspoly); rspoly = NULL; } - diff --git a/backend/reedsol.h b/backend/reedsol.h index 9d7df4b0..5de691b4 100644 --- a/backend/reedsol.h +++ b/backend/reedsol.h @@ -26,5 +26,6 @@ void rs_init_gf(int poly); void rs_init_code(int nsym, int index); void rs_encode(int len, unsigned char *data, unsigned char *res); void rs_encode_long(int len, unsigned int *data, unsigned int *res); +void rs_free(); #endif /* __REEDSOL_H */