Option -f implemented (remove + create)

option -f and -i are exclusive
all flag variables initialized with zero
respond `Y' is equal to `y'
update usage string
This commit is contained in:
Wolfram Schneider 1996-02-18 18:48:26 +00:00
parent 1efb053dc4
commit d6ea04ccf4
4 changed files with 39 additions and 18 deletions

View File

@ -33,7 +33,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)cp.1 8.3 (Berkeley) 4/18/94
.\" $Id$
.\" $Id: cp.1,v 1.2 1994/09/24 02:53:40 davidg Exp $
.\"
.Dd April 18, 1994
.Dt CP 1
@ -47,14 +47,16 @@
.Fl R
.Op Fl H | Fl L | Fl P
.Oc
.Op Fl fip
.Op Fl f | i
.Op Fl p
.Ar source_file target_file
.Nm cp
.Oo
.Fl R
.Op Fl H | Fl L | Fl P
.Oc
.Op Fl fip
.Op Fl f | i
.Op Fl p
.Ar source_file ... target_directory
.Sh DESCRIPTION
In the first synopsis form, the
@ -105,18 +107,25 @@ For each existing destination pathname, remove it and
create a new file, without prompting for confirmation
regardless of its permissions.
(The
.Fl i
option is ignored if the
.Fl f
option is specified.)
option overrides any previous
.Fl i
options.)
.It Fl i
Causes
.Nm cp
to write a prompt to the standard error output before copying a file
that would overwrite an existing file.
If the response from the standard input begins with the character
.Sq Li y ,
.Sq Li y
or
.Sq Li Y ,
the file copy is attempted.
(The
.Fl i
option overrides any previous
.Fl f
options.)
.It Fl p
Causes
.Nm cp

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: cp.c,v 1.5 1995/04/02 00:49:16 bde Exp $
* $Id: cp.c,v 1.6 1995/05/30 00:06:21 rgrimes Exp $
*/
#ifndef lint
@ -86,7 +86,7 @@ static char sccsid[] = "@(#)cp.c 8.2 (Berkeley) 4/1/94";
PATH_T to = { to.p_path, "" };
uid_t myuid;
int Rflag, iflag, pflag, rflag;
int Rflag, iflag, pflag, rflag, fflag;
int myumask;
enum op { FILE_TO_FILE, FILE_TO_DIR, DIR_TO_DNE };
@ -105,7 +105,8 @@ main(argc, argv)
char *target;
Hflag = Lflag = Pflag = Rflag = 0;
while ((ch = getopt(argc, argv, "HLPRfipr")) != EOF)
fflag = iflag = rflag = pflag = 0;
while ((ch = getopt(argc, argv, "HLPRfipr?")) != EOF)
switch (ch) {
case 'H':
Hflag = 1;
@ -124,9 +125,11 @@ main(argc, argv)
break;
case 'f':
iflag = 0;
fflag = 1;
break;
case 'i':
iflag = isatty(fileno(stdin));
iflag = isatty(STDIN_FILENO);
fflag = 0;
break;
case 'p':
pflag = 1;

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)extern.h 8.2 (Berkeley) 4/1/94
* $Id$
* $Id: extern.h,v 1.2 1994/09/24 02:53:41 davidg Exp $
*/
typedef struct {
@ -42,7 +42,7 @@ typedef struct {
extern PATH_T to;
extern uid_t myuid;
extern int iflag, pflag, myumask;
extern int iflag, pflag, fflag, myumask;
#include <sys/cdefs.h>

View File

@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: utils.c,v 1.4 1995/06/14 05:41:27 bde Exp $
* $Id: utils.c,v 1.5 1995/10/03 12:55:01 bde Exp $
*/
#ifndef lint
@ -86,12 +86,21 @@ copy_file(entp, dne)
checkch = ch = getchar();
while (ch != '\n' && ch != EOF)
ch = getchar();
if (checkch != 'y') {
if (checkch != 'y' && checkch != 'Y') {
(void)close(from_fd);
return (0);
}
}
to_fd = open(to.p_path, O_WRONLY | O_TRUNC, 0);
if (fflag) {
/* remove existing destination file name,
* create a new file */
(void)unlink(to.p_path);
to_fd = open(to.p_path, O_WRONLY | O_TRUNC | O_CREAT,
fs->st_mode & ~(S_ISUID | S_ISGID));
} else
/* overwrite existing destination file name */
to_fd = open(to.p_path, O_WRONLY | O_TRUNC, 0);
} else
to_fd = open(to.p_path, O_WRONLY | O_TRUNC | O_CREAT,
fs->st_mode & ~(S_ISUID | S_ISGID));
@ -281,7 +290,7 @@ void
usage()
{
(void)fprintf(stderr, "%s\n%s\n",
"usage: cp [-R [-H | -L | -P] [-fip] src target",
" cp [-R [-H | -L | -P] [-fip] src1 ... srcN directory");
"usage: cp [-R [-H | -L | -P] [-f | -i] [-p] src target",
" cp [-R [-H | -L | -P] [-f | -i] [-p] src1 ... srcN directory");
exit(1);
}