]> gitweb.michael.orlitzky.com - libsvgtiny.git/commitdiff
Implement svgtiny_free() and fix memory usage.
authorJames Bursa <james@netsurf-browser.org>
Sat, 2 Feb 2008 18:10:19 +0000 (18:10 -0000)
committerJames Bursa <james@netsurf-browser.org>
Sat, 2 Feb 2008 18:10:19 +0000 (18:10 -0000)
svn path=/trunk/libsvgtiny/; revision=3825

makefile
svgtiny.c
svgtiny.h
svgtiny_test.c

index ef3d27c6a3f2331bdfc0212007b955e5fe2fb6ba..c4ca3f6485928eae06e75560b47b96d7e4933cbd 100644 (file)
--- a/makefile
+++ b/makefile
@@ -29,7 +29,7 @@ svgtiny_test$(EXEEXT): svgtiny_test.c libsvgtiny.a
        $(CC) $(CFLAGS) $(LIBS) -o $@ $^
 
 clean:
-       -rm *.o libsvgtiny.a svgtiny_test$(EXEEXT)
+       -rm *.o libsvgtiny.a svgtiny_test$(EXEEXT) colors.c
 
 colors.c: colors.gperf
        gperf --output-file=$@ $<
index 21a23b892d6bd833e24bf4034c44577b069d95a4..ad2e8a5849577b839f78b6594ccf4aa7f5f948b8 100644 (file)
--- a/svgtiny.c
+++ b/svgtiny.c
@@ -75,8 +75,6 @@ struct svgtiny_diagram *svgtiny_create(void)
        if (!diagram)
                return 0;
 
-       diagram->doc = 0;
-       diagram->svg = 0;
        diagram->shape = 0;
        diagram->shape_count = 0;
 
@@ -102,7 +100,6 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
                        XML_PARSE_DTDVALID /* needed for xmlGetID to work */);
        if (!document)
                return svgtiny_LIBXML_ERROR;
-       diagram->doc = document;
 
        /*xmlDebugDumpDocument(stderr, document);*/
 
@@ -112,12 +109,11 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
                return svgtiny_NOT_SVG;
        if (strcmp((const char *) svg->name, "svg") != 0)
                return svgtiny_NOT_SVG;
-       diagram->svg = svg;
 
        /* get graphic dimensions */
        float x, y, width, height;
        state.diagram = diagram;
-       state.document = diagram->doc;
+       state.document = document;
        state.viewport_width = viewport_width;
        state.viewport_height = viewport_height;
        svgtiny_parse_position_attributes(svg, state, &x, &y, &width, &height);
@@ -138,7 +134,11 @@ svgtiny_code svgtiny_parse(struct svgtiny_diagram *diagram,
        state.stroke = svgtiny_TRANSPARENT;
        state.stroke_width = 1;
 
-       return svgtiny_parse_svg(svg, state);
+       svgtiny_parse_svg(svg, state);
+
+       xmlFreeDoc(document);
+
+       return svgtiny_OK;
 }
 
 
@@ -1072,3 +1072,18 @@ void svgtiny_transform_path(float *p, unsigned int n,
        }
 }
 
+
+void svgtiny_free(struct svgtiny_diagram *svg)
+{
+       assert(svg);
+
+       for (unsigned int i = 0; i != svg->shape_count; i++) {
+               free(svg->shape[i].path);
+               free(svg->shape[i].text);
+       }
+       
+       free(svg->shape);
+
+       free(svg);
+}
+
index a5017d1ff6a1d09882eea954bb6d8429600a4b5b..534da2df9acc4d8838b280ab6251b2ed1ad1dafd 100644 (file)
--- a/svgtiny.h
+++ b/svgtiny.h
@@ -25,9 +25,6 @@ struct svgtiny_shape {
 };
 
 struct svgtiny_diagram {
-       xmlDoc *doc;
-       xmlNode *svg;
-
        int width, height;
 
        struct svgtiny_shape *shape;
index 9bb7e2e30cdd2e9e50348842c4c8ca68f8694729..8d485d31a1e885c47aa6d478f06e823397425faf 100644 (file)
@@ -40,8 +40,6 @@ int main(int argc, char *argv[])
        }
        size = sb.st_size;
 
-       fprintf(stderr, "size: %lld bytes\n", (long long) size);
-
        buffer = malloc(size);
        if (!buffer) {
                fprintf(stderr, "Unable to allocate %lld bytes\n",
@@ -69,6 +67,8 @@ int main(int argc, char *argv[])
        if (code != svgtiny_OK)
                fprintf(stderr, "svgtiny_parse failed: %i\n", code);
 
+       free(buffer);
+
        printf("viewbox 0 0 %i %i\n", diagram->width, diagram->height);
 
        for (unsigned int i = 0; i != diagram->shape_count; i++) {
@@ -126,6 +126,8 @@ int main(int argc, char *argv[])
                printf("\n");
        }
 
+       svgtiny_free(diagram);
+
        return 0;
 }