X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=src%2Finstall%2Facquire%2Fmoduriload.c;h=6c4f8d046b868ff6ed1d42dee70e10a87b3f3fd5;hb=0036962c07ade6811bd356799a88911a62723902;hp=fba1690ae8ee57a44b982ae035683cfcfcad6a0b;hpb=965c59e903442b6509d01be5340b28d7a092307e;p=captive.git diff --git a/src/install/acquire/moduriload.c b/src/install/acquire/moduriload.c index fba1690..6c4f8d0 100644 --- a/src/install/acquire/moduriload.c +++ b/src/install/acquire/moduriload.c @@ -174,8 +174,15 @@ GnomeVFSResult errvfsresult; errvfsresult=gnome_vfs_read(handle,file_buffer,file_info->size,&bytes_read); if (errvfsresult!=GNOME_VFS_OK || bytes_read!=file_info->size) goto fail_free_file_buffer; - errvfsresult=gnome_vfs_read(handle,&file_tail_check,1,NULL); - if (errvfsresult!=GNOME_VFS_ERROR_EOF) + /* 'bytes_read' must be !=NULL for GnomeVFS-2.0.x! */ + errvfsresult=gnome_vfs_read(handle,&file_tail_check,1,&bytes_read); + if (!(errvfsresult==GNOME_VFS_ERROR_EOF + /* At least RedHat gnome-vfs2-2.0.2-5 + * and ntfsprogs-200309071734-1captive1 and ntfsprogs-gnomevfs-1.0.1-0 + * do not report GNOME_VFS_ERROR_EOF. + * FIXME: Check if it is a bug in ntfsprogs-gnomevfs-1.0.1-0. + */ + || (errvfsresult==GNOME_VFS_OK && bytes_read==0))) goto fail_free_file_buffer; mod_uri_load_file_from_memory(file_buffer,file_info->size,uri); @@ -184,15 +191,16 @@ fail_free_file_buffer: } static void mod_uri_load_file_handle_remote_cabinet - (GnomeVFSHandle *handle,GnomeVFSFileInfo *file_info,GnomeVFSURI *uri,gint cabinet_used) + (GnomeVFSHandle **handlep,GnomeVFSFileInfo *file_info,GnomeVFSURI *uri,gint cabinet_used) { struct acquire_cabinet *acquire_cabinet; - g_return_if_fail(handle!=NULL); + g_return_if_fail(handlep!=NULL); + g_return_if_fail(*handlep!=NULL); g_return_if_fail(file_info!=NULL); g_return_if_fail(uri!=NULL); - acquire_cabinet=acquire_cabinet_new_from_handle(handle,file_info,uri,cabinet_used); + acquire_cabinet=acquire_cabinet_new_from_handle(handlep,file_info,uri,cabinet_used); /* acquire_cabinet_load() will call mod_uri_load_module_from_memory(): */ acquire_cabinet_load(acquire_cabinet); acquire_cabinet_free(acquire_cabinet); @@ -227,7 +235,7 @@ GnomeVFSHandle *handle; else { gint cabinet_used=captivemodid_cabinet_length_to_used(file_info_local.size); - mod_uri_load_file_handle_remote_cabinet(handle,&file_info_local,uri,cabinet_used); + mod_uri_load_file_handle_remote_cabinet(&handle,&file_info_local,uri,cabinet_used); } errvfsresult=GNOME_VFS_OK; /* PASSTHRU */ @@ -309,7 +317,7 @@ gchar *uri_text; } } -void mod_uri_load(GnomeVFSURI *uri) +static void mod_uri_load_internal(GnomeVFSURI *uri,gboolean base_reporting) { GnomeVFSFileInfo file_info_local; GnomeVFSResult errvfsresult; @@ -325,8 +333,16 @@ gchar *uri_text; } file_info_local.type=GNOME_VFS_FILE_TYPE_UNKNOWN; - if (GNOME_VFS_OK!=(errvfsresult=gnome_vfs_get_file_info_uri(uri,&file_info_local,GNOME_VFS_FILE_INFO_DEFAULT))) - return /* errvfsresult */; + if (GNOME_VFS_OK!=(errvfsresult=gnome_vfs_get_file_info_uri(uri,&file_info_local,GNOME_VFS_FILE_INFO_DEFAULT))) { + if (base_reporting) { +gchar *uri_text; + + uri_text=gnome_vfs_uri_to_string(uri,GNOME_VFS_URI_HIDE_PASSWORD); + g_warning(_("Error loading \"%s\": %s"),uri_text,gnome_vfs_result_to_string(errvfsresult)); + g_free(uri_text); + } + return; + } switch (file_info_local.type) { case GNOME_VFS_FILE_TYPE_REGULAR: return mod_uri_load_file(uri); case GNOME_VFS_FILE_TYPE_DIRECTORY: return mod_uri_load_directory(uri); @@ -334,3 +350,19 @@ gchar *uri_text; } /* NOTREACHED */ } + +void mod_uri_load(GnomeVFSURI *uri) +{ + g_return_if_fail(uri!=NULL); + + mod_uri_load_internal(uri, + FALSE); /* base_reporting */ +} + +void mod_uri_load_base_reporting(GnomeVFSURI *uri) +{ + g_return_if_fail(uri!=NULL); + + mod_uri_load_internal(uri, + TRUE); /* base_reporting */ +}