xref: /freebsd/contrib/libarchive/cpio/test/test_option_u.c (revision bd66c1b43e33540205dbc1187c2f2a15c58b57ba)
1caf54c4fSMartin Matuska /*-
2*bd66c1b4SMartin Matuska  * SPDX-License-Identifier: BSD-2-Clause
3*bd66c1b4SMartin Matuska  *
4caf54c4fSMartin Matuska  * Copyright (c) 2003-2007 Tim Kientzle
5caf54c4fSMartin Matuska  * All rights reserved.
6caf54c4fSMartin Matuska  */
7caf54c4fSMartin Matuska #include "test.h"
8caf54c4fSMartin Matuska #if defined(HAVE_UTIME_H)
9caf54c4fSMartin Matuska #include <utime.h>
10caf54c4fSMartin Matuska #elif defined(HAVE_SYS_UTIME_H)
11caf54c4fSMartin Matuska #include <sys/utime.h>
12caf54c4fSMartin Matuska #endif
13caf54c4fSMartin Matuska 
DEFINE_TEST(test_option_u)14caf54c4fSMartin Matuska DEFINE_TEST(test_option_u)
15caf54c4fSMartin Matuska {
16caf54c4fSMartin Matuska 	struct utimbuf times;
17caf54c4fSMartin Matuska 	char *p;
18caf54c4fSMartin Matuska 	size_t s;
19caf54c4fSMartin Matuska 	int r;
20caf54c4fSMartin Matuska 
21caf54c4fSMartin Matuska 	/* Create a file. */
22caf54c4fSMartin Matuska 	assertMakeFile("f", 0644, "a");
23caf54c4fSMartin Matuska 
24caf54c4fSMartin Matuska 	/* Copy the file to the "copy" dir. */
25caf54c4fSMartin Matuska 	r = systemf("echo f| %s -pd copy >copy.out 2>copy.err",
26caf54c4fSMartin Matuska 	    testprog);
27caf54c4fSMartin Matuska 	assertEqualInt(r, 0);
28caf54c4fSMartin Matuska 
29caf54c4fSMartin Matuska 	/* Check that the file contains only a single "a" */
30caf54c4fSMartin Matuska 	p = slurpfile(&s, "copy/f");
31caf54c4fSMartin Matuska 	assertEqualInt(s, 1);
32caf54c4fSMartin Matuska 	assertEqualMem(p, "a", 1);
3363ecfce8SEnji Cooper 	free(p);
34caf54c4fSMartin Matuska 
35caf54c4fSMartin Matuska 	/* Recreate the file with a single "b" */
36caf54c4fSMartin Matuska 	assertMakeFile("f", 0644, "b");
37caf54c4fSMartin Matuska 
38caf54c4fSMartin Matuska 	/* Set the mtime to the distant past. */
39caf54c4fSMartin Matuska 	memset(&times, 0, sizeof(times));
40caf54c4fSMartin Matuska 	times.actime = 1;
41caf54c4fSMartin Matuska 	times.modtime = 3;
42caf54c4fSMartin Matuska 	assertEqualInt(0, utime("f", &times));
43caf54c4fSMartin Matuska 
44caf54c4fSMartin Matuska 	/* Copy the file to the "copy" dir. */
45caf54c4fSMartin Matuska 	r = systemf("echo f| %s -pd copy >copy.out 2>copy.err",
46caf54c4fSMartin Matuska 	    testprog);
47caf54c4fSMartin Matuska 	assertEqualInt(r, 0);
48caf54c4fSMartin Matuska 
49caf54c4fSMartin Matuska 	/* Verify that the file hasn't changed (it wasn't overwritten) */
50caf54c4fSMartin Matuska 	p = slurpfile(&s, "copy/f");
51caf54c4fSMartin Matuska 	assertEqualInt(s, 1);
52caf54c4fSMartin Matuska 	assertEqualMem(p, "a", 1);
5363ecfce8SEnji Cooper 	free(p);
54caf54c4fSMartin Matuska 
55caf54c4fSMartin Matuska 	/* Copy the file to the "copy" dir with -u (force) */
56caf54c4fSMartin Matuska 	r = systemf("echo f| %s -pud copy >copy.out 2>copy.err",
57caf54c4fSMartin Matuska 	    testprog);
58caf54c4fSMartin Matuska 	assertEqualInt(r, 0);
59caf54c4fSMartin Matuska 
60caf54c4fSMartin Matuska 	/* Verify that the file has changed (it was overwritten) */
61caf54c4fSMartin Matuska 	p = slurpfile(&s, "copy/f");
62caf54c4fSMartin Matuska 	assertEqualInt(s, 1);
63caf54c4fSMartin Matuska 	assertEqualMem(p, "b", 1);
6463ecfce8SEnji Cooper 	free(p);
65caf54c4fSMartin Matuska }
66