From e403a87c1008758cc5a98affcde01fb829f02372 Mon Sep 17 00:00:00 2001 From: Pierre Willenbrock Date: Thu, 25 Oct 2007 12:44:33 +0000 Subject: [PATCH] * backend/genesys_gl841.c: One more instance of sizeof(Genesys_Register_Set) vs 2 * backend/genesys.c: Add check for small register set in sanei_genesys_get_address --- ChangeLog | 7 +++++++ backend/genesys.c | 2 +- backend/genesys_gl841.c | 14 +++++++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b98ae966d..57543060c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-10-13 Pierre Willenbrock + + * backend/genesys_gl841.c: One more instance of + sizeof(Genesys_Register_Set) vs 2 + * backend/genesys.c: Add check for small register set in + sanei_genesys_get_address + 2007-10-24 Julien Blache * backends/net.c: Add an optional connection timeout for the initial connection to saned. Based on a patch from Ryan Duryea diff --git a/backend/genesys.c b/backend/genesys.c index 84c264680..1c5463955 100644 --- a/backend/genesys.c +++ b/backend/genesys.c @@ -499,7 +499,7 @@ Genesys_Register_Set * sanei_genesys_get_address (Genesys_Register_Set * regs, SANE_Byte addr) { int i; - for (i = 0; i < GENESYS_MAX_REGS; i++) + for (i = 0; i < GENESYS_MAX_REGS && regs[i].address; i++) { if (regs[i].address == addr) return ®s[i]; diff --git a/backend/genesys_gl841.c b/backend/genesys_gl841.c index 608900768..2846974aa 100644 --- a/backend/genesys_gl841.c +++ b/backend/genesys_gl841.c @@ -378,23 +378,27 @@ enum /* ------------------------------------------------------------------------ */ /* Write to many registers */ +/* Note: There is no known bulk register write, + this function is sending single registers instead */ static SANE_Status gl841_bulk_write_register (Genesys_Device * dev, Genesys_Register_Set * reg, size_t size) { SANE_Status status = SANE_STATUS_GOOD; unsigned int i; + unsigned int elems; /* handle differently sized register sets, reg[0x00] is the last one */ i = 0; - while ((i < size / 2) && (reg[i].address != 0)) + while ((i < size / sizeof(Genesys_Register_Set)) && (reg[i].address != 0)) i++; - size = i * 2; + + elems = i; DBG (DBG_io, "gl841_bulk_write_register (size = %lu)\n", - (u_long) size); + (u_long) elems * sizeof(Genesys_Register_Set)); - for (i = 0; i < size / 2; i++) { + for (i = 0; i < elems; i++) { u_int8_t msg[2]; @@ -417,7 +421,7 @@ gl841_bulk_write_register (Genesys_Device * dev, } - DBG (DBG_io, "gl841_bulk_write_register: wrote %d bytes\n", size); + DBG (DBG_io, "gl841_bulk_write_register: wrote %d registers\n", elems); return status; }