mirror of
https://github.com/jarun/nnn.git
synced 2024-12-02 19:36:51 +00:00
Create trash dir
This commit is contained in:
parent
3f262910d3
commit
fa46963dd7
52
src/nnn.c
52
src/nnn.c
|
@ -341,6 +341,9 @@ static char g_buf[CMD_LEN_MAX] __attribute__ ((aligned));
|
||||||
/* Buffer for file path copy file */
|
/* Buffer for file path copy file */
|
||||||
static char g_cppath[PATH_MAX] __attribute__ ((aligned));
|
static char g_cppath[PATH_MAX] __attribute__ ((aligned));
|
||||||
|
|
||||||
|
/* Buffer for trash dir */
|
||||||
|
static char g_trash[PATH_MAX] __attribute__ ((aligned));
|
||||||
|
|
||||||
/* Buffer to store tmp file path */
|
/* Buffer to store tmp file path */
|
||||||
static char g_tmpfpath[HOME_LEN_MAX] __attribute__ ((aligned));
|
static char g_tmpfpath[HOME_LEN_MAX] __attribute__ ((aligned));
|
||||||
|
|
||||||
|
@ -1120,6 +1123,25 @@ static bool xdiraccess(const char *path)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Creates a dir if not present
|
||||||
|
*/
|
||||||
|
static bool createdir(const char *path, mode_t mode)
|
||||||
|
{
|
||||||
|
DIR *dirp = opendir(path);
|
||||||
|
|
||||||
|
if (dirp) {
|
||||||
|
closedir(dirp);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errno == ENOENT && !mkdir(path, mode))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
fprintf(stderr, "create %s %s\n", path, strerror(errno));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static int digit_compare(const char *a, const char *b)
|
static int digit_compare(const char *a, const char *b)
|
||||||
{
|
{
|
||||||
while (*a && *b && *a == *b)
|
while (*a && *b && *a == *b)
|
||||||
|
@ -4053,16 +4075,38 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
home = getenv("HOME");
|
home = getenv("HOME");
|
||||||
DPRINTF_S(home);
|
DPRINTF_S(home);
|
||||||
if (home)
|
|
||||||
|
if (getenv("NNN_TRASH")) {
|
||||||
|
if (!home) {
|
||||||
|
fprintf(stderr, "trash! no HOME!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create trash dir if missing */
|
||||||
|
g_tmpfplen = xstrlcpy(g_trash, home, PATH_MAX);
|
||||||
|
g_tmpfplen += xstrlcpy(g_trash + g_tmpfplen - 1,
|
||||||
|
"/.local/share/nnn", PATH_MAX - g_tmpfplen);
|
||||||
|
DPRINTF_S(g_trash);
|
||||||
|
if (!createdir(g_trash, 0777))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
xstrlcpy(g_trash + g_tmpfplen - 2, "/trash", PATH_MAX - g_tmpfplen);
|
||||||
|
DPRINTF_S(g_trash);
|
||||||
|
if (!createdir(g_trash, 0777))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (home) {
|
||||||
|
/* Prefix for other temporary ops */
|
||||||
g_tmpfplen = xstrlcpy(g_tmpfpath, home, HOME_LEN_MAX);
|
g_tmpfplen = xstrlcpy(g_tmpfpath, home, HOME_LEN_MAX);
|
||||||
else if (getenv("TMPDIR"))
|
} else if (getenv("TMPDIR"))
|
||||||
g_tmpfplen = xstrlcpy(g_tmpfpath, getenv("TMPDIR"), HOME_LEN_MAX);
|
g_tmpfplen = xstrlcpy(g_tmpfpath, getenv("TMPDIR"), HOME_LEN_MAX);
|
||||||
else if (xdiraccess("/tmp"))
|
else if (xdiraccess("/tmp"))
|
||||||
g_tmpfplen = xstrlcpy(g_tmpfpath, "/tmp", HOME_LEN_MAX);
|
g_tmpfplen = xstrlcpy(g_tmpfpath, "/tmp", HOME_LEN_MAX);
|
||||||
|
|
||||||
if (!cfg.picker && g_tmpfplen) {
|
if (!cfg.picker && g_tmpfplen) {
|
||||||
xstrlcpy(g_cppath, g_tmpfpath, HOME_LEN_MAX);
|
xstrlcpy(g_cppath, g_tmpfpath, PATH_MAX);
|
||||||
xstrlcpy(g_cppath + g_tmpfplen - 1, "/.nnncp", HOME_LEN_MAX - g_tmpfplen);
|
xstrlcpy(g_cppath + g_tmpfplen - 1, "/.nnncp", PATH_MAX - g_tmpfplen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable auto-select if opted */
|
/* Disable auto-select if opted */
|
||||||
|
|
Loading…
Reference in a new issue