Browse Source

Create trash dir

master
Arun Prakash Jana 5 years ago
parent
commit
fa46963dd7
No known key found for this signature in database GPG Key ID: A75979F35C080412
1 changed files with 48 additions and 4 deletions
  1. +48
    -4
      src/nnn.c

+ 48
- 4
src/nnn.c View File

@@ -341,6 +341,9 @@ static char g_buf[CMD_LEN_MAX] __attribute__ ((aligned));
/* Buffer for file path copy file */
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 */
static char g_tmpfpath[HOME_LEN_MAX] __attribute__ ((aligned));

@@ -1120,6 +1123,25 @@ static bool xdiraccess(const char *path)
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)
{
while (*a && *b && *a == *b)
@@ -4053,16 +4075,38 @@ int main(int argc, char *argv[])

home = getenv("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);
else if (getenv("TMPDIR"))
} else if (getenv("TMPDIR"))
g_tmpfplen = xstrlcpy(g_tmpfpath, getenv("TMPDIR"), HOME_LEN_MAX);
else if (xdiraccess("/tmp"))
g_tmpfplen = xstrlcpy(g_tmpfpath, "/tmp", HOME_LEN_MAX);

if (!cfg.picker && g_tmpfplen) {
xstrlcpy(g_cppath, g_tmpfpath, HOME_LEN_MAX);
xstrlcpy(g_cppath + g_tmpfplen - 1, "/.nnncp", HOME_LEN_MAX - g_tmpfplen);
xstrlcpy(g_cppath, g_tmpfpath, PATH_MAX);
xstrlcpy(g_cppath + g_tmpfplen - 1, "/.nnncp", PATH_MAX - g_tmpfplen);
}

/* Disable auto-select if opted */


Loading…
Cancel
Save