@@ -141,22 +141,26 @@ int list_bookmarks() {
141141 *
142142 * @return The matching name|path in the file.
143143 */
144- char * find (const char * name ) {
144+ char * find (const char * needle ) {
145145 // Search from the bottom. So, it's the last one added.
146146 Bookmarks bookmarks = get_bookmarks_reversed ();
147147 char * found_path = NULL ;
148148
149149 // Simple linear search. Items can repeat. We get the last one added.
150150 for (size_t i = 0 ; i < bookmarks .count ; i ++ ) {
151151 Nob_String_Builder entry_sb = bookmarks .items [i ];
152- char * entry = entry_sb .items ;
153- char * delimiter = strstr (entry , DELIM );
154- if (delimiter != NULL ) {
155- size_t name_len = delimiter - entry ;
156- if (strncmp (entry , name , name_len ) == 0 && name_len == strlen (name )) {
157- found_path = strdup (delimiter + strlen (DELIM ));
158- break ;
159- }
152+ Nob_String_View entry_sv = nob_sb_to_sv (entry_sb );
153+ Nob_String_View name_sv = nob_sv_chop_by_delim (& entry_sv , '|' );
154+
155+ Nob_String_Builder name_sb = {0 };
156+ nob_sb_append_buf (& name_sb , name_sv .data , name_sv .count );
157+ nob_sb_append_null (& name_sb );
158+ size_t name_sb_len = strlen (name_sb .items );
159+ // name_sv should now contain the part before '|'
160+ if (strncmp (needle , name_sb .items , name_sb_len ) == 0 && name_sb_len == strlen (needle )) {
161+ // We're done with name_sb
162+ nob_sb_free (name_sb );
163+ found_path = strndup (entry_sv .data , entry_sv .count );
160164 }
161165 nob_sb_free (entry_sb );
162166 }
0 commit comments