diff --git a/demo/iso.c b/demo/iso.c index 21021c4..1c72798 100644 --- a/demo/iso.c +++ b/demo/iso.c @@ -7,6 +7,7 @@ #include "libburn/libburn.h" #include +#include #include #include #include @@ -83,6 +84,7 @@ int main(int argc, char **argv) } fclose(fd); burn_src->free_data(burn_src); + free(burn_src); iso_image_unref(image); return 0; diff --git a/src/builder.c b/src/builder.c index 44b23f3..da49bee 100644 --- a/src/builder.c +++ b/src/builder.c @@ -65,7 +65,7 @@ int default_create_file(IsoNodeBuilder *builder, IsoImage *image, /* fill node fields */ node->node.refcount = 1; node->node.type = LIBISO_FILE; - node->node.name = strdup(iso_file_source_get_name(src)); + node->node.name = iso_file_source_get_name(src); node->node.mode = S_IFREG | (info.st_mode & ~S_IFMT); node->node.uid = info.st_uid; node->node.gid = info.st_gid; @@ -117,12 +117,14 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image, IsoFile *file; result = iso_file_source_stream_new(src, &stream); if (result < 0) { + free(name); return result; } /* take a ref to the src, as stream has taken our ref */ iso_file_source_ref(src); file = calloc(1, sizeof(IsoFile)); if (file == NULL) { + free(name); iso_stream_unref(stream); return ISO_MEM_ERROR; } @@ -138,6 +140,7 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image, /* source is a directory */ new = calloc(1, sizeof(IsoDir)); if (new == NULL) { + free(name); return ISO_MEM_ERROR; } new->type = LIBISO_DIR; @@ -151,10 +154,12 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image, result = iso_file_source_readlink(src, dest, PATH_MAX); if (result < 0) { + free(name); return result; } link = malloc(sizeof(IsoSymlink)); if (link == NULL) { + free(name); return ISO_MEM_ERROR; } link->dest = strdup(dest); @@ -171,6 +176,7 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image, IsoSpecial *special; special = malloc(sizeof(IsoSpecial)); if (special == NULL) { + free(name); return ISO_MEM_ERROR; } special->dev = info.st_rdev; @@ -182,7 +188,7 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image, /* fill fields */ new->refcount = 1; - new->name = strdup(name); + new->name = name; new->mode = info.st_mode; new->uid = info.st_uid; new->gid = info.st_gid; diff --git a/src/image.c b/src/image.c index 3e75cc9..9130def 100644 --- a/src/image.c +++ b/src/image.c @@ -116,6 +116,7 @@ void iso_image_unref(IsoImage *image) libiso_msgs_destroy(&image->messenger, 0); iso_node_builder_unref(image->builder); iso_filesystem_unref(image->fs); + free(image->recOpts); free(image->volset_id); free(image->volume_id); free(image->publisher_id); @@ -125,6 +126,7 @@ void iso_image_unref(IsoImage *image) free(image->copyright_file_id); free(image->abstract_file_id); free(image->biblio_file_id); + free(image); } } diff --git a/src/tree.c b/src/tree.c index 6485d6c..a7c9f82 100644 --- a/src/tree.c +++ b/src/tree.c @@ -324,6 +324,7 @@ int iso_tree_add_node_builder(IsoImage *image, IsoDir *parent, /* a node with same name already exists */ return ISO_NODE_NAME_NOT_UNIQUE; } + free(name); result = builder->create_node(builder, image, src, &new); if (result < 0) { @@ -439,6 +440,9 @@ int iso_add_dir_aux(IsoImage *image, IsoDir *parent, IsoFileSource *dir) } } + /* name no more needed */ + free(name); + /* ask user if callback has been set */ if (image->recOpts->report) { action = image->recOpts->report(file, action, flag);