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);
char *dest = dirname[(panel + 1 ) % MAXPANELS];
- if (processcopy (dest, src) != 0) {
- char *buf = strdupcat ("Can't copy '", src, "' to '", dest, "'", NULL);
- msgwindow (buf, winscreen, 0);
+ char *msg = processcopy (dest, src);
+ if (msg) {
+ msgwindow (msg, winscreen, 0);
getch ();
- free (buf);
+ free (msg);
}
free (src);
}
#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
#include <regex.h>
#include <stdarg.h>
#include <stdio.h>
return rc;
}
-int _copyfile (char *dest, char *src, size_t size)
+char *_copyfile (char *dest, char *src)
{
- int rc = 0;
+ char *msg = NULL;
int fdsrc = open (src, O_RDONLY);
int fddest = open (dest, O_WRONLY | O_CREAT | O_EXCL, 0622);
if (fddest > 0) {
close (fddest);
}
- return 1;
+ return strdupcat ("Can't open file '", (fdsrc < 0) ? src : dest, "'", NULL);
}
char bufin[BUFMAX];
- size_t nread = 0;
- int saved_errno;
+ ssize_t nread = 0;
while (nread = read(fdsrc, bufin, sizeof (bufin)), nread > 0) {
char *bufout = bufin;
- size_t nwritten;
+ ssize_t nwritten;
- while ((nread > 0) && (rc == 0)) {
+ while ((nread > 0) && (msg == NULL)) {
nwritten = write(fddest, bufout, nread);
if (nwritten >= 0) {
nread -= nwritten;
bufout += nwritten;
} else if (errno != EINTR) {
- rc = 1;
+ msg = strdupcat ("Can't write file '", dest, "'", NULL);
}
}
}
if ((close (fddest) < 0) && (nread == 0)) {
- rc = 1;
+ strdupcat ("Can't close file '", dest, "'", NULL);
}
close (fdsrc);
- return rc;
+ return msg;
}
-int processcopy (char *dest, char *src)
+char *processcopy (char *dest, char *src)
{
- int rc = 0;
+ char *msg = NULL;
struct stat sb;
#ifdef WIN32
if (lstat (src, &sb) == 0) {
#endif
if ((sb.st_mode & S_IFMT) == S_IFDIR) {
- char nextdest = strdupcat (dest, SEPARATOR, src, NULL);
+ char *nextdest = strdupcat (dest, SEPARATOR, src, NULL);
#ifdef WIN32
if (mkdir (nextdest) != 0) {
#else
- if (mkdir (nextdest, 0750) != 0) {
+ //if (mkdir (nextdest, 0750) != 0) {
+ VERBOSE (ERROR, fprintf (stderr, "mkdir '%s'\n", nextdest)); if (0) {
#endif
- char *msg = strdupcat (("Can't create directory '", nextdest, "'", NULL);
- msgwindow (msg, winscreen, 0);
- getch ();
- free (msg);
- rc = 1;
+ msg = strdupcat ("Can't create directory '", nextdest, "'", NULL);
} else {
DIR *dir = opendir (src);
if (dir != NULL) {
struct dirent *dp = NULL;
- while (((dp = readdir (dir)) != NULL) && (rc == 0)) {
+ while (((dp = readdir (dir)) != NULL) && (msg == NULL)) {
if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
continue;
}
char *nextsrc = strdupcat (src, SEPARATOR, dp->d_name, NULL);
- rc = processdelete (nextdest, nextsrc);
+ msg = processcopy (dest, nextsrc);
free (nextsrc);
}
closedir (dir);
} else {
- rc = 1;
+ msg = strdupcat ("Can't open directory '", src, "'", NULL);
}
}
free (nextdest);
} else {
- char *basename = strrstr (srcn SEPARATOR);
+ char *basename = strrchr (src, *SEPARATOR);
+ basename = (basename) ? basename + 1 : src;
char *newdest = strdupcat (dest, SEPARATOR, basename, NULL);
- rc = _copyfile (dest, src, sb.st_size);
+ //msg = _copyfile (newdest, src);
+ VERBOSE (ERROR, fprintf (stderr, "copy '%s' to '%s'\n", src, newdest));
free (newdest);
}
} else {
- rc = 1;
+ msg = strdupcat ("Can't stat file '", src, "'", NULL);
}
- return rc;
-}
-
- return 0;
+ return msg;
}
int processdelete (char *name)