#define QUIRC_PERSPECTIVE_PARAMS 8
#if QUIRC_MAX_REGIONS < UINT8_MAX
+#define QUIRC_PIXEL_ALIAS_IMAGE 1
typedef uint8_t quirc_pixel_t;
#elif QUIRC_MAX_REGIONS < UINT16_MAX
+#define QUIRC_PIXEL_ALIAS_IMAGE 0
typedef uint16_t quirc_pixel_t;
#else
#error "QUIRC_MAX_REGIONS > 65534 is not supported"
struct quirc {
uint8_t *image;
quirc_pixel_t *pixels;
- int *row_average; /* used by threshold() */
int w;
int h;
free(q->image);
/* q->pixels may alias q->image when their type representation is of the
same size, so we need to be careful here to avoid a double free */
- if (sizeof(*q->image) != sizeof(*q->pixels))
+ if (!QUIRC_PIXEL_ALIAS_IMAGE)
free(q->pixels);
- free(q->row_average);
free(q);
}
{
uint8_t *image = NULL;
quirc_pixel_t *pixels = NULL;
- int *row_average = NULL;
/*
* XXX: w and h should be size_t (or at least unsigned) as negatives
(void)memcpy(image, q->image, min);
/* alloc a new buffer for q->pixels if needed */
- if (sizeof(*q->image) != sizeof(*q->pixels)) {
+ if (!QUIRC_PIXEL_ALIAS_IMAGE) {
pixels = calloc(newdim, sizeof(quirc_pixel_t));
if (!pixels)
goto fail;
}
- /* alloc a new buffer for q->row_average */
- row_average = calloc(w, sizeof(int));
- if (!row_average)
- goto fail;
-
/* alloc succeeded, update `q` with the new size and buffers */
q->w = w;
q->h = h;
free(q->image);
q->image = image;
- if (sizeof(*q->image) != sizeof(*q->pixels)) {
+ if (!QUIRC_PIXEL_ALIAS_IMAGE) {
free(q->pixels);
q->pixels = pixels;
}
- free(q->row_average);
- q->row_average = row_average;
return 0;
/* NOTREACHED */
fail:
free(image);
free(pixels);
- free(row_average);
return -1;
}
const char *quirc_strerror(quirc_decode_error_t err)
{
- if ((int)err < 8) { return error_table[err]; }
- else { return "Unknown error"; }
+ if ((int)err >= 0 && (int)err < sizeof(error_table) / sizeof(error_table[0]))
+ return error_table[err];
+
+ return "Unknown error";
}
#include <quirc_internal.h>
const struct quirc_version_info quirc_version_db[QUIRC_MAX_VERSION + 1] = {
- { /* 0 */
- .data_bytes = 0,
- .apat = {0},
- .ecc = {
- {.bs = 0, .dw = 0, .ns = 0},
- {.bs = 0, .dw = 0, .ns = 0},
- {.bs = 0, .dw = 0, .ns = 0},
- {.bs = 0, .dw = 0, .ns = 0}
- }
- },
+ {0},
{ /* Version 1 */
.data_bytes = 26,
.apat = {0},