* viking -- GPS Data and Topo Analyzer, Explorer, and Manager
*
* Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
+ * Copyright (C) 2007, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
{
gboolean locked = FALSE;
g_mutex_lock(file_list_mutex);
- if (g_list_find(file_list, fn) == NULL)
+ if (g_list_find_custom(file_list, fn, (GCompareFunc)g_strcmp0) == NULL)
{
// The filename is not yet locked
file_list = g_list_append(file_list, (gpointer)fn),
}
if (options->use_etag) {
gchar *etag_filename = g_strdup_printf("%s.etag", fn);
- gsize etag_length;
+ gsize etag_length = 0;
g_file_get_contents (etag_filename, &(file_options.etag), &etag_length, NULL);
+ g_free (etag_filename);
+ etag_filename = NULL;
/* check if etag is short enough */
- if (etag_length > 100)
+ if (etag_length > 100) {
g_free(file_options.etag);
+ file_options.etag = NULL;
+ }
/* TODO: should check that etag is a valid string */
}
{
g_debug("%s: Couldn't take lock on temporary file \"%s\"\n", __FUNCTION__, tmpfilename);
g_free ( tmpfilename );
+ if (options->use_etag)
+ g_free ( file_options.etag );
return -4;
}
f = g_fopen ( tmpfilename, "w+b" ); /* truncate file and open it */
if ( ! f ) {
g_warning("Couldn't open temporary file \"%s\": %s", tmpfilename, g_strerror(errno));
g_free ( tmpfilename );
+ if (options->use_etag)
+ g_free ( file_options.etag );
return -4;
}
if (options->use_etag) {
if (file_options.new_etag) {
/* server returned an etag value */
- printf("got etag %s\n", file_options.new_etag);
-
gchar *etag_filename = g_strdup_printf("%s.etag", fn);
g_file_set_contents (etag_filename, file_options.new_etag, -1, NULL);
+ g_free (etag_filename);
+ etag_filename = NULL;
}
}
#else
utimes ( fn, NULL ); /* update mtime of local copy */
#endif
- } else
+ } else {
g_rename ( tmpfilename, fn ); /* move completely-downloaded file to permanent location */
+ }
unlock_file ( tmpfilename );
g_free ( tmpfilename );