File libdmtx-DmtxPropRowPadBytes.patch of Package libdmtx.25270

diff -u libdmtx-0.7.4.orig/dmtxencode.c libdmtx-0.7.4/dmtxencode.c
--- libdmtx-0.7.4.orig/dmtxencode.c	2011-06-02 09:09:36.000000000 +0200
+++ libdmtx-0.7.4/dmtxencode.c	2014-06-04 08:06:47.306788067 +0200
@@ -157,7 +157,7 @@
 dmtxEncodeDataMatrix(DmtxEncode *enc, int inputSize, unsigned char *inputString)
 {
    int sizeIdx;
-   int width, height, bitsPerPixel;
+   int width, height, bitsPerPixel, rowSizeBytes;
    unsigned char *pxl;
    DmtxByte outputStorage[4096];
    DmtxByteList output = dmtxByteListBuild(outputStorage, sizeof(outputStorage));
@@ -202,8 +202,12 @@
       return DmtxFail;
    assert(bitsPerPixel % 8 == 0);
 
+   rowSizeBytes = width * (bitsPerPixel/8);
+   /* Align to next multiple of enc->rowPadBytes */
+   if(enc->rowPadBytes > 0)
+     rowSizeBytes = (((rowSizeBytes + enc->rowPadBytes - 1) / enc->rowPadBytes ) * enc->rowPadBytes );
    /* Allocate memory for the image to be generated */
-   pxl = (unsigned char *)malloc(width * height * (bitsPerPixel/8) + enc->rowPadBytes);
+   pxl = (unsigned char *)malloc(height * rowSizeBytes);
    if(pxl == NULL) {
       perror("pixel malloc error");
       return DmtxFail;
diff -u libdmtx-0.7.4.orig/dmtximage.c libdmtx-0.7.4/dmtximage.c
--- libdmtx-0.7.4.orig/dmtximage.c	2011-06-02 09:09:36.000000000 +0200
+++ libdmtx-0.7.4/dmtximage.c	2014-06-04 08:04:17.289783266 +0200
@@ -76,7 +76,7 @@
    img->bitsPerPixel = GetBitsPerPixel(pack);
    img->bytesPerPixel = img->bitsPerPixel/8;
    img->rowPadBytes = 0;
-   img->rowSizeBytes = img->width * img->bytesPerPixel + img->rowPadBytes;
+   img->rowSizeBytes = img->width * img->bytesPerPixel;
    img->imageFlip = DmtxFlipNone;
 
    /* Leave channelStart[] and bitsPerChannel[] with zeros from calloc */
@@ -192,7 +192,10 @@
    switch(prop) {
       case DmtxPropRowPadBytes:
          img->rowPadBytes = value;
-         img->rowSizeBytes = img->width * (img->bitsPerPixel/8) + img->rowPadBytes;
+         img->rowSizeBytes = img->width * (img->bitsPerPixel/8);
+         /* Align to next multiple of img->rowPadBytes */
+         if(img->rowPadBytes > 0)
+           img->rowSizeBytes = (((img->rowSizeBytes + img->rowPadBytes - 1) / img->rowPadBytes ) * img->rowPadBytes);
          break;
       case DmtxPropImageFlip:
          img->imageFlip = value;
openSUSE Build Service is sponsored by