summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/tree.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/apps/tree.c b/apps/tree.c
index 721fb8c1ef..ac82b6c2df 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -421,7 +421,7 @@ static int update_dir(void)
421 { 421 {
422 tc.sort_dir = global_settings.sort_dir; 422 tc.sort_dir = global_settings.sort_dir;
423 /* if the tc.currdir has been changed, reload it ...*/ 423 /* if the tc.currdir has been changed, reload it ...*/
424 if (strncmp(tc.currdir, lastdir, sizeof(lastdir)) || reload_dir) 424 if (reload_dir || strncmp(tc.currdir, lastdir, sizeof(lastdir)))
425 { 425 {
426 if (ft_load(&tc, NULL) < 0) 426 if (ft_load(&tc, NULL) < 0)
427 return -1; 427 return -1;
@@ -584,14 +584,23 @@ char* get_current_file(char* buffer, size_t buffer_len)
584 struct entry *entry = tree_get_entry_at(&tc, tc.selected_item); 584 struct entry *entry = tree_get_entry_at(&tc, tc.selected_item);
585 if (entry && getcwd(buffer, buffer_len)) 585 if (entry && getcwd(buffer, buffer_len))
586 { 586 {
587 if (tc.dirlength) 587 if (!tc.dirlength)
588 return buffer;
589
590 size_t usedlen = strlen(buffer);
591
592 if (usedlen + 2 < buffer_len) /* ensure enough room for '/' + '\0' */
588 { 593 {
589 if (buffer[strlen(buffer)-1] != '/') 594 if (buffer[usedlen-1] != '/')
590 strlcat(buffer, "/", buffer_len); 595 {
591 if (strlcat(buffer, entry->name, buffer_len) >= buffer_len) 596 buffer[usedlen] = '/';
592 return NULL; 597 /* strmemccpy will zero terminate if we run out of space after */
598 usedlen++;
599 }
600 buffer_len -= usedlen;
601 if (strmemccpy(buffer + usedlen, entry->name, buffer_len) != NULL)
602 return buffer;
593 } 603 }
594 return buffer;
595 } 604 }
596 return NULL; 605 return NULL;
597} 606}