Deleted Added
full compact
mv.c (22988) mv.c (23525)
1/*
2 * Copyright (c) 1989, 1993, 1994
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Ken Smith of The State University of New York at Buffalo.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 19 unchanged lines hidden (view full) ---

28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
1/*
2 * Copyright (c) 1989, 1993, 1994
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Ken Smith of The State University of New York at Buffalo.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 19 unchanged lines hidden (view full) ---

28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * $Id$
36 * $Id: mv.c,v 1.11 1997/02/22 14:04:12 peter Exp $
37 */
38
39#ifndef lint
40static char const copyright[] =
41"@(#) Copyright (c) 1989, 1993, 1994\n\
42 The Regents of the University of California. All rights reserved.\n";
43#endif /* not lint */
44

--- 156 unchanged lines hidden (view full) ---

201int
202fastcopy(from, to, sbp)
203 char *from, *to;
204 struct stat *sbp;
205{
206 struct timeval tval[2];
207 static u_int blen;
208 static char *bp;
37 */
38
39#ifndef lint
40static char const copyright[] =
41"@(#) Copyright (c) 1989, 1993, 1994\n\
42 The Regents of the University of California. All rights reserved.\n";
43#endif /* not lint */
44

--- 156 unchanged lines hidden (view full) ---

201int
202fastcopy(from, to, sbp)
203 char *from, *to;
204 struct stat *sbp;
205{
206 struct timeval tval[2];
207 static u_int blen;
208 static char *bp;
209 mode_t oldmode;
209 register int nread, from_fd, to_fd;
210
211 if ((from_fd = open(from, O_RDONLY, 0)) < 0) {
212 warn("%s", from);
213 return (1);
214 }
210 register int nread, from_fd, to_fd;
211
212 if ((from_fd = open(from, O_RDONLY, 0)) < 0) {
213 warn("%s", from);
214 return (1);
215 }
215 if ((to_fd =
216 open(to, O_CREAT | O_TRUNC | O_WRONLY, sbp->st_mode)) < 0) {
216 if (blen < sbp->st_blksize) {
217 if (bp != NULL)
218 free(bp);
219 if ((bp = malloc(sbp->st_blksize)) == NULL) {
220 blen = 0;
221 warnx("malloc failed");
222 return (1);
223 }
224 blen = sbp->st_blksize;
225 }
226 while ((to_fd =
227 open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)) < 0) {
228 if (errno == EEXIST && unlink(to) == 0)
229 continue;
217 warn("%s", to);
218 (void)close(from_fd);
219 return (1);
220 }
230 warn("%s", to);
231 (void)close(from_fd);
232 return (1);
233 }
221 if (!blen && !(bp = malloc(blen = sbp->st_blksize))) {
222 warn(NULL);
223 return (1);
224 }
225 while ((nread = read(from_fd, bp, blen)) > 0)
226 if (write(to_fd, bp, nread) != nread) {
227 warn("%s", to);
228 goto err;
229 }
230 if (nread < 0) {
231 warn("%s", from);
232err: if (unlink(to))
233 warn("%s: remove", to);
234 (void)close(from_fd);
235 (void)close(to_fd);
236 return (1);
237 }
238 (void)close(from_fd);
239
234 while ((nread = read(from_fd, bp, blen)) > 0)
235 if (write(to_fd, bp, nread) != nread) {
236 warn("%s", to);
237 goto err;
238 }
239 if (nread < 0) {
240 warn("%s", from);
241err: if (unlink(to))
242 warn("%s: remove", to);
243 (void)close(from_fd);
244 (void)close(to_fd);
245 return (1);
246 }
247 (void)close(from_fd);
248
240 if (fchown(to_fd, sbp->st_uid, sbp->st_gid))
241 warn("%s: set owner/group", to);
249 oldmode = sbp->st_mode & ALLPERMS;
250 if (fchown(to_fd, sbp->st_uid, sbp->st_gid)) {
251 warn("%s: set owner/group (was: %u/%u)", to, sbp->st_uid,
252 sbp->st_gid);
253 if (oldmode & (S_ISUID | S_ISGID)) {
254 warnx(
255"%s: owner/group changed; clearing suid/sgid (mode was 0%03o)",
256 to, oldmode);
257 sbp->st_mode &= ~(S_ISUID | S_ISGID);
258 }
259 }
242 if (fchmod(to_fd, sbp->st_mode))
260 if (fchmod(to_fd, sbp->st_mode))
243 warn("%s: set mode", to);
261 warn("%s: set mode (was: 0%03o)", to, oldmode);
244
245 tval[0].tv_sec = sbp->st_atime;
246 tval[1].tv_sec = sbp->st_mtime;
247 tval[0].tv_usec = tval[1].tv_usec = 0;
248 if (utimes(to, tval))
249 warn("%s: set times", to);
250
251 if (close(to_fd)) {

--- 64 unchanged lines hidden ---
262
263 tval[0].tv_sec = sbp->st_atime;
264 tval[1].tv_sec = sbp->st_mtime;
265 tval[0].tv_usec = tval[1].tv_usec = 0;
266 if (utimes(to, tval))
267 warn("%s: set times", to);
268
269 if (close(to_fd)) {

--- 64 unchanged lines hidden ---