mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:52:45 +00:00 
			
		
		
		
	 b604640950
			
		
	
	
		b604640950
		
	
	
	
	
		
			
			Isn't "expected struct timeval *, but argument is of type struct timeval *" a fun error message? C considers a 'struct foo' mentioned inside a function argument to be a distinct type from 'struct foo' declared on the global level, but only if the in-function definition comes first. So we need to ensure that struct timeval is declared (either fully, or forward-declared) before we declare select() and pselect(). This was taken care of by including <sys/time.h>, but https://github.com/SerenityOS/serenity/pull/20044 made it so that <sys/time.h> itself includes <sys/select.h>. So if the user's program includes <sys/time.h> (before possibly including <sys/select.h>), then <sys/select.h>'s include of <sys/time.h> will turn into a no-op (since <sys/time.h> is already being included), yet there will not have been a struct timeval definition yet, and we'd get the fun error message. Fix this by including <Kernel/API/POSIX/sys/time.h> instead of <sys/time.h>
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			836 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			836 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| // Make sure we have the time type definitions. We include the kernel API
 | |
| // header and not the LibC <sys/time.h> to avoid issues with circular includes.
 | |
| #include <Kernel/API/POSIX/sys/time.h>
 | |
| 
 | |
| // Includes essentially mandated by POSIX:
 | |
| // https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_select.h.html
 | |
| #include <signal.h>
 | |
| #include <time.h>
 | |
| 
 | |
| #include <fd_set.h>
 | |
| #include <string.h>
 | |
| #include <sys/cdefs.h>
 | |
| #include <sys/types.h>
 | |
| 
 | |
| __BEGIN_DECLS
 | |
| 
 | |
| int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout);
 | |
| int pselect(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, const struct timespec* timeout, sigset_t const* sigmask);
 | |
| 
 | |
| __END_DECLS
 |