(root)/
strace-6.5/
tests-mx32/
utime.c
       1  /*
       2   * Check decoding of utime syscall.
       3   *
       4   * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@strace.io>
       5   * Copyright (c) 2015-2021 The strace developers.
       6   * All rights reserved.
       7   *
       8   * SPDX-License-Identifier: GPL-2.0-or-later
       9   */
      10  
      11  #include "tests.h"
      12  #include "scno.h"
      13  
      14  #ifdef __NR_utime
      15  
      16  # include <time.h>
      17  # include <utime.h>
      18  # include <errno.h>
      19  # include <stdio.h>
      20  # include <unistd.h>
      21  
      22  static long
      23  k_utime(const void *const filename, const void *const times)
      24  {
      25  	return syscall(__NR_utime, filename, times);
      26  }
      27  
      28  int
      29  main(void)
      30  {
      31  	static const char *const dummy_str = "dummy filename";
      32  
      33  	const time_t t = 1492350678;
      34  	const struct utimbuf u = { .actime = t, .modtime = t };
      35  	const struct utimbuf *const tail_u = tail_memdup(&u, sizeof(u));
      36  	const char *const dummy_filename =
      37  		tail_memdup(dummy_str, sizeof(dummy_str) - 1);
      38  
      39  	long rc = k_utime("", NULL);
      40  	printf("utime(\"\", NULL) = %s\n", sprintrc(rc));
      41  
      42  	rc = k_utime(dummy_filename + sizeof(dummy_str), tail_u + 1);
      43  	printf("utime(%p, %p) = %s\n", dummy_filename + sizeof(dummy_str),
      44  	       tail_u + 1, sprintrc(rc));
      45  
      46  	rc = k_utime(dummy_filename, (struct tm *) tail_u + 1);
      47  	printf("utime(%p, %p) = %s\n",
      48  	       dummy_filename, (struct tm *) tail_u + 1, sprintrc(rc));
      49  
      50  	rc = k_utime("utime\nfilename", tail_u);
      51  	const char *errstr = sprintrc(rc);
      52  	printf("utime(\"utime\\nfilename\", {actime=%lld", (long long) t);
      53  	print_time_t_nsec(t, 0, 1);
      54  	printf(", modtime=%lld", (long long) t);
      55  	print_time_t_nsec(t, 0, 1);
      56  	printf("}) = %s\n", errstr);
      57  
      58  	puts("+++ exited with 0 +++");
      59  	return 0;
      60  }
      61  
      62  #else
      63  
      64  SKIP_MAIN_UNDEFINED("__NR_utime")
      65  
      66  #endif