| Index: third_party/libjpeg_turbo/rdjpgcom.c
|
| ===================================================================
|
| --- third_party/libjpeg_turbo/rdjpgcom.c (revision 95020)
|
| +++ third_party/libjpeg_turbo/rdjpgcom.c (working copy)
|
| @@ -2,6 +2,7 @@
|
| * rdjpgcom.c
|
| *
|
| * Copyright (C) 1994-1997, Thomas G. Lane.
|
| + * Modified 2009 by Bill Allombert, Guido Vollbeding.
|
| * This file is part of the Independent JPEG Group's software.
|
| * For conditions of distribution and use, see the accompanying README file.
|
| *
|
| @@ -14,6 +15,9 @@
|
| #define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */
|
| #include "jinclude.h" /* get auto-config symbols, <stdio.h> */
|
|
|
| +#ifdef HAVE_LOCALE_H
|
| +#include <locale.h> /* Bill Allombert: use locale for isprint */
|
| +#endif
|
| #include <ctype.h> /* to declare isupper(), tolower() */
|
| #ifdef USE_SETMODE
|
| #include <fcntl.h> /* to declare setmode()'s parameter macros */
|
| @@ -218,12 +222,17 @@
|
| */
|
|
|
| static void
|
| -process_COM (void)
|
| +process_COM (int raw)
|
| {
|
| unsigned int length;
|
| int ch;
|
| int lastch = 0;
|
|
|
| + /* Bill Allombert: set locale properly for isprint */
|
| +#ifdef HAVE_LOCALE_H
|
| + setlocale(LC_CTYPE, "");
|
| +#endif
|
| +
|
| /* Get the marker parameter length count */
|
| length = read_2_bytes();
|
| /* Length includes itself, so must be at least 2 */
|
| @@ -233,12 +242,14 @@
|
|
|
| while (length > 0) {
|
| ch = read_1_byte();
|
| + if (raw) {
|
| + putc(ch, stdout);
|
| /* Emit the character in a readable form.
|
| * Nonprintables are converted to \nnn form,
|
| * while \ is converted to \\.
|
| * Newlines in CR, CR/LF, or LF form will be printed as one newline.
|
| */
|
| - if (ch == '\r') {
|
| + } else if (ch == '\r') {
|
| printf("\n");
|
| } else if (ch == '\n') {
|
| if (lastch != '\r')
|
| @@ -254,6 +265,11 @@
|
| length--;
|
| }
|
| printf("\n");
|
| +
|
| + /* Bill Allombert: revert to C locale */
|
| +#ifdef HAVE_LOCALE_H
|
| + setlocale(LC_CTYPE, "C");
|
| +#endif
|
| }
|
|
|
|
|
| @@ -321,7 +337,7 @@
|
| */
|
|
|
| static int
|
| -scan_JPEG_header (int verbose)
|
| +scan_JPEG_header (int verbose, int raw)
|
| {
|
| int marker;
|
|
|
| @@ -362,7 +378,7 @@
|
| return marker;
|
|
|
| case M_COM:
|
| - process_COM();
|
| + process_COM(raw);
|
| break;
|
|
|
| case M_APP12:
|
| @@ -371,7 +387,7 @@
|
| */
|
| if (verbose) {
|
| printf("APP12 contains:\n");
|
| - process_COM();
|
| + process_COM(raw);
|
| } else
|
| skip_variable();
|
| break;
|
| @@ -398,6 +414,7 @@
|
| fprintf(stderr, "Usage: %s [switches] [inputfile]\n", progname);
|
|
|
| fprintf(stderr, "Switches (names may be abbreviated):\n");
|
| + fprintf(stderr, " -raw Display non-printable characters in comments (unsafe)\n");
|
| fprintf(stderr, " -verbose Also display dimensions of JPEG image\n");
|
|
|
| exit(EXIT_FAILURE);
|
| @@ -438,7 +455,7 @@
|
| {
|
| int argn;
|
| char * arg;
|
| - int verbose = 0;
|
| + int verbose = 0, raw = 0;
|
|
|
| /* On Mac, fetch a command line. */
|
| #ifdef USE_CCOMMAND
|
| @@ -457,6 +474,8 @@
|
| arg++; /* advance over '-' */
|
| if (keymatch(arg, "verbose", 1)) {
|
| verbose++;
|
| + } else if (keymatch(arg, "raw", 1)) {
|
| + raw = 1;
|
| } else
|
| usage();
|
| }
|
| @@ -488,7 +507,7 @@
|
| }
|
|
|
| /* Scan the JPEG headers. */
|
| - (void) scan_JPEG_header(verbose);
|
| + (void) scan_JPEG_header(verbose, raw);
|
|
|
| /* All done. */
|
| exit(EXIT_SUCCESS);
|
|
|