static CachedDir * cached_dir_add_subdir (CachedDir *dir, const char *basename, const char *path) { CachedDir *subdir; subdir = find_subdir (dir, basename); if (subdir != NULL) { subdir->deleted = FALSE; return subdir; } subdir = cached_dir_new (basename); if (path != NULL && !cached_dir_load_entries_recursive (subdir, path)) { cached_dir_free (subdir); return NULL; } menu_verbose ("Caching dir \"%s\"\n", basename); subdir->parent = dir; dir->subdirs = g_slist_prepend (dir->subdirs, cached_dir_ref (subdir)); return subdir; }
EntryDirectory * entry_directory_new (DesktopEntryType entry_type, const char *path) { EntryDirectory *ed; char *canonical; menu_verbose ("Loading entry directory \"%s\"\n", path); canonical = realpath (path, NULL); if (canonical == NULL) { menu_verbose ("Failed to canonicalize \"%s\": %s\n", path, g_strerror (errno)); return NULL; } ed = g_new0 (EntryDirectory, 1); ed->dir = cached_dir_lookup (canonical); g_assert (ed->dir != NULL); cached_dir_add_reference (ed->dir); cached_dir_load_entries_recursive (ed->dir, canonical); ed->entry_type = entry_type; ed->refcount = 1; g_free (canonical); return ed; }
static EntryDirectory * entry_directory_new_full (DesktopEntryType entry_type, const char *path, gboolean is_legacy, const char *legacy_prefix) { EntryDirectory *ed; char *canonical; menu_verbose ("Loading entry directory \"%s\" (legacy %s)\n", path, is_legacy ? "<yes>" : "<no>"); canonical = menu_canonicalize_file_name (path, FALSE); if (canonical == NULL) { menu_verbose ("Failed to canonicalize \"%s\": %s\n", path, g_strerror (errno)); return NULL; } ed = g_new0 (EntryDirectory, 1); ed->dir = cached_dir_lookup (canonical); g_assert (ed->dir != NULL); cached_dir_add_reference (ed->dir); cached_dir_load_entries_recursive (ed->dir, canonical); ed->legacy_prefix = g_strdup (legacy_prefix); ed->entry_type = entry_type; ed->is_legacy = is_legacy != FALSE; ed->refcount = 1; g_free (canonical); return ed; }