for (i = 0; i < list[panel]->nb; i++) {
current = list[panel]->tab + i;
if (current->selected) {
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name);
+ char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
if (processdelete (src) != 0) {
char *buf = strdupcat ("Can't delete '", src, "'", NULL);
msgwindow (buf, winscreen, 0);
free (src);
}
}
+ freelist (list[panel]);
+ list[panel] = NULL;
break;
case ALT_F: /* filter */
string = getwindow ("Set filter", winscreen, MAXFILTER / 2, MAXFILTER, NULL);
/* test: mkdir .a && touch ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a && rm ../.a */
/* test: mkdir .a && mkdir ../.a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a && rmdir ../.a */
+/* Delete */
+/* test: touch .a0 && mkdir .a1 && touch .a1/a2 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ed'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
+
/* vim: set ts=4 sw=4 et: */
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
+#include <unistd.h>
#ifndef WIN32
#include <grp.h>
list_t *list = alloclist ();
struct dirent *dp = NULL;
- while ((dp = readdir(dir)) != NULL) {
+ while ((dp = readdir (dir)) != NULL) {
if (strcmp (dp->d_name, ".") == 0) {
continue;
}
return 0;
}
-int processdelete (char *src)
+int processdelete (char *name)
{
- return 0;
+ int rc = 0;
+
+ struct stat sb;
+#ifdef WIN32
+ if (stat (name, &sb) == 0) {
+#else /* Linux*/
+ if (lstat (name, &sb) == 0) {
+#endif
+ if ((sb.st_mode & S_IFMT) == S_IFDIR) {
+ DIR *dir = opendir (name);
+
+ if (dir != NULL) {
+ struct dirent *dp = NULL;
+ while (((dp = readdir (dir)) != NULL) && (rc == 0)) {
+ if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
+ continue;
+ }
+ char *next = strdupcat (name, SEPARATOR, dp->d_name, NULL);
+ rc = processdelete (next);
+ free (next);
+ }
+ closedir (dir);
+ if (rc == 0) {
+ //VERBOSE (DEBUG, fprintf (stderr, "rmdir '%s'\n", name));
+ rc = rmdir (name);
+ }
+ } else {
+ rc = 1;
+ }
+ } else {
+ //VERBOSE (DEBUG, fprintf (stderr, "unlink '%s'\n", name));
+ rc = unlink (name);
+ }
+ } else {
+ rc = 1;
+ }
+
+ return rc;
}
/* vim: set ts=4 sw=4 et: */