static BOOL add_launcher( const WCHAR *folder, const WCHAR *filename, int len_filename ) { struct launcher *launcher; IShellLinkW *link; if (nb_launchers == nb_allocated) { unsigned int count = nb_allocated * 2; struct launcher **tmp = HeapReAlloc( GetProcessHeap(), 0, launchers, count * sizeof(*tmp) ); if (!tmp) return FALSE; launchers = tmp; nb_allocated = count; } if (!(launcher = HeapAlloc( GetProcessHeap(), 0, sizeof(*launcher) ))) return FALSE; if (!(launcher->path = append_path( folder, filename, len_filename ))) goto error; if (!(link = load_shelllink( launcher->path ))) goto error; launcher->icon = extract_icon( link ); launcher->title = build_title( filename, len_filename ); IShellLinkW_Release( link ); if (launcher->icon && launcher->title) { launchers[nb_launchers++] = launcher; return TRUE; } HeapFree( GetProcessHeap(), 0, launcher->title ); DestroyIcon( launcher->icon ); error: HeapFree( GetProcessHeap(), 0, launcher->path ); HeapFree( GetProcessHeap(), 0, launcher ); return FALSE; }
/* Make a title from the tags for the item. */ void make_tags_title (struct plist *plist, const int num) { assert (plist != NULL); assert (num >= 0 && num < plist->num); assert (!plist_deleted(plist, num)); if (file_type(plist->items[num].file) == F_URL) make_file_title (plist, num, 0); else if (!plist->items[num].title_tags) { char *title; assert (plist->items[num].file != NULL); if (plist->items[num].tags->title) { title = build_title (plist->items[num].tags); plist_set_title_tags (plist, num, title); free (title); } else make_file_title (plist, num, options_get_int("HideFileExtension")); } }