Changeset View
Changeset View
Standalone View
Standalone View
head/usr.bin/xinstall/xinstall.c
Show First 20 Lines • Show All 886 Lines • ▼ Show 20 Lines | if (dobackup) { | ||||
if ((size_t)snprintf(backup, MAXPATHLEN, "%s%s", to_name, | if ((size_t)snprintf(backup, MAXPATHLEN, "%s%s", to_name, | ||||
suffix) != strlen(to_name) + strlen(suffix)) { | suffix) != strlen(to_name) + strlen(suffix)) { | ||||
unlink(tempfile); | unlink(tempfile); | ||||
errx(EX_OSERR, "%s: backup filename too long", | errx(EX_OSERR, "%s: backup filename too long", | ||||
to_name); | to_name); | ||||
} | } | ||||
if (verbose) | if (verbose) | ||||
(void)printf("install: %s -> %s\n", to_name, backup); | (void)printf("install: %s -> %s\n", to_name, backup); | ||||
if (rename(to_name, backup) < 0) { | if (unlink(backup) < 0 && errno != ENOENT) { | ||||
serrno = errno; | serrno = errno; | ||||
unlink(tempfile); | unlink(tempfile); | ||||
errno = serrno; | errno = serrno; | ||||
err(EX_OSERR, "rename: %s to %s", to_name, | err(EX_OSERR, "unlink: %s", backup); | ||||
} | |||||
if (link(to_name, backup) < 0) { | |||||
serrno = errno; | |||||
unlink(tempfile); | |||||
errno = serrno; | |||||
err(EX_OSERR, "link: %s to %s", to_name, | |||||
backup); | backup); | ||||
} | } | ||||
} | } | ||||
if (verbose) | if (verbose) | ||||
(void)printf("install: %s -> %s\n", from_name, to_name); | (void)printf("install: %s -> %s\n", from_name, to_name); | ||||
if (rename(tempfile, to_name) < 0) { | if (rename(tempfile, to_name) < 0) { | ||||
serrno = errno; | serrno = errno; | ||||
unlink(tempfile); | unlink(tempfile); | ||||
▲ Show 20 Lines • Show All 517 Lines • Show Last 20 Lines |