- boxheader = (boxheader_param_t *)malloc( sizeof( boxheader_param_t));
- boxheader->headlen = headlen;
- boxheader->length = boxlen;
- strncpy( boxheader->type, boxtype, 4);
- boxheader->next = NULL;
-
- free( boxtype);
- return boxheader;
+ if (boxlen == 1) { /* read XLBox */
+ boxlen = fetch_8bytebigendian(fd, offset + 8);
+ headlen = 16;
+ }
+
+ boxheader = (boxheader_param_t *)malloc(sizeof(boxheader_param_t));
+ boxheader->headlen = headlen;
+ boxheader->length = boxlen;
+ strncpy(boxheader->type, boxtype, 4);
+ boxheader->next = NULL;
+
+ free(boxtype);
+ return boxheader;