return retval;
}
-#define SHOW_RESULT(a, b) LOG_ERROR(# a " failed %d\n", (int)b)
-
-#define IOSIZE 512
-void copyfile(char *name2, char *name1)
-{
-
- int err;
- char buf[IOSIZE];
- int fd1, fd2;
- ssize_t done, wrote;
-
- fd1 = open(name1, O_WRONLY | O_CREAT, 0664);
- if (fd1 < 0)
- SHOW_RESULT(open, fd1);
-
- fd2 = open(name2, O_RDONLY);
- if (fd2 < 0)
- SHOW_RESULT(open, fd2);
-
- for (;; ) {
- done = read(fd2, buf, IOSIZE);
- if (done < 0) {
- SHOW_RESULT(read, done);
- break;
- }
-
- if (done == 0)
- break;
-
- wrote = write(fd1, buf, done);
- if (wrote != done)
- SHOW_RESULT(write, wrote);
-
- if (wrote != done)
- break;
- }
-
- err = close(fd1);
- if (err < 0)
- SHOW_RESULT(close, err);
-
- err = close(fd2);
- if (err < 0)
- SHOW_RESULT(close, err);
-}
-
-/* utility fn to copy a directory */
-void copydir(char *name, char *destdir)
-{
- int err;
- DIR *dirp;
-
- dirp = opendir(destdir);
- if (dirp == NULL)
- mkdir(destdir, 0777);
- else
- err = closedir(dirp);
-
- dirp = opendir(name);
- if (dirp == NULL)
- SHOW_RESULT(opendir, -1);
-
- for (;; ) {
- struct dirent *entry = readdir(dirp);
-
- if (entry == NULL)
- break;
-
- if (strcmp(entry->d_name, ".") == 0)
- continue;
- if (strcmp(entry->d_name, "..") == 0)
- continue;
-
- int isDir = 0;
- struct stat buf;
- char fullPath[PATH_MAX];
- strncpy(fullPath, name, PATH_MAX);
- strcat(fullPath, "/");
- strncat(fullPath, entry->d_name, PATH_MAX - strlen(fullPath));
-
- if (stat(fullPath, &buf) == -1) {
- LOG_ERROR("unable to read status from %s", fullPath);
- break;
- }
- isDir = S_ISDIR(buf.st_mode) != 0;
-
- if (isDir)
- continue;
-
- /* diag_printf("<INFO>: entry %14s",entry->d_name); */
- char fullname[PATH_MAX];
- char fullname2[PATH_MAX];
-
- strcpy(fullname, name);
- strcat(fullname, "/");
- strcat(fullname, entry->d_name);
-
- strcpy(fullname2, destdir);
- strcat(fullname2, "/");
- strcat(fullname2, entry->d_name);
- /* diag_printf("from %s to %s\n", fullname, fullname2); */
- copyfile(fullname, fullname2);
-
- /* diag_printf("\n"); */
- }
-
- err = closedir(dirp);
- if (err < 0)
- SHOW_RESULT(stat, err);
-}
-
COMMAND_HANDLER(handle_rm_command)
{
if (CMD_ARGC != 1)