mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	There is no need to cast to avoid, both pointer already have the
expected type.
It fixes the clang -Wpointer-type-mismatch error:
../sysdeps/unix/sysv/linux/gettimeofday.c:43:6: error: pointer type mismatch ('int (*)(struct timeval *, void *)' and 'void *') [-Werror,-Wpointer-type-mismatch]
   41 | libc_ifunc (__gettimeofday,
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   42 |             GLRO(dl_vdso_gettimeofday) != NULL
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   43 |             ? VDSO_IFUNC_RET (GLRO(dl_vdso_gettimeofday))
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   44 |             : (void*) __gettimeofday_syscall)
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../include/libc-symbols.h:789:53: note: expanded from macro 'libc_ifunc'
  789 | #define libc_ifunc(name, expr) __ifunc (name, name, expr, void, INIT_ARCH)
      |                                ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
./../include/libc-symbols.h:705:34: note: expanded from macro '__ifunc'
  705 |   __ifunc_args (type_name, name, expr, init, arg)
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
./../include/libc-symbols.h:677:38: note: expanded from macro '__ifunc_args'
  677 |   __ifunc_resolver (type_name, name, expr, init, static, __VA_ARGS__);  \
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../include/libc-symbols.h:667:33: note: expanded from macro '__ifunc_resolver'
  667 |     __typeof (type_name) *res = expr;                                   \
      |                                 ^~~~
Reviewed-by: Sam James <sam@gentoo.org>
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* time -- Get number of seconds since Epoch.  Linux version.
 | 
						|
   Copyright (C) 2020-2025 Free Software Foundation, Inc.
 | 
						|
   This file is part of the GNU C Library.
 | 
						|
 | 
						|
   The GNU C Library is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU Lesser General Public
 | 
						|
   License as published by the Free Software Foundation; either
 | 
						|
   version 2.1 of the License, or (at your option) any later version.
 | 
						|
 | 
						|
   The GNU C Library is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
   Lesser General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Lesser General Public
 | 
						|
   License along with the GNU C Library; if not, see
 | 
						|
   <https://www.gnu.org/licenses/>.  */
 | 
						|
 | 
						|
/* Optimize the function call by setting the PLT directly to vDSO symbol.  */
 | 
						|
#ifdef USE_IFUNC_TIME
 | 
						|
# include <time.h>
 | 
						|
# include <sysdep.h>
 | 
						|
# include <sysdep-vdso.h>
 | 
						|
 | 
						|
#ifdef SHARED
 | 
						|
# include <dl-vdso.h>
 | 
						|
# include <libc-vdso.h>
 | 
						|
 | 
						|
static time_t
 | 
						|
time_syscall (time_t *t)
 | 
						|
{
 | 
						|
  return INLINE_SYSCALL_CALL (time, t);
 | 
						|
}
 | 
						|
 | 
						|
# undef INIT_ARCH
 | 
						|
# define INIT_ARCH()
 | 
						|
libc_ifunc (time,
 | 
						|
	    GLRO(dl_vdso_time) != NULL ? VDSO_IFUNC_RET (GLRO(dl_vdso_time))
 | 
						|
				       : time_syscall);
 | 
						|
 | 
						|
# else
 | 
						|
time_t
 | 
						|
time (time_t *t)
 | 
						|
{
 | 
						|
  return INLINE_VSYSCALL (time, 1, t);
 | 
						|
}
 | 
						|
# endif /* !SHARED */
 | 
						|
#else /* USE_IFUNC_TIME  */
 | 
						|
# include <time.h>
 | 
						|
# include <time-clockid.h>
 | 
						|
# include <errno.h>
 | 
						|
 | 
						|
/* Return the time now, and store it in *TIMER if not NULL.  */
 | 
						|
 | 
						|
__time64_t
 | 
						|
__time64 (__time64_t *timer)
 | 
						|
{
 | 
						|
  struct __timespec64 ts;
 | 
						|
  __clock_gettime64 (TIME_CLOCK_GETTIME_CLOCKID, &ts);
 | 
						|
 | 
						|
  if (timer != NULL)
 | 
						|
    *timer = ts.tv_sec;
 | 
						|
  return ts.tv_sec;
 | 
						|
}
 | 
						|
 | 
						|
# if __TIMESIZE != 64
 | 
						|
libc_hidden_def (__time64)
 | 
						|
 | 
						|
time_t
 | 
						|
__time (time_t *timer)
 | 
						|
{
 | 
						|
  __time64_t t = __time64 (NULL);
 | 
						|
 | 
						|
  if (! in_time_t_range (t))
 | 
						|
    {
 | 
						|
      __set_errno (EOVERFLOW);
 | 
						|
      return -1;
 | 
						|
    }
 | 
						|
 | 
						|
  if (timer != NULL)
 | 
						|
    *timer = t;
 | 
						|
  return t;
 | 
						|
}
 | 
						|
# endif
 | 
						|
weak_alias (__time, time)
 | 
						|
#endif
 |