mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Some platforms (notably, the BSDs) have a more efficient implementation called
closefrom(3). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@168522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										5
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| #! /bin/sh | ||||
| # From configure.ac Revision: 164802 . | ||||
| # From configure.ac Revision: 166058 . | ||||
| # Guess values for system-dependent variables and create Makefiles. | ||||
| # Generated by GNU Autoconf 2.61 for asterisk 1.6. | ||||
| # | ||||
| @@ -15678,7 +15678,8 @@ done | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| for ac_func in asprintf atexit dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl | ||||
| 
 | ||||
| for ac_func in asprintf atexit closefrom dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl | ||||
| do | ||||
| as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
| { echo "$as_me:$LINENO: checking for $ac_func" >&5 | ||||
|   | ||||
| @@ -337,7 +337,7 @@ AC_FUNC_STRNLEN | ||||
| AC_FUNC_STRTOD | ||||
| AC_FUNC_UTIME_NULL | ||||
| AC_FUNC_VPRINTF | ||||
| AC_CHECK_FUNCS([asprintf atexit dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl]) | ||||
| AC_CHECK_FUNCS([asprintf atexit closefrom dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf getpeereid sysctl swapctl]) | ||||
|  | ||||
| AC_CHECK_FUNCS([glob]) | ||||
|  | ||||
|   | ||||
| @@ -153,6 +153,9 @@ | ||||
| /* Define to 1 if your system has a working `chown' function. */ | ||||
| #undef HAVE_CHOWN | ||||
|  | ||||
| /* Define to 1 if you have the `closefrom' function. */ | ||||
| #undef HAVE_CLOSEFROM | ||||
|  | ||||
| /* Define this to indicate the ${COS_DESCRIP} library */ | ||||
| #undef HAVE_COS | ||||
|  | ||||
|   | ||||
							
								
								
									
										13
									
								
								main/app.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								main/app.c
									
									
									
									
									
								
							| @@ -33,6 +33,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") | ||||
| #include <regex.h> | ||||
| #include <sys/file.h> /* added this to allow to compile, sorry! */ | ||||
| #include <signal.h> | ||||
| #include <sys/time.h>       /* for getrlimit(2) */ | ||||
| #include <sys/resource.h>   /* for getrlimit(2) */ | ||||
| #include <stdlib.h>         /* for closefrom(3) */ | ||||
|  | ||||
| #include "asterisk/paths.h"	/* use ast_config_AST_DATA_DIR */ | ||||
| #include "asterisk/channel.h" | ||||
| @@ -1839,18 +1842,24 @@ int ast_get_encoded_str(const char *stream, char *result, size_t result_size) | ||||
|  | ||||
| void ast_close_fds_above_n(int n) | ||||
| { | ||||
| #ifdef HAVE_CLOSEFROM | ||||
| 	closefrom(n + 1); | ||||
| #else | ||||
| 	int x, null; | ||||
| 	struct rlimit rl; | ||||
| 	getrlimit(RLIMIT_NOFILE, &rl); | ||||
| 	null = open("/dev/null", O_RDONLY); | ||||
| 	for (x = n + 1; x <= (null >= 8192 ? null : 8192); x++) { | ||||
| 	for (x = n + 1; x < rl.rlim_max; x++) { | ||||
| 		if (x != null) { | ||||
| 			/* Side effect of dup2 is that it closes any existing fd without error. | ||||
| 			 * This prevents valgrind and other debugging tools from sending up | ||||
| 			 * false error reports. */ | ||||
| 			dup2(null, x); | ||||
| 			while (dup2(null, x) < 0 && errno == EINTR); | ||||
| 			close(x); | ||||
| 		} | ||||
| 	} | ||||
| 	close(null); | ||||
| #endif | ||||
| } | ||||
|  | ||||
| int ast_safe_fork(int stop_reaper) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user