mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	The hidden attribute was overridden by libc_hidden_proto on GNU/Linux. It is incorrect because the function is used from nscd. internal_function is not supposed to be used across DSO boundaries, so this commit removes it (again, due to the use in nscd).
		
			
				
	
	
		
			119 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Network-related functions for internal library use.
 | |
|    Copyright (C) 2016-2017 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
 | |
|    <http://www.gnu.org/licenses/>.  */
 | |
| 
 | |
| #ifndef _NET_INTERNAL_H
 | |
| #define _NET_INTERNAL_H 1
 | |
| 
 | |
| #include <arpa/inet.h>
 | |
| #include <stdbool.h>
 | |
| #include <stdint.h>
 | |
| #include <sys/time.h>
 | |
| 
 | |
| int __inet6_scopeid_pton (const struct in6_addr *address,
 | |
|                           const char *scope, uint32_t *result);
 | |
| libc_hidden_proto (__inet6_scopeid_pton)
 | |
| 
 | |
| 
 | |
| /* Deadline handling for enforcing timeouts.
 | |
| 
 | |
|    Code should call __deadline_current_time to obtain the current time
 | |
|    and cache it locally.  The cache needs updating after every
 | |
|    long-running or potentially blocking operation.  Deadlines relative
 | |
|    to the current time can be computed using __deadline_from_timeval.
 | |
|    The deadlines may have to be recomputed in response to certain
 | |
|    events (such as an incoming packet), but they are absolute (not
 | |
|    relative to the current time).  A timeout suitable for use with the
 | |
|    poll function can be computed from such a deadline using
 | |
|    __deadline_to_ms.
 | |
| 
 | |
|    The fields in the structs defined belowed should only be used
 | |
|    within the implementation.  */
 | |
| 
 | |
| /* Cache of the current time.  Used to compute deadlines from relative
 | |
|    timeouts and vice versa.  */
 | |
| struct deadline_current_time
 | |
| {
 | |
|   struct timespec current;
 | |
| };
 | |
| 
 | |
| /* Return the current time.  Terminates the process if the current
 | |
|    time is not available.  */
 | |
| struct deadline_current_time __deadline_current_time (void)
 | |
|   internal_function attribute_hidden;
 | |
| 
 | |
| /* Computed absolute deadline.  */
 | |
| struct deadline
 | |
| {
 | |
|   struct timespec absolute;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* For internal use only.  */
 | |
| static inline bool
 | |
| __deadline_is_infinite (struct deadline deadline)
 | |
| {
 | |
|   return deadline.absolute.tv_nsec < 0;
 | |
| }
 | |
| 
 | |
| /* Return true if the current time is at the deadline or past it.  */
 | |
| static inline bool
 | |
| __deadline_elapsed (struct deadline_current_time current,
 | |
|                     struct deadline deadline)
 | |
| {
 | |
|   return !__deadline_is_infinite (deadline)
 | |
|     && (current.current.tv_sec > deadline.absolute.tv_sec
 | |
|         || (current.current.tv_sec == deadline.absolute.tv_sec
 | |
|             && current.current.tv_nsec >= deadline.absolute.tv_nsec));
 | |
| }
 | |
| 
 | |
| /* Return the deadline which occurs first.  */
 | |
| static inline struct deadline
 | |
| __deadline_first (struct deadline left, struct deadline right)
 | |
| {
 | |
|   if (__deadline_is_infinite (right)
 | |
|       || left.absolute.tv_sec < right.absolute.tv_sec
 | |
|       || (left.absolute.tv_sec == right.absolute.tv_sec
 | |
|           && left.absolute.tv_nsec < right.absolute.tv_nsec))
 | |
|     return left;
 | |
|   else
 | |
|     return right;
 | |
| }
 | |
| 
 | |
| /* Add TV to the current time and return it.  Returns a special
 | |
|    infinite absolute deadline on overflow.  */
 | |
| struct deadline __deadline_from_timeval (struct deadline_current_time,
 | |
|                                          struct timeval tv)
 | |
|   internal_function attribute_hidden;
 | |
| 
 | |
| /* Compute the number of milliseconds until the specified deadline,
 | |
|    from the current time in the argument.  The result is mainly for
 | |
|    use with poll.  If the deadline has already passed, return 0.  If
 | |
|    the result would overflow an int, return INT_MAX.  */
 | |
| int __deadline_to_ms (struct deadline_current_time, struct deadline)
 | |
|   internal_function attribute_hidden;
 | |
| 
 | |
| /* Return true if TV.tv_sec is non-negative and TV.tv_usec is in the
 | |
|    interval [0, 999999].  */
 | |
| static inline bool
 | |
| __is_timeval_valid_timeout (struct timeval tv)
 | |
| {
 | |
|   return tv.tv_sec >= 0 && tv.tv_usec >= 0 && tv.tv_usec < 1000 * 1000;
 | |
| }
 | |
| 
 | |
| #endif /* _NET_INTERNAL_H */
 |