diff --git a/src/nnn.c b/src/nnn.c index 83184fd4..5e19413e 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -327,7 +327,7 @@ static struct entry *dents; static blkcnt_t ent_blocks; static blkcnt_t dir_blocks; static ulong num_files; -static kv bookmark[BM_MAX + 1]; +static kv bookmark[BM_MAX]; static kv plug[PLUGIN_MAX]; static uchar g_tmpfplen; static uchar blk_shift = BLK_SHIFT_512; @@ -4215,6 +4215,7 @@ static void redraw(char *path) static void browse(char *ipath, const char *session) { char newpath[PATH_MAX] __attribute__ ((aligned)); + char mark[PATH_MAX] __attribute__ ((aligned)); char rundir[PATH_MAX] __attribute__ ((aligned)); char runfile[NAME_MAX + 1] __attribute__ ((aligned)); char *path, *lastdir, *lastname, *dir, *tmp; @@ -4243,7 +4244,7 @@ static void browse(char *ipath, const char *session) g_ctx[0].c_cfg = cfg; /* current configuration */ } - newpath[0] = rundir[0] = runfile[0] = '\0'; + newpath[0] = rundir[0] = runfile[0] = mark[0] = '\0'; presel = cfg.filtermode ? FILTER : 0; @@ -4636,14 +4637,16 @@ nochange: r = get_input(NULL); if (!get_kv_val(bookmark, newpath, r, BM_MAX, TRUE)) { - if (r == ',' && bookmark[BM_MAX].val) - xstrlcpy(newpath, bookmark[BM_MAX].val, PATH_MAX); + if (r == ',' && mark[0]) + xstrlcpy(newpath, mark, PATH_MAX); else { printwait(messages[MSG_INVALID_KEY], &presel);; goto nochange; } } + + if (!xdiraccess(newpath)) { printwait(messages[MSG_ACCESS], &presel); goto nochange; @@ -4664,9 +4667,8 @@ nochange: setdirwatch(); goto begin; case SEL_PIN: - bookmark[BM_MAX].val = xrealloc(bookmark[BM_MAX].val, strlen(path)); - xstrlcpy(bookmark[BM_MAX].val, path, PATH_MAX); - printwait(bookmark[BM_MAX].val, &presel); + xstrlcpy(mark, path, PATH_MAX); + printwait(mark, &presel); goto nochange; case SEL_FLTR: /* Unwatch dir if we are still in a filtered view */ @@ -5601,7 +5603,6 @@ static void cleanup(void) free(cfgdir); free(initpath); free(bmstr); - free(bookmark[BM_MAX].val); free(pluginstr); unlink(g_pipepath); @@ -5741,7 +5742,6 @@ int main(int argc, char *argv[]) fprintf(stderr, "%s\n", env_cfg[NNN_BMS]); return _FAILURE; } - bookmark[BM_MAX].key = ','; /* Set key for pinned dir */ /* Parse plugins string */ if (!parsekvpair(plug, &pluginstr, "NNN_PLUG", PLUGIN_MAX)) {