51a02b6c80
- Render the map directly from SVG (#1335158) - Fix memory leaks in tz.c - Fix an invalid memory access - Do not modify TZ in the process environment - Move all data files to /usr/share/libtimezonemap from .../libtimezonemap/ui - Add extra city data so all timezone offsets are clickable - Move Venezuela from -04:30 to -04:00 - Fix the conversion of points just west of 180 longitude - Remove the out-of-date Olson map data - Update the "backward" file - Improve the location selected when setting the timezone by name (#1322648) - Remove an extra line in the +10:00 layer - Move Chile back an hour
89 lines
2.7 KiB
Diff
89 lines
2.7 KiB
Diff
From da929a5f69a414fce6f2b5f8e02e4c978b020bb3 Mon Sep 17 00:00:00 2001
|
|
From: David Shea <dshea@redhat.com>
|
|
Date: Fri, 8 Apr 2016 11:58:04 -0400
|
|
Subject: [PATCH 04/24] Fix memory leaks in tz.c
|
|
|
|
Use a stack-allocated block for the user_data struct passed to
|
|
parse_cities15000, since the struct itself is not needed after
|
|
parse_file, and no one can forget to free it if it's not dynamically
|
|
allocated the first place.
|
|
|
|
Use const strings in tz_data_file_get so that the return value does not
|
|
need to be duplicated and freed.
|
|
---
|
|
src/tz.c | 24 ++++++++++--------------
|
|
1 file changed, 10 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/src/tz.c b/src/tz.c
|
|
index 0b5f208..9aa9e8a 100644
|
|
--- a/src/tz.c
|
|
+++ b/src/tz.c
|
|
@@ -41,7 +41,7 @@ static float convert_pos (gchar *pos, int digits);
|
|
#endif
|
|
static int compare_country_names (const void *a, const void *b);
|
|
static void sort_locations_by_country (GPtrArray *locations);
|
|
-static gchar * tz_data_file_get (gchar *env, gchar *defaultfile);
|
|
+static const gchar * tz_data_file_get (const gchar *env, const gchar *defaultfile);
|
|
|
|
void parse_file (const char * filename,
|
|
const guint ncolumns,
|
|
@@ -179,7 +179,7 @@ void parse_cities15000 (gpointer parsed_data,
|
|
TzDB *
|
|
tz_load_db (void)
|
|
{
|
|
- gchar *tz_data_file, *admin1_file, *country_file;
|
|
+ const gchar *tz_data_file, *admin1_file, *country_file;
|
|
TzDB *tz_db;
|
|
char buf[4096];
|
|
|
|
@@ -217,23 +217,19 @@ tz_load_db (void)
|
|
tz_db = g_new0 (TzDB, 1);
|
|
tz_db->locations = g_ptr_array_new ();
|
|
|
|
- Triple * triple = g_new (Triple, 1);
|
|
- triple->first = tz_db->locations;
|
|
- triple->second = stateHash;
|
|
- triple->third = countryHash;
|
|
+ Triple triple;
|
|
+ triple.first = tz_db->locations;
|
|
+ triple.second = stateHash;
|
|
+ triple.third = countryHash;
|
|
|
|
- parse_file (tz_data_file, 19, parse_cities15000, triple);
|
|
+ parse_file (tz_data_file, 19, parse_cities15000, &triple);
|
|
|
|
g_hash_table_destroy (stateHash);
|
|
g_hash_table_destroy (countryHash);
|
|
- triple->second = NULL;
|
|
- triple->third = NULL;
|
|
|
|
/* now sort by country */
|
|
sort_locations_by_country (tz_db->locations);
|
|
|
|
- g_free (tz_data_file);
|
|
-
|
|
return tz_db;
|
|
}
|
|
|
|
@@ -391,14 +387,14 @@ tz_info_free (TzInfo *tzinfo)
|
|
* Private functions *
|
|
* ----------------- */
|
|
|
|
-static gchar *
|
|
-tz_data_file_get (gchar *env, gchar *defaultfile)
|
|
+static const gchar *
|
|
+tz_data_file_get (const gchar *env, const gchar *defaultfile)
|
|
{
|
|
/* Allow passing this in at runtime, to support loading it from the build
|
|
* tree during tests. */
|
|
const gchar * filename = g_getenv (env);
|
|
|
|
- return filename ? g_strdup (filename) : g_strdup (defaultfile);
|
|
+ return filename ? filename : defaultfile;
|
|
}
|
|
|
|
#ifdef __sun
|
|
--
|
|
2.5.5
|
|
|