diff --git a/backend/umax_pp.c b/backend/umax_pp.c index 514dd8c93..ecfa2c985 100644 --- a/backend/umax_pp.c +++ b/backend/umax_pp.c @@ -350,6 +350,7 @@ init_options (Umax_PP_Device * dev) dev->opt[OPT_MODE_GROUP].name = ""; dev->opt[OPT_MODE_GROUP].desc = ""; dev->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP; + dev->opt[OPT_MODE_GROUP].size = 0; dev->opt[OPT_MODE_GROUP].constraint_type = SANE_CONSTRAINT_NONE; /* scan mode */ @@ -397,6 +398,7 @@ init_options (Umax_PP_Device * dev) dev->opt[OPT_GEOMETRY_GROUP].desc = ""; dev->opt[OPT_GEOMETRY_GROUP].name = ""; dev->opt[OPT_GEOMETRY_GROUP].type = SANE_TYPE_GROUP; + dev->opt[OPT_GEOMETRY_GROUP].size = 0; dev->opt[OPT_GEOMETRY_GROUP].constraint_type = SANE_CONSTRAINT_NONE; /* top-left x */ @@ -445,6 +447,7 @@ init_options (Umax_PP_Device * dev) dev->opt[OPT_ENHANCEMENT_GROUP].desc = ""; dev->opt[OPT_ENHANCEMENT_GROUP].name = ""; dev->opt[OPT_ENHANCEMENT_GROUP].type = SANE_TYPE_GROUP; + dev->opt[OPT_ENHANCEMENT_GROUP].size = 0; dev->opt[OPT_ENHANCEMENT_GROUP].cap |= SANE_CAP_ADVANCED; dev->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE; diff --git a/backend/umax_pp_low.c b/backend/umax_pp_low.c index 3a0d08c4b..c9b4d7482 100644 --- a/backend/umax_pp_low.c +++ b/backend/umax_pp_low.c @@ -1700,7 +1700,7 @@ static void EPPReadBuffer (int size, unsigned char *dest) { #ifdef HAVE_LINUX_PPDEV_H - int fd, mode, rc; + int fd, mode, rc, nb; unsigned char bval; #endif int control; @@ -1724,7 +1724,12 @@ EPPReadBuffer (int size, unsigned char *dest) #endif mode = IEEE1284_MODE_EPP | IEEE1284_DATA; rc = ioctl (fd, PPSETMODE, &mode); - rc = read (fd, dest, size - 1); + nb = 0; + while (nb < size - 1) + { + rc = read (fd, dest + nb, size - 1 - nb); + nb += rc; + } mode = 0; /* forward */ rc = ioctl (fd, PPDATADIR, &mode); @@ -1889,7 +1894,7 @@ static void EPPRead32Buffer (int size, unsigned char *dest) { #ifdef HAVE_LINUX_PPDEV_H - int fd, mode, rc; + int fd, mode, rc,nb; unsigned char bval; #endif int control; @@ -1919,7 +1924,12 @@ EPPRead32Buffer (int size, unsigned char *dest) #endif mode = IEEE1284_MODE_EPP | IEEE1284_DATA; rc = ioctl (fd, PPSETMODE, &mode); - rc = read (fd, dest, size - 4); + nb=0; + while(nb