struct stat stbuf1
, stbuf2
;
if (stat(argv
[argc
-1], &stbuf2
) < 0)
if ((stbuf2
.st_mode
&S_IFMT
) != S_IFDIR
)
r
|= copy(argv
[i
], argv
[argc
-1]);
fprintf(stderr
, "Usage: cp: f1 f2; or cp f1 ... fn d2\n");
register char *p1
, *p2
, *bp
;
if ((fold
= open(from
, 0)) < 0) {
fprintf(stderr
, "cp: cannot open %s\n", from
);
/* is target a directory? */
if (stat(to
, &stbuf2
) >=0 &&
(stbuf2
.st_mode
&S_IFMT
) == S_IFDIR
) {
if (stat(to
, &stbuf2
) >= 0) {
if (stbuf1
.st_dev
== stbuf2
.st_dev
&&
stbuf1
.st_ino
== stbuf2
.st_ino
) {
fprintf(stderr
, "cp: cannot copy file to itself.\n");
if ((fnew
= creat(to
, mode
)) < 0) {
fprintf(stderr
, "cp: cannot create %s\n", to
);
while(n
= read(fold
, iobuf
, BSIZE
)) {
fprintf(stderr
, "cp: read error\n");
if (write(fnew
, iobuf
, n
) != n
) {
fprintf(stderr
, "cp: write error.\n");