1 2extern int foo (void); 3 4int 5avi_parse_comments (int fd, char *buf, int space_left) 6{ 7 int len = 0, readlen = 0, k; 8 char *data, *c, *d; 9 10 if (fd <= 0 || !buf || space_left <= 0) 11 return -1; 12 13 memset (buf, 0, space_left); 14 15 readlen = foo (); 16 if (!(data = malloc (readlen * sizeof (char) + 1))) 17 return -1; 18 19 c = data; 20 space_left--; 21 22 while (len < space_left) 23 { 24 if (!c || *c == '\0') 25 break; 26 else if (*c == 'I') 27 { 28 d = c + 4; 29 30 k = 0; 31 while (d[k] != '\r' && d[k] != '\n' && d[k] != '\0') 32 ++k; 33 if (k >= space_left) 34 return len; 35 36 37 memcpy (buf + len, c, 4); 38 len += 4; 39 40 41 long2str (buf + len, k + 1); 42 len += 4; 43 44 45 memcpy (buf + len, d, k); 46 47 *(buf + len + k + 1) = '\0'; 48 49 50 if ((k + 1) & 1) 51 { 52 k++; 53 *(buf + len + k + 1) = '\0'; 54 } 55 len += k + 1; 56 57 58 while (*c != '\n' && *c != '\0') 59 ++c; 60 if (*c != '\0') 61 ++c; 62 else 63 break; 64 65 } 66 } 67 free (data); 68 69 return len; 70} 71 72 73