Sanitized memory allocation scheme.
authorTilman Sauerbeck <tilman@code-monkey.de>
Thu, 17 Aug 2006 15:51:37 +0000 (17:51 +0200)
committerTilman Sauerbeck <tilman@code-monkey.de>
Wed, 23 Aug 2006 17:39:15 +0000 (19:39 +0200)
ext/vcedit.c

index 1aee14c25ed1fcf4cd0b0ba2fb2d53edd903b3fa..832f417b2b30519cba6661b3dfb063c52a43f925 100644 (file)
 struct vcedit_state_St {
        int refcount;
 
 struct vcedit_state_St {
        int refcount;
 
-       ogg_sync_state *oy;
-       ogg_stream_state *os;
+       ogg_sync_state oy;
+       ogg_stream_state os;
 
 
-       vorbis_comment *vc;
-       vorbis_info *vi;
+       vorbis_comment vc;
+       vorbis_info vi;
 
        char filename[PATH_MAX];
 
 
        char filename[PATH_MAX];
 
@@ -58,10 +58,6 @@ struct vcedit_state_St {
 static void
 vcedit_state_free (vcedit_state *state)
 {
 static void
 vcedit_state_free (vcedit_state *state)
 {
-       free (state->oy);
-       free (state->os);
-       free (state->vc);
-       free (state->vi);
        free (state->mainbuf);
        free (state->bookbuf);
        free (state->vendor);
        free (state->mainbuf);
        free (state->bookbuf);
        free (state->vendor);
@@ -79,22 +75,6 @@ vcedit_state_init (vcedit_state *state)
 {
        state->refcount = 1;
 
 {
        state->refcount = 1;
 
-       state->oy = malloc (sizeof (ogg_sync_state));
-       if (!state->oy)
-               return false;
-
-       state->os = malloc (sizeof (ogg_stream_state));
-       if (!state->os)
-               return false;
-
-       state->vc = malloc (sizeof (vorbis_comment));
-       if (!state->vc)
-               return false;
-
-       state->vi = malloc (sizeof (vorbis_info));
-       if (!state->vi)
-               return false;
-
        return true;
 }
 
        return true;
 }
 
@@ -123,17 +103,17 @@ vcedit_state_new (const char *filename)
 vorbis_comment *
 vcedit_comments (vcedit_state *state)
 {
 vorbis_comment *
 vcedit_comments (vcedit_state *state)
 {
-       return state->opened ? state->vc : NULL;
+       return state->opened ? &state->vc : NULL;
 }
 
 static void
 vcedit_clear_internals (vcedit_state *state)
 {
 }
 
 static void
 vcedit_clear_internals (vcedit_state *state)
 {
-       ogg_stream_clear (state->os);
-       ogg_sync_clear (state->oy);
+       ogg_stream_clear (&state->os);
+       ogg_sync_clear (&state->oy);
 
 
-       vorbis_info_clear (state->vi);
-       vorbis_comment_clear (state->vc);
+       vorbis_info_clear (&state->vi);
+       vorbis_comment_clear (&state->vc);
 
        free (state->vendor);
        state->vendor = NULL;
 
        free (state->vendor);
        state->vendor = NULL;
@@ -229,7 +209,7 @@ _blocksize (vcedit_state *s, ogg_packet *p)
 {
        int this, ret = 0;
 
 {
        int this, ret = 0;
 
-       this = vorbis_packet_blocksize (s->vi, p);
+       this = vorbis_packet_blocksize (&s->vi, p);
 
        if (s->prevW)
                ret = (this + s->prevW) / 4;
 
        if (s->prevW)
                ret = (this + s->prevW) / 4;
@@ -245,7 +225,7 @@ _fetch_next_packet (vcedit_state *s, ogg_packet *p, ogg_page *page)
        char *buffer;
        int result, bytes;
 
        char *buffer;
        int result, bytes;
 
-       result = ogg_stream_packetout (s->os, p);
+       result = ogg_stream_packetout (&s->os, p);
 
        if (result > 0)
                return 1;
 
        if (result > 0)
                return 1;
@@ -253,10 +233,10 @@ _fetch_next_packet (vcedit_state *s, ogg_packet *p, ogg_page *page)
        if (s->eosin)
                return 0;
 
        if (s->eosin)
                return 0;
 
-       while (ogg_sync_pageout (s->oy, page) <= 0) {
-               buffer = ogg_sync_buffer (s->oy, CHUNKSIZE);
+       while (ogg_sync_pageout (&s->oy, page) <= 0) {
+               buffer = ogg_sync_buffer (&s->oy, CHUNKSIZE);
                bytes = fread (buffer, 1, CHUNKSIZE, s->in);
                bytes = fread (buffer, 1, CHUNKSIZE, s->in);
-               ogg_sync_wrote (s->oy, bytes);
+               ogg_sync_wrote (&s->oy, bytes);
 
                if (!bytes)
                        return 0;
 
                if (!bytes)
                        return 0;
@@ -270,7 +250,7 @@ _fetch_next_packet (vcedit_state *s, ogg_packet *p, ogg_page *page)
                return 0;
        }
 
                return 0;
        }
 
-       ogg_stream_pagein (s->os, page);
+       ogg_stream_pagein (&s->os, page);
 
        return _fetch_next_packet (s, p, page);
 }
 
        return _fetch_next_packet (s, p, page);
 }
@@ -290,20 +270,20 @@ vcedit_open (vcedit_state *state)
        if (!state->in)
                return VCEDIT_ERR_OPEN;
 
        if (!state->in)
                return VCEDIT_ERR_OPEN;
 
-       ogg_sync_init (state->oy);
+       ogg_sync_init (&state->oy);
 
        while (1) {
 
        while (1) {
-               buffer = ogg_sync_buffer (state->oy, CHUNKSIZE);
+               buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
 
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
 
-               ogg_sync_wrote (state->oy, bytes);
+               ogg_sync_wrote (&state->oy, bytes);
 
 
-               if (ogg_sync_pageout (state->oy, &og) == 1)
+               if (ogg_sync_pageout (&state->oy, &og) == 1)
                        break;
 
                /* Bail if we don't find data in the first 40 kB */
                if (chunks++ >= 10) {
                        break;
 
                /* Bail if we don't find data in the first 40 kB */
                if (chunks++ >= 10) {
-                       ogg_sync_clear (state->oy);
+                       ogg_sync_clear (&state->oy);
 
                        return VCEDIT_ERR_INVAL;
                }
 
                        return VCEDIT_ERR_INVAL;
                }
@@ -311,21 +291,21 @@ vcedit_open (vcedit_state *state)
 
        state->serial = ogg_page_serialno (&og);
 
 
        state->serial = ogg_page_serialno (&og);
 
-       ogg_stream_init (state->os, state->serial);
-       vorbis_info_init (state->vi);
-       vorbis_comment_init (state->vc);
+       ogg_stream_init (&state->os, state->serial);
+       vorbis_info_init (&state->vi);
+       vorbis_comment_init (&state->vc);
 
 
-       if (ogg_stream_pagein (state->os, &og) < 0) {
+       if (ogg_stream_pagein (&state->os, &og) < 0) {
                ret = VCEDIT_ERR_INVAL;
                goto err;
        }
 
                ret = VCEDIT_ERR_INVAL;
                goto err;
        }
 
-       if (ogg_stream_packetout (state->os, &header_main) != 1) {
+       if (ogg_stream_packetout (&state->os, &header_main) != 1) {
                ret = VCEDIT_ERR_INVAL;
                goto err;
        }
 
                ret = VCEDIT_ERR_INVAL;
                goto err;
        }
 
-       if (vorbis_synthesis_headerin (state->vi, state->vc, &header_main) < 0) {
+       if (vorbis_synthesis_headerin (&state->vi, &state->vc, &header_main) < 0) {
                ret = VCEDIT_ERR_INVAL;
                goto err;
        }
                ret = VCEDIT_ERR_INVAL;
                goto err;
        }
@@ -339,16 +319,16 @@ vcedit_open (vcedit_state *state)
 
        while (i < 2) {
                while (i < 2) {
 
        while (i < 2) {
                while (i < 2) {
-                       int result = ogg_sync_pageout (state->oy, &og);
+                       int result = ogg_sync_pageout (&state->oy, &og);
 
                        if (!result)
                                break; /* Too little data so far */
 
                        if (result == 1) {
 
                        if (!result)
                                break; /* Too little data so far */
 
                        if (result == 1) {
-                               ogg_stream_pagein (state->os, &og);
+                               ogg_stream_pagein (&state->os, &og);
 
                                while (i < 2) {
 
                                while (i < 2) {
-                                       result = ogg_stream_packetout (state->os, header);
+                                       result = ogg_stream_packetout (&state->os, header);
 
                                        if (!result)
                                                break;
 
                                        if (!result)
                                                break;
@@ -358,7 +338,7 @@ vcedit_open (vcedit_state *state)
                                                goto err;
                                        }
 
                                                goto err;
                                        }
 
-                                       vorbis_synthesis_headerin (state->vi, state->vc, header);
+                                       vorbis_synthesis_headerin (&state->vi, &state->vc, header);
 
                                        if (i == 1) {
                                                state->booklen = header->bytes;
 
                                        if (i == 1) {
                                                state->booklen = header->bytes;
@@ -372,7 +352,7 @@ vcedit_open (vcedit_state *state)
                        }
                }
 
                        }
                }
 
-               buffer = ogg_sync_buffer (state->oy, CHUNKSIZE);
+               buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
 
                if (bytes == 0 && i < 2) {
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
 
                if (bytes == 0 && i < 2) {
@@ -380,11 +360,11 @@ vcedit_open (vcedit_state *state)
                        goto err;
                }
 
                        goto err;
                }
 
-               ogg_sync_wrote (state->oy, bytes);
+               ogg_sync_wrote (&state->oy, bytes);
        }
 
        /* Copy the vendor tag */
        }
 
        /* Copy the vendor tag */
-       state->vendor = strdup (state->vc->vendor);
+       state->vendor = strdup (state->vc.vendor);
 
        /* Headers are done! */
        state->opened = true;
 
        /* Headers are done! */
        state->opened = true;
@@ -443,7 +423,7 @@ vcedit_write (vcedit_state *state)
 
        ogg_stream_init (&streamout, state->serial);
 
 
        ogg_stream_init (&streamout, state->serial);
 
-       _commentheader_out (state->vc, state->vendor, &header_comments);
+       _commentheader_out (&state->vc, state->vendor, &header_comments);
 
        ogg_stream_packetin (&streamout, &header_main);
        ogg_stream_packetin (&streamout, &header_comments);
 
        ogg_stream_packetin (&streamout, &header_main);
        ogg_stream_packetin (&streamout, &header_comments);
@@ -537,7 +517,7 @@ vcedit_write (vcedit_state *state)
                 * through, a page at a time.
                 */
                while (1) {
                 * through, a page at a time.
                 */
                while (1) {
-                       result = ogg_sync_pageout (state->oy, &ogout);
+                       result = ogg_sync_pageout (&state->oy, &ogout);
 
                        if (!result)
                 break;
 
                        if (!result)
                 break;
@@ -556,9 +536,9 @@ vcedit_write (vcedit_state *state)
                        }
                }
 
                        }
                }
 
-               buffer = ogg_sync_buffer (state->oy, CHUNKSIZE);
+               buffer = ogg_sync_buffer (&state->oy, CHUNKSIZE);
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
                bytes = fread (buffer, 1, CHUNKSIZE, state->in);
-               ogg_sync_wrote (state->oy, bytes);
+               ogg_sync_wrote (&state->oy, bytes);
 
                if (!bytes) {
                        state->eosin = 1;
 
                if (!bytes) {
                        state->eosin = 1;