@@ -219,6 +219,22 @@ isprog(const char *prog)
219
219
return true;
220
220
}
221
221
222
+ static void
223
+ destroy_app (struct app * app )
224
+ {
225
+ g_free (app -> name );
226
+ g_free (app -> name_localized );
227
+ g_free (app -> generic_name );
228
+ g_free (app -> generic_name_localized );
229
+ g_free (app -> exec );
230
+ g_free (app -> tryexec );
231
+ g_free (app -> working_dir );
232
+ g_free (app -> icon );
233
+ g_free (app -> categories );
234
+ g_free (app -> filename );
235
+ g_free (app );
236
+ }
237
+
222
238
static struct app *
223
239
add_app (FILE * fp , char * filename )
224
240
{
@@ -254,6 +270,17 @@ add_app(FILE *fp, char *filename)
254
270
}
255
271
parse_line (line , app , & is_desktop_entry );
256
272
}
273
+
274
+ /*
275
+ * Bail out if the .desktop file does not contain a [Desktop Entry] or
276
+ * Name= field.
277
+ */
278
+ if (!app -> name ) {
279
+ fprintf (stderr , "warn: file '%s' contains no valid desktop entry\n" , filename );
280
+ destroy_app (app );
281
+ return NULL ;
282
+ }
283
+
257
284
app -> filename = strdup (filename );
258
285
259
286
/* post-processing */
@@ -340,7 +367,7 @@ compare_app_name(const void *a, const void *b)
340
367
bb_name = bb -> name_localized ? bb -> name_localized : bb -> name ;
341
368
aa_name = g_utf8_casefold (aa_name , -1 );
342
369
bb_name = g_utf8_casefold (bb_name , -1 );
343
- int ret = strcmp (aa_name , bb_name );
370
+ int ret = g_strcmp0 (aa_name , bb_name );
344
371
g_free ((void * )aa_name );
345
372
g_free ((void * )bb_name );
346
373
return ret ;
@@ -405,17 +432,7 @@ desktop_entries_destroy(GList *apps)
405
432
GList * iter ;
406
433
for (iter = apps ; iter ; iter = iter -> next ) {
407
434
struct app * app = (struct app * )iter -> data ;
408
- g_free (app -> name );
409
- g_free (app -> name_localized );
410
- g_free (app -> generic_name );
411
- g_free (app -> generic_name_localized );
412
- g_free (app -> exec );
413
- g_free (app -> tryexec );
414
- g_free (app -> working_dir );
415
- g_free (app -> icon );
416
- g_free (app -> categories );
417
- g_free (app -> filename );
418
- g_free (app );
435
+ destroy_app (app );
419
436
}
420
437
g_list_free (apps );
421
438
}
0 commit comments