aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClaudio Bley2013-11-01 11:10:13 +0200
committerEli Zaretskii2013-11-01 11:10:13 +0200
commit0e7690deacc3232f1a0bd3902255ffa34292e5cf (patch)
tree9459348a527f4b61408cefe9f08538460a651669 /src
parent019c8218f07fd2acca84661be01147c50908d903 (diff)
downloademacs-0e7690deacc3232f1a0bd3902255ffa34292e5cf.tar.gz
emacs-0e7690deacc3232f1a0bd3902255ffa34292e5cf.zip
Fix handling of comments in NetPBM image files.
src/image.c (pbm_next_char): New function. (pbm_scan_number): Use it. lisp/image.el (image-type-header-regexps): Fix the 'pbm' part to allow comments in pbm files.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog4
-rw-r--r--src/image.c51
2 files changed, 33 insertions, 22 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0d58733f4bf..bfa28105571 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,6 +1,8 @@
12013-11-01 Claudio Bley <claudio.bley@googlemail.com> 12013-11-01 Claudio Bley <claudio.bley@googlemail.com>
2 2
3 * image.c (Qlibjpeg_version): New variable. 3 * image.c (pbm_next_char): New function.
4 (pbm_scan_number): Use it.
5 (Qlibjpeg_version): New variable.
4 (syms_of_image): DEFSYM and initialize it. 6 (syms_of_image): DEFSYM and initialize it.
5 7
62013-10-31 Jan Djärv <jan.h.d@swipnet.se> 82013-10-31 Jan Djärv <jan.h.d@swipnet.se>
diff --git a/src/image.c b/src/image.c
index fca1bb077f6..958295c5d09 100644
--- a/src/image.c
+++ b/src/image.c
@@ -5106,6 +5106,27 @@ pbm_image_p (Lisp_Object object)
5106} 5106}
5107 5107
5108 5108
5109/* Get next char skipping comments in Netpbm header. Returns -1 at
5110 end of input. */
5111
5112static int
5113pbm_next_char (unsigned char **s, unsigned char *end)
5114{
5115 int c = -1;
5116
5117 while (*s < end && (c = *(*s)++, c == '#'))
5118 {
5119 /* Skip to the next line break. */
5120 while (*s < end && (c = *(*s)++, c != '\n' && c != '\r'))
5121 ;
5122
5123 c = -1;
5124 }
5125
5126 return c;
5127}
5128
5129
5109/* Scan a decimal number from *S and return it. Advance *S while 5130/* Scan a decimal number from *S and return it. Advance *S while
5110 reading the number. END is the end of the string. Value is -1 at 5131 reading the number. END is the end of the string. Value is -1 at
5111 end of input. */ 5132 end of input. */
@@ -5115,28 +5136,16 @@ pbm_scan_number (unsigned char **s, unsigned char *end)
5115{ 5136{
5116 int c = 0, val = -1; 5137 int c = 0, val = -1;
5117 5138
5118 while (*s < end) 5139 /* Skip white-space. */
5119 { 5140 while ((c = pbm_next_char (s, end)) != -1 && c_isspace (c))
5120 /* Skip white-space. */ 5141 ;
5121 while (*s < end && (c = *(*s)++, c_isspace (c)))
5122 ;
5123 5142
5124 if (c == '#') 5143 if (c_isdigit (c))
5125 { 5144 {
5126 /* Skip comment to end of line. */ 5145 /* Read decimal number. */
5127 while (*s < end && (c = *(*s)++, c != '\n')) 5146 val = c - '0';
5128 ; 5147 while ((c = pbm_next_char (s, end)) != -1 && c_isdigit (c))
5129 } 5148 val = 10 * val + c - '0';
5130 else if (c_isdigit (c))
5131 {
5132 /* Read decimal number. */
5133 val = c - '0';
5134 while (*s < end && (c = *(*s)++, c_isdigit (c)))
5135 val = 10 * val + c - '0';
5136 break;
5137 }
5138 else
5139 break;
5140 } 5149 }
5141 5150
5142 return val; 5151 return val;