rem: glong file_size, stream_size;
add: guint64 file_size, stream_size;
context: mpeg_proc(xmlNodePtr file_node,          FILE *fp){    gint skid = 1048576;    xmlNodePtr audio_stream_node, id3_node = NULL, id3v2_node = NULL;    MPEGInfo mpeg;    glong file_size, stream_size;    guint32 hdr;    guchar fhdr[MPEG_MAX_FRAME_SIZE], tmp_char;    gchar tmp[64];    /* find file size */    fseek(fp, 0, SEEK_END);    file_size = ftell(fp);    /* check for a possible ID3v2 tag */    id3v2_node = id3v2_parse(fp);    /* get stream size (discount id3 tags) */    stream_size = file_size - ftell(fp);    /* read and parse the MPEG header */    if (fread(&hdr, sizeof hdr, 1, fp) != 1) {        if (id3v2_node != NULL)            xmlFreeNode(id3v2_node);        return FALSE;    }    hdr = GUINT32_FROM_BE(hdr);    while (!decode_header(hdr, &mpeg)) {        /* header not found, shift and try next byte */        /*         * `skid´ is used to improve performance if you have a big non-mpeg         * file with a mp3 extension. We stop searching for mpeg header if         * we skid for more than 1MB.         */        if (--skid <= 0 || fread(&tmp_char, 1, 1, fp) != 1) {            if (id3v2_node != NULL)                xmlFreeNode(id3v2_node);            return FALSE;        }        hdr = (hdr << CHAR_BIT) | tmp_char;    }    /* create and initialize <audio-stream /> element */    audio_stream_node = xmlNewChild(file_node, NULL, "audio-stream", NULL);    xmlNewProp(audio_stream_node, "format", "mpeg");    g_snprintf(tmp, sizeof tmp, "%d", mpeg.version + 1);    xmlNewProp(audio_stream_node, "mpeg", tmp);    g_snprintf(tmp, sizeof tmp, "%d", mpeg.layer + 1);    xmlNewProp(audio_stream_node, "layer", tmp);    if (id3v2_node != NULL)        xmlAddChild(audio_stream_node, id3v2_node);    /* compute song length */    mpeg.vbr = FALSE;    mpeg.frames = 0;    mpeg.length = 0;    if (fread(fhdr, mpeg.framesize, 1, fp) == 1) {        /* check for a Xing header (used on VBR streams) */        XingInfo xing;        gdouble tpf = compute_tpf(&mpeg);        if (xing_decode(fhdr, &mpeg, &xing)) {            /* Xing header found, presumably this is a VBR stream */            mpeg.vbr = TRUE;            mpeg.bitrate = 0;            if (xing.flags & XING_HAS_FRAMES) {                mpeg.frames = xing.frames;                if (xing.flags & XING_HAS_BYTES)                    mpeg.bitrate = xing.bytes * 8 / (xing.frames * tpf * 1000);            }        }        /* parse ID3v1 tag */        if ((id3_node = id3v1_parse(fp)) != NULL) {            xmlAddChild(audio_stream_node, id3_node);            stream_size -= ID3V1_TAG_LENGTH;        }        if (mpeg.frames == 0) {            /* Xing header not found or didn't contain frames, estimate */            mpeg.frames = stream_size / compute_bpf(&mpeg);        }        /* compute song length, in milliseconds */        mpeg.length = mpeg.frames * tpf * 1000;    }    /* add information about the audio stream */    if (mpeg.bitrate != 0) {        g_snprintf(tmp, sizeof tmp, "%s%d", mpeg.vbr ? "~" : "", mpeg.bitrate);        xmlNewProp(audio_stream_node, "bitrate", tmp);    }    g_snprintf(tmp, sizeof tmp, "%d", mpeg.sampling);    xmlNewProp(audio_stream_node, "sample", tmp);    xmlNewProp(audio_stream_node, "mode", channel_modes[mpeg.mode]);    if (mpeg.frames != 0) {        g_snprintf(tmp, sizeof tmp, "%d", mpeg.frames);        xmlNewProp(audio_stream_node, "frames", tmp);    }    if (mpeg.length != 0) {        g_snprintf(tmp, sizeof tmp, "%d", mpeg.length);        xmlNewProp(audio_stream_node, "length", tmp);    }    return TRUE;}