mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
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.
This commit is contained in:
parent
019c8218f0
commit
0e7690deac
4 changed files with 40 additions and 23 deletions
|
|
@ -1,5 +1,8 @@
|
|||
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\
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
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>
|
||||
|
|
|
|||
51
src/image.c
51
src/image.c
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue