X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=src%2Finstall%2Facquire%2Fcabinet.c;fp=src%2Finstall%2Facquire%2Fcabinet.c;h=a7484920c6af19d354245def20772f5c79410292;hb=68d6fd0e92416cfe53be55c2d340960287407d05;hp=ade7d8041516cb26a5ca10e92aa81fcf2c90bb90;hpb=561c99891ba276d99e17efd7cbe06cfb0fcf59e7;p=captive.git diff --git a/src/install/acquire/cabinet.c b/src/install/acquire/cabinet.c index ade7d80..a748492 100644 --- a/src/install/acquire/cabinet.c +++ b/src/install/acquire/cabinet.c @@ -32,6 +32,7 @@ #include #include #include +#include "cabinet-memory.h" #include @@ -287,6 +288,7 @@ struct acquire_cabinet *r; acquire_cabinet_set_uri(r,uri); r->cabinet_done=0; r->cabinet_used=cabinet_used; + r->memory=acquire_cabinet_memory_object_new(); return r; } @@ -347,6 +349,7 @@ href_done:; acquire_cabinet_set_uri(r,uri); gnome_vfs_uri_unref(uri); + r->memory=acquire_cabinet_memory_object_new(); return r; } @@ -362,6 +365,7 @@ void acquire_cabinet_free(struct acquire_cabinet *acquire_cabinet) g_free((/* de-const */ gchar *)acquire_cabinet->filename); gnome_vfs_uri_unref(acquire_cabinet->uri); gnome_vfs_uri_unref(acquire_cabinet->handle_uri); + g_object_unref(acquire_cabinet->memory); g_free(acquire_cabinet); } @@ -397,13 +401,15 @@ struct file *filelist,*fi; if ((*ui_progress)(acquire_cabinet->uri)) return; + acquire_cabinet_memory_object_push(acquire_cabinet->memory); + basecab=find_cabs_in_file(acquire_cabinet); if (!basecab) - return; + goto fail_memory_pop; if (basecab->next) - return; + goto fail_memory_pop; if (basecab->prevcab || basecab->nextcab) - return; + goto fail_memory_pop; filelist=process_files(basecab); @@ -418,7 +424,7 @@ int errint; uri_fi=gnome_vfs_uri_append_file_name(acquire_cabinet->uri,fi->filename); if ((*ui_progress)(uri_fi)) { gnome_vfs_uri_unref(uri_fi); - return; + goto fail_memory_pop; } file_write_fi_assertion=fi; @@ -433,7 +439,7 @@ int errint; TRUE); /* free_segment */ gnome_vfs_uri_unref(uri_fi); if (!errint) - return; + goto fail_memory_pop; continue; } file_buffer=g_byte_array_free(file_write_bytearray, @@ -442,4 +448,9 @@ int errint; gnome_vfs_uri_unref(uri_fi); g_free(file_buffer); } + + /* FALLTHRU */ + +fail_memory_pop: + acquire_cabinet_memory_object_pop(acquire_cabinet->memory); }