#else /* Linux*/
if (lstat (name, &sb) == -1) {
#endif
- VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s'\n", name));
+ VERBOSE (ERROR, fprintf (stderr, "can't stat file '%s'\n", name));
exit (1);
}
#else /* Linux*/
if (lstat (name, &sb) == -1) {
#endif
- VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s%s%s'\n", dirname, SEPARATOR, elem->name));
+ VERBOSE (ERROR, fprintf (stderr, "can't stat file '%s%s%s'\n", dirname, SEPARATOR, elem->name));
exit (1);
}
{
char *msg = NULL;
- int fdsrc = open (src, O_RDONLY);
- int fddest = open (dest, O_WRONLY | O_CREAT | O_EXCL, 0622);
- if ((fdsrc < 0) || (fddest < 0)) {
- if (fdsrc > 0) {
- close (fdsrc);
+ FILE *fdsrc = fopen (src, "rb");
+ FILE *fddest = fopen (dest, "wb");
+ if ((fdsrc == NULL) || (fddest == NULL)) {
+ if (fdsrc != NULL) {
+ fclose (fdsrc);
}
- if (fddest > 0) {
- close (fddest);
+ if (fddest != NULL) {
+ fclose (fddest);
}
- return strdupcat ("Can't open file '", (fdsrc < 0) ? src : dest, "'", NULL);
+ return strdupcat ("Can't open file '", (fdsrc == NULL ) ? src : dest, "'", NULL);
}
- char bufin[BUFMAX];
- ssize_t nread = 0;
- while (nread = read(fdsrc, bufin, sizeof (bufin)), nread > 0) {
- char *bufout = bufin;
- ssize_t nwritten;
-
- while ((nread > 0) && (msg == NULL)) {
- nwritten = write(fddest, bufout, nread);
+ do {
+ char buffer[BUFMAX];
+ size_t nread = fread (buffer, 1, BUFMAX, fdsrc);
+ VERBOSE (DEBUG, fprintf (stderr, "read %d bytes\n", nread));
+ if (nread <= 0) {
+ break;
+ }
- if (nwritten >= 0) {
- nread -= nwritten;
- bufout += nwritten;
- } else if (errno != EINTR) {
- msg = strdupcat ("Can't write file '", dest, "'", NULL);
- }
+ size_t nwritten = fwrite (buffer, 1, nread, fddest);
+ VERBOSE (DEBUG, fprintf (stderr, "wrote %d bytes\n", nwritten));
+ if (nwritten != nread) {
+ msg = strdupcat ("Can't write file '", dest, "'", NULL);
}
- }
+ } while (msg == NULL);
- if ((close (fddest) < 0) && (nread == 0)) {
- strdupcat ("Can't close file '", dest, "'", NULL);
+ if ((fclose (fddest) != 0) && (msg == NULL)) {
+ msg = strdupcat ("Can't close file '", dest, "'", NULL);
}
- close (fdsrc);
+ fclose (fdsrc);
return msg;
}
if (lstat (src, &sb) == 0) {
#endif
if ((sb.st_mode & S_IFMT) == S_IFDIR) {
- char *nextdest = strdupcat (dest, SEPARATOR, src, NULL);
+ char *basename = strrchr (src, *SEPARATOR);
+ basename = (basename) ? basename + 1 : src;
+ VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename));
+ char *nextdest = strdupcat (dest, SEPARATOR, basename, NULL);
+ VERBOSE (DEBUG, fprintf (stderr, "mkdir '%s'\n", nextdest));
#ifdef WIN32
if (mkdir (nextdest) != 0) {
#else
- //if (mkdir (nextdest, 0750) != 0) {
- VERBOSE (ERROR, fprintf (stderr, "mkdir '%s'\n", nextdest)); if (0) {
+ if (mkdir (nextdest, 0750) != 0) {
#endif
msg = strdupcat ("Can't create directory '", nextdest, "'", NULL);
} else {
continue;
}
char *nextsrc = strdupcat (src, SEPARATOR, dp->d_name, NULL);
- msg = processcopy (dest, nextsrc);
+ msg = processcopy (nextdest, nextsrc);
free (nextsrc);
}
closedir (dir);
} else {
char *basename = strrchr (src, *SEPARATOR);
basename = (basename) ? basename + 1 : src;
+ VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename));
char *newdest = strdupcat (dest, SEPARATOR, basename, NULL);
- //msg = _copyfile (newdest, src);
- VERBOSE (ERROR, fprintf (stderr, "copy '%s' to '%s'\n", src, newdest));
+ VERBOSE (DEBUG, fprintf (stderr, "copy '%s' to '%s'\n", src, newdest));
+ msg = _copyfile (newdest, src);
free (newdest);
}
} else {
- msg = strdupcat ("Can't stat file '", src, "'", NULL);
+ VERBOSE (ERROR, fprintf (stderr, "can't stat file '%s'\n", src));
+ exit (1);
}
return msg;
}
closedir (dir);
if (rc == 0) {
- //VERBOSE (DEBUG, fprintf (stderr, "rmdir '%s'\n", name));
+ VERBOSE (DEBUG, fprintf (stderr, "rmdir '%s'\n", name));
rc = rmdir (name);
}
} else {
rc = 1;
}
} else {
- //VERBOSE (DEBUG, fprintf (stderr, "unlink '%s'\n", name));
+ VERBOSE (DEBUG, fprintf (stderr, "unlink '%s'\n", name));
rc = unlink (name);
}
} else {
+ VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s'\n", name));
+ exit (1);
rc = 1;
}