diff -ur xfdesktop-4.10.3.org/common/xfdesktop-common.c xfdesktop-4.10.3/common/xfdesktop-common.c --- xfdesktop-4.10.3.org/common/xfdesktop-common.c 2014-11-16 07:20:57.000000000 +0100 +++ xfdesktop-4.10.3/common/xfdesktop-common.c 2014-12-11 08:58:23.511865532 +0100 @@ -102,26 +102,38 @@ items = 0; files = g_strsplit(contents, "\n", -1); + g_free(contents); /* not needed anymore */ + /* Since the first line is the file identifier, we need to skip it. * Additionally, we want to skip blank lines. */ - for(i = 1; files[i] != NULL; i++) { - if(g_strcmp0(files[i], "") != 0) { - g_free(files[items]); - files[items] = g_strdup(files[i]); - DBG("files[items] %s", files[items]); - items++; + + /* a file with just the header will have only one line */ + + if(files[0] != NULL) + { + g_free(files[0]); /* that's the only non-empty line we need to remove */ + files[0] = NULL; + for(i = 1; files[i] != NULL; i++) { + if(g_strcmp0(files[i], "") != 0) { + files[items]=files[i]; /* move the string to the current item slot */ + + items++; + } else { + g_free(files[i]); /* free the irrelevant empty string */ + } } + files[items] = NULL; /* set the sentinel */ + + /* resize */ + + files = g_realloc(files, sizeof(gchar *) * (items+1)); } - files[items+1] = NULL; - files = g_realloc(files, sizeof(gchar *) * (items+1)); DBG("items %d", items); if(n_items) *n_items = items; - g_free(contents); - return files; }