diff options
| author | Claudio Bley | 2013-11-01 11:10:13 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2013-11-01 11:10:13 +0200 |
| commit | 0e7690deacc3232f1a0bd3902255ffa34292e5cf (patch) | |
| tree | 9459348a527f4b61408cefe9f08538460a651669 /src/image.c | |
| parent | 019c8218f07fd2acca84661be01147c50908d903 (diff) | |
| download | emacs-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/image.c')
| -rw-r--r-- | src/image.c | 51 |
1 files changed, 30 insertions, 21 deletions
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 | |||
| 5112 | static int | ||
| 5113 | pbm_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; |