about summary refs log tree commit diff
path: root/converter/other/pnmtojpeg.c
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2008-10-19 21:49:42 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2008-10-19 21:49:42 +0000
commit763d2fb3f0f49e59c6aaeae20ae5b76591826989 (patch)
treed9e61c548565b8a2b07bdb09ed24372abdbca809 /converter/other/pnmtojpeg.c
parent5cef4210720083296e903e9755acd6176714b6f1 (diff)
downloadnetpbm-mirror-763d2fb3f0f49e59c6aaeae20ae5b76591826989.tar.gz
netpbm-mirror-763d2fb3f0f49e59c6aaeae20ae5b76591826989.tar.xz
netpbm-mirror-763d2fb3f0f49e59c6aaeae20ae5b76591826989.zip
cleanup
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@760 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/other/pnmtojpeg.c')
-rw-r--r--converter/other/pnmtojpeg.c139
1 files changed, 80 insertions, 59 deletions
diff --git a/converter/other/pnmtojpeg.c b/converter/other/pnmtojpeg.c
index e5722348..3110542d 100644
--- a/converter/other/pnmtojpeg.c
+++ b/converter/other/pnmtojpeg.c
@@ -435,49 +435,56 @@ text_getc (FILE * file)
 
 
 static boolean
-read_text_integer (FILE * file, long * result, int * termchar)
-/* Read an unsigned decimal integer from a file, store it in result */
-/* Reads one trailing character after the integer; returns it in termchar */
-{
-    register int ch;
-    register long val;
+readTextInteger(FILE * const fileP,
+                long * const resultP,
+                int *  const termcharP) {
+/*----------------------------------------------------------------------------
+   Read the next unsigned decimal integer from file 'fileP', skipping
+   white space as necessary.  Return it as *resultP.
+
+   Also read one character after the integer and return it as *termcharP.
+
+   If there is no character after the integer, return *termcharP == EOF.
+
+   Iff the next thing in the file is not a valid unsigned decimal integer,
+   return FALSE.
+-----------------------------------------------------------------------------*/
+    int ch;
+    boolean retval;
   
     /* Skip any leading whitespace, detect EOF */
     do {
-        ch = text_getc(file);
-        if (ch == EOF) {
-            *termchar = ch;
-            return FALSE;
-        }
+        ch = text_getc(fileP);
     } while (isspace(ch));
   
-    if (! isdigit(ch)) {
-        *termchar = ch;
-        return FALSE;
-    }
-
-    val = ch - '0';
-    while ((ch = text_getc(file)) != EOF) {
-        if (! isdigit(ch))
-            break;
-        val *= 10;
-        val += ch - '0';
+    if (!isdigit(ch))
+        retval = FALSE;
+    else {
+        long val;
+        val = ch - '0';  /* initial value */
+        while ((ch = text_getc(fileP)) != EOF) {
+            if (! isdigit(ch))
+                break;
+            val *= 10;
+            val += ch - '0';
+        }
+        *resultP = val;
+        retval = TRUE;
     }
-    *result = val;
-    *termchar = ch;
-    return TRUE;
+    *termcharP = ch;
+    return retval;
 }
 
 
 static boolean
 read_scan_integer (FILE * file, long * result, int * termchar)
-/* Variant of read_text_integer that always looks for a non-space termchar;
+/* Variant of readTextInteger that always looks for a non-space termchar;
  * this simplifies parsing of punctuation in scan scripts.
  */
 {
     register int ch;
 
-    if (! read_text_integer(file, result, termchar))
+    if (! readTextInteger(file, result, termchar))
         return FALSE;
     ch = *termchar;
     while (ch != EOF && isspace(ch))
@@ -625,45 +632,59 @@ read_quant_tables (j_compress_ptr cinfo, char * filename,
  */
 {
     FILE * fp;
-    int tblno, i, termchar;
-    long val;
-    unsigned int table[DCTSIZE2];
+    boolean retval;
 
-    if ((fp = fopen(filename, "rb")) == NULL) {
+    fp = fopen(filename, "rb");
+    if (fp == NULL) {
         pm_message("Can't open table file %s", filename);
-        return FALSE;
-    }
-    tblno = 0;
-
-    while (read_text_integer(fp, &val, &termchar)) {
-        /* read 1st element of table */
-        if (tblno >= NUM_QUANT_TBLS) {
-            pm_message("Too many tables in file %s", filename);
-            fclose(fp);
-            return FALSE;
-        }
-        table[0] = (unsigned int) val;
-        for (i = 1; i < DCTSIZE2; i++) {
-            if (! read_text_integer(fp, &val, &termchar)) {
-                pm_message("Invalid table data in file %s", filename);
-                fclose(fp);
-                return FALSE;
+        retval = FALSE;
+    } else {
+        boolean eof, error;
+        unsigned int tblno;
+
+        for (tblno = 0, eof = FALSE, error = FALSE; !eof && !error; ++tblno) {
+            long val;
+            int termchar;
+            boolean gotOne;
+
+            gotOne = readTextInteger(fp, &val, &termchar);
+            if (gotOne) {
+                /* read 1st element of table */
+                if (tblno >= NUM_QUANT_TBLS) {
+                    pm_message("Too many tables in file %s", filename);
+                    error = TRUE;
+                } else { 
+                    unsigned int table[DCTSIZE2];
+                    unsigned int i;
+
+                    table[0] = (unsigned int) val;
+                    for (i = 1; i < DCTSIZE2 && !error; ++i) {
+                        if (! readTextInteger(fp, &val, &termchar)) {
+                            pm_message("Invalid table data in file %s",
+                                       filename);
+                            error = TRUE;
+                        } else
+                            table[i] = (unsigned int) val;
+                    }
+                    if (!error)
+                        jpeg_add_quant_table(
+                            cinfo, tblno, table, scale_factor, force_baseline);
+                }
+            } else {
+                if (termchar == EOF)
+                    eof = TRUE;
+                else {
+                    pm_message("Non-numeric data in file %s", filename);
+                    error = TRUE;
+                }
             }
-            table[i] = (unsigned int) val;
         }
-        jpeg_add_quant_table(cinfo, tblno, table, scale_factor, 
-                             force_baseline);
-        tblno++;
-    }
 
-    if (termchar != EOF) {
-        pm_message("Non-numeric data in file %s", filename);
         fclose(fp);
-        return FALSE;
+        retval = !error;
     }
-
-    fclose(fp);
-    return TRUE;
+        
+    return retval;
 }