| |
| extern int foo (void); |
| |
| int |
| avi_parse_comments (int fd, char *buf, int space_left) |
| { |
| int len = 0, readlen = 0, k; |
| char *data, *c, *d; |
| |
| if (fd <= 0 || !buf || space_left <= 0) |
| return -1; |
| |
| memset (buf, 0, space_left); |
| |
| readlen = foo (); |
| if (!(data = malloc (readlen * sizeof (char) + 1))) |
| return -1; |
| |
| c = data; |
| space_left--; |
| |
| while (len < space_left) |
| { |
| if (!c || *c == '\0') |
| break; |
| else if (*c == 'I') |
| { |
| d = c + 4; |
| |
| k = 0; |
| while (d[k] != '\r' && d[k] != '\n' && d[k] != '\0') |
| ++k; |
| if (k >= space_left) |
| return len; |
| |
| |
| memcpy (buf + len, c, 4); |
| len += 4; |
| |
| |
| long2str (buf + len, k + 1); |
| len += 4; |
| |
| |
| memcpy (buf + len, d, k); |
| |
| *(buf + len + k + 1) = '\0'; |
| |
| |
| if ((k + 1) & 1) |
| { |
| k++; |
| *(buf + len + k + 1) = '\0'; |
| } |
| len += k + 1; |
| |
| |
| while (*c != '\n' && *c != '\0') |
| ++c; |
| if (*c != '\0') |
| ++c; |
| else |
| break; |
| |
| } |
| } |
| free (data); |
| |
| return len; |
| } |
| |
| |