Commit 0e7690de authored by Claudio Bley's avatar Claudio Bley Committed by Eli Zaretskii

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.
parent 019c8218
2013-11-01 Claudio Bley <claudio.bley@googlemail.com>
* image.el (image-type-header-regexps): Fix the 'pbm' part to
allow comments in pbm files.
* term/w32-win.el (dynamic-library-alist): Support newer versions
of libjpeg starting with v7: look only for the DLL from the
version against which Emacs was built.
......
......@@ -34,7 +34,10 @@
(defconst image-type-header-regexps
`(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
("\\`P[1-6][[:space:]]+\\(?:#.*[[:space:]]+\\)*[0-9]+[[:space:]]+[0-9]+" . pbm)
("\\`P[1-6]\\\(?:\
\\(?:\\(?:#[^\r\n]*[\r\n]\\)?[[:space:]]\\)+\
\\(?:\\(?:#[^\r\n]*[\r\n]\\)?[0-9]\\)+\
\\)\\{2\\}" . pbm)
("\\`GIF8[79]a" . gif)
("\\`\x89PNG\r\n\x1a\n" . png)
("\\`[\t\n\r ]*#define \\([a-z0-9_]+\\)_width [0-9]+\n\
......
2013-11-01 Claudio Bley <claudio.bley@googlemail.com>
* image.c (Qlibjpeg_version): New variable.
* image.c (pbm_next_char): New function.
(pbm_scan_number): Use it.
(Qlibjpeg_version): New variable.
(syms_of_image): DEFSYM and initialize it.
2013-10-31 Jan Djärv <jan.h.d@swipnet.se>
......
......@@ -5106,6 +5106,27 @@ pbm_image_p (Lisp_Object object)
}
/* Get next char skipping comments in Netpbm header. Returns -1 at
end of input. */
static int
pbm_next_char (unsigned char **s, unsigned char *end)
{
int c = -1;
while (*s < end && (c = *(*s)++, c == '#'))
{
/* Skip to the next line break. */
while (*s < end && (c = *(*s)++, c != '\n' && c != '\r'))
;
c = -1;
}
return c;
}
/* Scan a decimal number from *S and return it. Advance *S while
reading the number. END is the end of the string. Value is -1 at
end of input. */
......@@ -5115,28 +5136,16 @@ pbm_scan_number (unsigned char **s, unsigned char *end)
{
int c = 0, val = -1;
while (*s < end)
{
/* Skip white-space. */
while (*s < end && (c = *(*s)++, c_isspace (c)))
;
/* Skip white-space. */
while ((c = pbm_next_char (s, end)) != -1 && c_isspace (c))
;
if (c == '#')
{
/* Skip comment to end of line. */
while (*s < end && (c = *(*s)++, c != '\n'))
;
}
else if (c_isdigit (c))
{
/* Read decimal number. */
val = c - '0';
while (*s < end && (c = *(*s)++, c_isdigit (c)))
val = 10 * val + c - '0';
break;
}
else
break;
if (c_isdigit (c))
{
/* Read decimal number. */
val = c - '0';
while ((c = pbm_next_char (s, end)) != -1 && c_isdigit (c))
val = 10 * val + c - '0';
}
return val;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment