diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2015-06-28 15:34:21 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2015-06-28 15:34:21 +0000 |
commit | 620ecbee2ed1cb478e0289722d86dd72717f1cb8 (patch) | |
tree | 7a427b24d86f6789706acee21a52dca15b88806b /converter/pbm/pbmtoxbm.c | |
parent | 8c2dab4922b514045cbae8e71ba93aaf8c0fff48 (diff) | |
download | netpbm-mirror-620ecbee2ed1cb478e0289722d86dd72717f1cb8.tar.gz netpbm-mirror-620ecbee2ed1cb478e0289722d86dd72717f1cb8.tar.xz netpbm-mirror-620ecbee2ed1cb478e0289722d86dd72717f1cb8.zip |
Release 10.71.00
git-svn-id: http://svn.code.sf.net/p/netpbm/code/advanced@2588 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/pbm/pbmtoxbm.c')
-rw-r--r-- | converter/pbm/pbmtoxbm.c | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/converter/pbm/pbmtoxbm.c b/converter/pbm/pbmtoxbm.c index c6c4a9e6..14c6b85e 100644 --- a/converter/pbm/pbmtoxbm.c +++ b/converter/pbm/pbmtoxbm.c @@ -23,6 +23,7 @@ #define _BSD_SOURCE 1 /* Make sure strdup() is in string.h */ #define _XOPEN_SOURCE 500 /* Make sure strdup() is in string.h */ +#include <assert.h> #include <string.h> #include "pm_c_util.h" @@ -35,7 +36,7 @@ enum xbmVersion { X10, X11 }; -struct cmdlineInfo { +struct CmdlineInfo { /* All the information the user supplied in the command line, in a form easy for the program to use. */ @@ -46,8 +47,8 @@ struct cmdlineInfo { static void parseCommandLine(int argc, - char ** argv, - struct cmdlineInfo *cmdlineP ) { + const char ** argv, + struct CmdlineInfo *cmdlineP ) { /*---------------------------------------------------------------------------- Parse program command line described in Unix standard form by argc and argv. Return the information in the options as *cmdlineP. @@ -58,7 +59,7 @@ parseCommandLine(int argc, Note that the strings we return are stored in the storage that was passed to us as the argv array. We also trash *argv. -----------------------------------------------------------------------------*/ - optEntry *option_def; + optEntry * option_def; /* Instructions to pm_optParseOptions3 on how to parse our options. */ optStruct3 opt; @@ -76,7 +77,7 @@ parseCommandLine(int argc, opt.short_allowed = FALSE; /* We have no short (old-fashioned) options */ opt.allowNegNum = FALSE; /* We have no parms that are negative numbers */ - pm_optParseOptions3( &argc, argv, opt, sizeof(opt), 0); + pm_optParseOptions3(&argc, (char **)argv, opt, sizeof(opt), 0); /* Uses and sets argc, argv, and some of *cmdlineP and others. */ if (!nameSpec) @@ -111,6 +112,7 @@ parseCommandLine(int argc, pm_error("Program takes zero or one argument (filename). You " "specified %u", argc-1); } + free(option_def); } @@ -242,18 +244,22 @@ puttermX10(void) { unsigned int i; + assert(itemCnt % 2 == 0); + for (i = 0; i < itemCnt; i += 2) { int rc; + assert(i + 1 < itemCnt); + rc = printf("%s0x%02x%02x%s", (i == 0) ? " " : "", itemBuff[i+1], itemBuff[i], - (i == itemCnt - 2) ? "" : ","); + (i + 2 >= itemCnt) ? "" : ","); if (rc < 0) - pm_error("Error writing end of X10 bitmap raster. " + pm_error("Error writing Item %u at end of X10 bitmap raster. " "printf() failed with errno %d (%s)", - errno, strerror(errno)); + i, errno, strerror(errno)); } } @@ -270,12 +276,12 @@ puttermX11(void) { rc = printf("%s0x%02x%s", (i == 0) ? " " : "", itemBuff[i], - (i == itemCnt - 1) ? "" : ","); + (i + 1 >= itemCnt) ? "" : ","); if (rc < 0) - pm_error("Error writing end of X11 bitmap raster. " + pm_error("Error writing Item %u at end of X11 bitmap raster. " "printf() failed with errno %d (%s)", - errno, strerror(errno)); + i, errno, strerror(errno)); } } @@ -319,8 +325,8 @@ writeXbmHeader(enum xbmVersion const xbmVersion, unsigned int const height, FILE * const ofP) { - printf("#define %s_width %d\n", name, width); - printf("#define %s_height %d\n", name, height); + printf("#define %s_width %u\n", name, width); + printf("#define %s_height %u\n", name, height); printf("static %s %s_bits[] = {\n", xbmVersion == X10 ? "short" : "char", name); @@ -337,8 +343,7 @@ convertRaster(FILE * const ifP, enum xbmVersion const xbmVersion) { unsigned int const bitsPerUnit = xbmVersion == X10 ? 16 : 8; - unsigned int const padright = - ((cols + bitsPerUnit - 1 ) / bitsPerUnit) * bitsPerUnit - cols; + unsigned int const padright = ROUNDUP(cols, bitsPerUnit) - cols; /* Amount of padding to round cols up to the nearest multiple of 8 (if x11) or 16 (if x10). */ @@ -352,21 +357,15 @@ convertRaster(FILE * const ifP, bitrow = pbm_allocrow_packed(cols + padright); for (row = 0; row < rows; ++row) { - int const bitrowInBytes = pbm_packed_bytes(cols); - int const padrightIn = bitrowInBytes * 8 - cols; - unsigned int i; pbm_readpbmrow_packed(ifP, bitrow, cols, format); + pbm_cleanrowend_packed(bitrow, cols); - if (padrightIn > 0) { - bitrow[bitrowInBytes - 1] >>= padrightIn; - bitrow[bitrowInBytes - 1] <<= padrightIn; - } - - if (padright >= 8) + if (padright >= 8) { + assert(bitrowBytes > 0); bitrow[bitrowBytes-1] = 0x00; - + } for (i = 0; i < bitrowBytes; ++i) putitem(bitrow[i]); } @@ -379,15 +378,15 @@ convertRaster(FILE * const ifP, int -main(int argc, - char * argv[]) { +main(int argc, + const char ** argv) { - struct cmdlineInfo cmdline; + struct CmdlineInfo cmdline; FILE * ifP; int rows, cols, format; const char * name; - pbm_init(&argc, argv); + pm_proginit(&argc, argv); parseCommandLine(argc, argv, &cmdline); if (cmdline.name == NULL) @@ -409,3 +408,5 @@ main(int argc, return 0; } + + |