install: Revert utimensat usage (r299850).
This should fix the build on older stable/10, since install is a bootstrap tool. Pending a decision how to fix this properly, revert utimensat usage. Copies with the -p option will again appear older than the original almost always, but -p is not commonly used.
This commit is contained in:
parent
1beaee0c3a
commit
dd53735797
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=299942
@ -64,12 +64,6 @@ copy_to_nonexistent_backup_safe_body() {
|
|||||||
copy_to_nonexistent_with_opts -b -B.bak -S
|
copy_to_nonexistent_with_opts -b -B.bak -S
|
||||||
}
|
}
|
||||||
|
|
||||||
atf_test_case copy_to_nonexistent_preserving
|
|
||||||
copy_to_nonexistent_preserving_body() {
|
|
||||||
copy_to_nonexistent_with_opts -p
|
|
||||||
[ ! testf -ot copyf ] || atf_fail "bad timestamp 2"
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_self_with_opts() {
|
copy_self_with_opts() {
|
||||||
printf 'test\n123\r456\r\n789\0z' >testf
|
printf 'test\n123\r456\r\n789\0z' >testf
|
||||||
printf 'test\n123\r456\r\n789\0z' >testf2
|
printf 'test\n123\r456\r\n789\0z' >testf2
|
||||||
@ -313,7 +307,6 @@ atf_init_test_cases() {
|
|||||||
atf_add_test_case copy_to_nonexistent_safe_comparing
|
atf_add_test_case copy_to_nonexistent_safe_comparing
|
||||||
atf_add_test_case copy_to_nonexistent_backup
|
atf_add_test_case copy_to_nonexistent_backup
|
||||||
atf_add_test_case copy_to_nonexistent_backup_safe
|
atf_add_test_case copy_to_nonexistent_backup_safe
|
||||||
atf_add_test_case copy_to_nonexistent_preserving
|
|
||||||
atf_add_test_case copy_self
|
atf_add_test_case copy_self
|
||||||
atf_add_test_case copy_self_safe
|
atf_add_test_case copy_self_safe
|
||||||
atf_add_test_case copy_self_comparing
|
atf_add_test_case copy_self_comparing
|
||||||
|
@ -131,7 +131,7 @@ static void do_symlink(const char *, const char *, const struct stat *);
|
|||||||
static void makelink(const char *, const char *, const struct stat *);
|
static void makelink(const char *, const char *, const struct stat *);
|
||||||
static void install(const char *, const char *, u_long, u_int);
|
static void install(const char *, const char *, u_long, u_int);
|
||||||
static void install_dir(char *);
|
static void install_dir(char *);
|
||||||
static void metadata_log(const char *, const char *, struct timespec *,
|
static void metadata_log(const char *, const char *, struct timeval *,
|
||||||
const char *, const char *, off_t);
|
const char *, const char *, off_t);
|
||||||
static int parseid(const char *, id_t *);
|
static int parseid(const char *, id_t *);
|
||||||
static void strip(const char *);
|
static void strip(const char *);
|
||||||
@ -722,7 +722,7 @@ static void
|
|||||||
install(const char *from_name, const char *to_name, u_long fset, u_int flags)
|
install(const char *from_name, const char *to_name, u_long fset, u_int flags)
|
||||||
{
|
{
|
||||||
struct stat from_sb, temp_sb, to_sb;
|
struct stat from_sb, temp_sb, to_sb;
|
||||||
struct timespec tsb[2];
|
struct timeval tvb[2];
|
||||||
int devnull, files_match, from_fd, serrno, target;
|
int devnull, files_match, from_fd, serrno, target;
|
||||||
int tempcopy, temp_fd, to_fd;
|
int tempcopy, temp_fd, to_fd;
|
||||||
char backup[MAXPATHLEN], *p, pathbuf[MAXPATHLEN], tempfile[MAXPATHLEN];
|
char backup[MAXPATHLEN], *p, pathbuf[MAXPATHLEN], tempfile[MAXPATHLEN];
|
||||||
@ -857,9 +857,11 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags)
|
|||||||
* Need to preserve target file times, though.
|
* Need to preserve target file times, though.
|
||||||
*/
|
*/
|
||||||
if (to_sb.st_nlink != 1) {
|
if (to_sb.st_nlink != 1) {
|
||||||
tsb[0] = to_sb.st_atim;
|
tvb[0].tv_sec = to_sb.st_atime;
|
||||||
tsb[1] = to_sb.st_mtim;
|
tvb[0].tv_usec = 0;
|
||||||
(void)utimensat(AT_FDCWD, tempfile, tsb, 0);
|
tvb[1].tv_sec = to_sb.st_mtime;
|
||||||
|
tvb[1].tv_usec = 0;
|
||||||
|
(void)utimes(tempfile, tvb);
|
||||||
} else {
|
} else {
|
||||||
files_match = 1;
|
files_match = 1;
|
||||||
(void)unlink(tempfile);
|
(void)unlink(tempfile);
|
||||||
@ -914,9 +916,11 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags)
|
|||||||
* Preserve the timestamp of the source file if necessary.
|
* Preserve the timestamp of the source file if necessary.
|
||||||
*/
|
*/
|
||||||
if (dopreserve && !files_match && !devnull) {
|
if (dopreserve && !files_match && !devnull) {
|
||||||
tsb[0] = from_sb.st_atim;
|
tvb[0].tv_sec = from_sb.st_atime;
|
||||||
tsb[1] = from_sb.st_mtim;
|
tvb[0].tv_usec = 0;
|
||||||
(void)utimensat(AT_FDCWD, to_name, tsb, 0);
|
tvb[1].tv_sec = from_sb.st_mtime;
|
||||||
|
tvb[1].tv_usec = 0;
|
||||||
|
(void)utimes(to_name, tvb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fstat(to_fd, &to_sb) == -1) {
|
if (fstat(to_fd, &to_sb) == -1) {
|
||||||
@ -985,7 +989,7 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags)
|
|||||||
if (!devnull)
|
if (!devnull)
|
||||||
(void)close(from_fd);
|
(void)close(from_fd);
|
||||||
|
|
||||||
metadata_log(to_name, "file", tsb, NULL, digestresult, to_sb.st_size);
|
metadata_log(to_name, "file", tvb, NULL, digestresult, to_sb.st_size);
|
||||||
free(digestresult);
|
free(digestresult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1297,7 +1301,7 @@ install_dir(char *path)
|
|||||||
* or to allow integrity checks to be performed.
|
* or to allow integrity checks to be performed.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
metadata_log(const char *path, const char *type, struct timespec *ts,
|
metadata_log(const char *path, const char *type, struct timeval *tv,
|
||||||
const char *slink, const char *digestresult, off_t size)
|
const char *slink, const char *digestresult, off_t size)
|
||||||
{
|
{
|
||||||
static const char extra[] = { ' ', '\t', '\n', '\\', '#', '\0' };
|
static const char extra[] = { ' ', '\t', '\n', '\\', '#', '\0' };
|
||||||
@ -1351,9 +1355,9 @@ metadata_log(const char *path, const char *type, struct timespec *ts,
|
|||||||
}
|
}
|
||||||
if (*type == 'f') /* type=file */
|
if (*type == 'f') /* type=file */
|
||||||
fprintf(metafp, " size=%lld", (long long)size);
|
fprintf(metafp, " size=%lld", (long long)size);
|
||||||
if (ts != NULL && dopreserve)
|
if (tv != NULL && dopreserve)
|
||||||
fprintf(metafp, " time=%lld.%09ld",
|
fprintf(metafp, " time=%lld.%ld",
|
||||||
(long long)ts[1].tv_sec, ts[1].tv_nsec);
|
(long long)tv[1].tv_sec, (long)tv[1].tv_usec);
|
||||||
if (digestresult && digest)
|
if (digestresult && digest)
|
||||||
fprintf(metafp, " %s=%s", digest, digestresult);
|
fprintf(metafp, " %s=%s", digest, digestresult);
|
||||||
if (fflags)
|
if (fflags)
|
||||||
|
Loading…
Reference in New Issue
Block a user