[PATCH 1/2] Add unzip support to divelogs.de exports
Dirk Hohndel
dirk at hohndel.org
Wed Feb 20 10:07:16 PST 2013
How does this respond if it gets a random zip file?
What is inside the zip file? Is there some more sanity checking that
should happen before this is just handed over to parse_xml_buffer?
The existing code literally does this:
static void suunto_read(struct zip_file *file, GError **error)
{
int size = 1024, n, read = 0;
char *mem = malloc(size);
while ((n = zip_fread(file, mem+read, size-read)) > 0) {
read += n;
size = read * 3 / 2;
mem = realloc(mem, size);
}
parse_xml_buffer(_("SDE file"), mem, read, &dive_table, error);
free(mem);
}
so it reads in the file and hands it off to parse_xml_buffer - so it
seems there is no "directory" information, zip is just use to compress a
single XML file?
Maybe someone could send me such a file so I can play with it?
I'm not trying to be difficult, I just want to make a good decision on
whether or not to integrate this into 3.0...
/D
subsurface at henrik.synth.no writes:
> From: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
>
> Finalize divelog.de import, used with Miiko's divelog.de xslt transform
>
> Signed-off-by: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
> ---
> file.c | 14 +++++++++-----
> gtk-gui.c | 2 ++
> 2 files changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/file.c b/file.c
> index cdad961..967afb8 100644
> --- a/file.c
> +++ b/file.c
> @@ -62,7 +62,7 @@ out:
> #ifdef LIBZIP
> #include <zip.h>
>
> -static void suunto_read(struct zip_file *file, GError **error)
> +static void zip_read(struct zip_file *file, GError **error)
> {
> int size = 1024, n, read = 0;
> char *mem = malloc(size);
> @@ -72,12 +72,12 @@ static void suunto_read(struct zip_file *file, GError **error)
> size = read * 3 / 2;
> mem = realloc(mem, size);
> }
> - parse_xml_buffer(_("SDE file"), mem, read, &dive_table, error);
> + parse_xml_buffer(_("ZIP file"), mem, read, &dive_table, error);
> free(mem);
> }
> #endif
>
> -static int try_to_open_suunto(const char *filename, struct memblock *mem, GError **error)
> +static int try_to_open_zip(const char *filename, struct memblock *mem, GError **error)
> {
> int success = 0;
> #ifdef LIBZIP
> @@ -90,7 +90,7 @@ static int try_to_open_suunto(const char *filename, struct memblock *mem, GError
> struct zip_file *file = zip_fopen_index(zip, index, 0);
> if (!file)
> break;
> - suunto_read(file, error);
> + zip_read(file, error);
> zip_fclose(file);
> success++;
> }
> @@ -225,7 +225,11 @@ static int open_by_filename(const char *filename, const char *fmt, struct memblo
> {
> /* Suunto Dive Manager files: SDE */
> if (!strcasecmp(fmt, "SDE"))
> - return try_to_open_suunto(filename, mem, error);
> + return try_to_open_zip(filename, mem, error);
> +
> + /* divelogs.de files: divelogsData.zip */
> + if (!strcasecmp(fmt, "ZIP"))
> + return try_to_open_zip(filename, mem, error);
>
> /* Truly nasty intentionally obfuscated Cochran Anal software */
> if (!strcasecmp(fmt, "CAN"))
> diff --git a/gtk-gui.c b/gtk-gui.c
> index 40954ba..65a308c 100644
> --- a/gtk-gui.c
> +++ b/gtk-gui.c
> @@ -126,6 +126,8 @@ static GtkFileFilter *setup_filter(void)
> #ifdef LIBZIP
> gtk_file_filter_add_pattern(filter, "*.sde");
> gtk_file_filter_add_pattern(filter, "*.SDE");
> + gtk_file_filter_add_pattern(filter, "*.zip");
> + gtk_file_filter_add_pattern(filter, "*.ZIP");
> #endif
> gtk_file_filter_add_mime_type(filter, "text/xml");
> gtk_file_filter_set_name(filter, _("XML file"));
> --
> 1.8.1.2
>
> _______________________________________________
> subsurface mailing list
> subsurface at hohndel.org
> http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
--
Dirk Hohndel
Intel Open Source Technology Center
More information about the subsurface
mailing list