summaryrefslogtreecommitdiffstats
path: root/doc/apps/pkeyparam.pod
AgeCommit message (Expand)Author
2016-10-26Move manpages to man[1357] structure.Rich Salz
2016-05-20Doc nits cleanup, round 2Rich Salz
2016-05-20Fix nits in pod files.Rich Salz
2016-05-19Add copyright to manpagesRich Salz
2016-02-05GH628: Add -help to all apps docs.A J Mohan Rao
2015-08-21Fix L<> content in manpagesRich Salz
2009-04-15Updates from 1.0.0-stable.Dr. Stephen Henson
2006-07-10Add docs for pkeyparam. Update some existing docs.Dr. Stephen Henson
8d'>src/messages.h2
4 files changed, 41 insertions, 58 deletions
diff --git a/src/exec.c b/src/exec.c
index f534ee6f..230d2d3f 100644
--- a/src/exec.c
+++ b/src/exec.c
@@ -796,13 +796,8 @@ exec_cmd(char **comm)
exit_code = create_file(comm);
/* ############### DUPLICATE FILE ################## */
- else if (*comm[0] == 'd' && (!comm[0][1] || strcmp(comm[0], "dup") == 0)) {
- if (!comm[1] || (*comm[1] == '-' && strcmp(comm[1], "--help") == 0)) {
- puts(DUP_USAGE);
- return EXIT_SUCCESS;
- }
- exit_code = dup_file(comm[1], comm[2] ? comm[2] : NULL);
- }
+ else if (*comm[0] == 'd' && (!comm[0][1] || strcmp(comm[0], "dup") == 0))
+ exit_code = dup_file(comm);
#ifdef __HAIKU__
else if ((*comm[0] == 'c' || *comm[0] == 'r' || *comm[0] == 'm'
diff --git a/src/file_operations.c b/src/file_operations.c
index 3f4619e2..7a76f959 100644
--- a/src/file_operations.c
+++ b/src/file_operations.c
@@ -121,46 +121,37 @@ xchmod(const char *file, mode_t mode)
return EXIT_SUCCESS;
}
-/* Create a duplicate of a file/dir using rsync or cp */
int
-dup_file(char *source, char *dest)
+dup_file(char **cmd)
{
- if (!source || !*source)
- return EXIT_FAILURE;
+ if (!cmd[1] || (*cmd[1] == '-' && strcmp(cmd[1], "--help") == 0)) {
+ puts(_(DUP_USAGE));
+ return EXIT_SUCCESS;
+ }
log_function(NULL);
- if (strchr(source, '\\')) {
- char *deq_str = dequote_str(source, 0);
- if (!deq_str) {
- fprintf(stderr, "%s: %s: Error dequoting file name\n",
- PROGRAM_NAME, source);
- return EXIT_FAILURE;
- }
- strcpy(source, deq_str);
- free(deq_str);
- }
+ char *rsync_path = get_cmd_path("rsync");
+ int exit_status = EXIT_SUCCESS;
- int free_dest = 0;
- if (dest) {
- if (strchr(dest, '\\')) {
- char *deq_str = dequote_str(dest, 0);
+ size_t i;
+ for (i = 1; cmd[i]; i++) {
+ if (!cmd[i] || !*cmd[i])
+ continue;
+ char *source = cmd[i];
+ if (strchr(source, '\\')) {
+ char *deq_str = dequote_str(source, 0);
if (!deq_str) {
fprintf(stderr, "%s: %s: Error dequoting file name\n",
PROGRAM_NAME, source);
- return EXIT_FAILURE;
+ continue;
}
- strcpy(dest, deq_str);
+ strcpy(source, deq_str);
free(deq_str);
}
- }
- int exit_status = EXIT_SUCCESS;
-
- /* If no dest, use source as file name: source.copy, and, if already
- * exists, source.copy.YYYYMMDDHHMMSS */
- if (!dest) {
- free_dest = 1;
+ // Use source as destiny file name: source.copy, and, if already
+ // exists, source.copy-n, where N is an integer greater than zero
size_t source_len = strlen(source);
if (strcmp(source, "/") != 0 && source[source_len - 1] == '/')
source[source_len - 1] = '\0';
@@ -172,38 +163,35 @@ dup_file(char *source, char *dest)
source_name = tmp + 1;
else
source_name = source;
-
- dest = (char *)xnmalloc(strlen(source_name) + 6, sizeof(char));
- sprintf(dest, "%s.copy", source_name);
char tmp_dest[PATH_MAX];
- xstrsncpy(tmp_dest, dest, PATH_MAX);
+ snprintf(tmp_dest, PATH_MAX - 1, "%s.copy", source_name);
+ char bk[PATH_MAX];
+ xstrsncpy(bk, tmp_dest, PATH_MAX - 1);
struct stat attr;
int suffix = 1;
- while (stat(tmp_dest, &attr) == EXIT_SUCCESS) {
- snprintf(tmp_dest, PATH_MAX - 1, "%s-%d", dest, suffix);
+ while (stat(bk, &attr) == EXIT_SUCCESS) {
+ snprintf(bk, PATH_MAX - 1, "%s-%d", tmp_dest, suffix);
suffix++;
}
- dest = (char *)xrealloc(dest, (strlen(tmp_dest) + 1) * sizeof(char));
- strcpy(dest, tmp_dest);
- }
+ char *dest = savestring(bk, strlen(bk));
- char *rsync_path = get_cmd_path("rsync");
- if (rsync_path) {
- char *cmd[] = {"rsync", "-aczvAXHS", "--progress", source, dest, NULL};
- if (launch_execve(cmd, FOREGROUND, E_NOFLAG) != EXIT_SUCCESS)
- exit_status = EXIT_FAILURE;
- free(rsync_path);
- } else {
- char *cmd[] = {"cp", "-a", source, dest, NULL};
- if (launch_execve(cmd, FOREGROUND, E_NOFLAG) != EXIT_SUCCESS)
- exit_status = EXIT_FAILURE;
- }
+ if (rsync_path) {
+ char *_cmd[] = {"rsync", "-aczvAXHS", "--progress", source, dest, NULL};
+ if (launch_execve(_cmd, FOREGROUND, E_NOFLAG) != EXIT_SUCCESS)
+ exit_status = EXIT_FAILURE;
+ } else {
+ char *_cmd[] = {"cp", "-a", source, dest, NULL};
+ if (launch_execve(_cmd, FOREGROUND, E_NOFLAG) != EXIT_SUCCESS)
+ exit_status = EXIT_FAILURE;
+ }
- if (free_dest)
free(dest);
+ }
+
+ free(rsync_path);
return exit_status;
-}
+}
int
create_file(char **cmd)
diff --git a/src/file_operations.h b/src/file_operations.h
index 63bc6ad0..e677003d 100644
--- a/src/file_operations.h
+++ b/src/file_operations.h
@@ -42,7 +42,7 @@ int edit_link(char *link);
int open_function(char **cmd);
int xchmod(const char *file, mode_t mode);
int create_file(char **cmd);
-int dup_file(char*source, char *dest);
+int dup_file(char **cmd);
int open_file(char *file);
void clear_selbox(void);
diff --git a/src/messages.h b/src/messages.h
index 2225c0f1..5e13d9bd 100644
--- a/src/messages.h
+++ b/src/messages.h
@@ -46,7 +46,7 @@ NAME, print the list of all parent directories\nUsage: bd [NAME]"
#define CS_USAGE "Switch color schemes\nUsage: cs, colorschemes [edit] [COLORSCHEME]"
#define DESEL_USAGE "Deselect one or more selected files\nUsage: desel, ds [*, a, all]"
#define DIRHIST_USAGE "List or access entries in the directory history list\nUsage: b/f [hist] [clear] [!ELN]"
-#define DUP_USAGE "Duplicate files\nUsage: d, dup SOURCE [DEST]"
+#define DUP_USAGE "Duplicate files\nUsage: d, dup FILE(s)"
#define EDIT_USAGE "Edit the main configuration file\nUsage: edit [reset] [APPLICATION]"
#define EXT_USAGE "Turn the use of external commands on-off\nUsage: ext [on, off, status]"
#define EXPORT_USAGE "Export files to a temporary file\nUsage: exp [FILE(s)]"