Import Upstream version 2.72.4
This commit is contained in:
commit
4ef3ff9793
2003 changed files with 1332420 additions and 0 deletions
73
glib/gnulib/gl_cv_func_printf_enomem/meson.build
Normal file
73
glib/gnulib/gl_cv_func_printf_enomem/meson.build
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# Copyright (C) 2002-2004, 2006-2018 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# Test whether the *printf family of functions recovers gracefully in case
|
||||
# of an out-of-memory condition, or whether it crashes the entire program.
|
||||
# Result is gl_cv_func_printf_enomem.
|
||||
|
||||
printf_enomem_test = '''
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <errno.h>
|
||||
int main()
|
||||
{
|
||||
struct rlimit limit;
|
||||
int ret;
|
||||
nocrash_init ();
|
||||
/* Some printf implementations allocate temporary space with malloc. */
|
||||
/* On BSD systems, malloc() is limited by RLIMIT_DATA. */
|
||||
#ifdef RLIMIT_DATA
|
||||
if (getrlimit (RLIMIT_DATA, &limit) < 0)
|
||||
return 77;
|
||||
if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
|
||||
limit.rlim_max = 5000000;
|
||||
limit.rlim_cur = limit.rlim_max;
|
||||
if (setrlimit (RLIMIT_DATA, &limit) < 0)
|
||||
return 77;
|
||||
#endif
|
||||
/* On Linux systems, malloc() is limited by RLIMIT_AS. */
|
||||
#ifdef RLIMIT_AS
|
||||
if (getrlimit (RLIMIT_AS, &limit) < 0)
|
||||
return 77;
|
||||
if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
|
||||
limit.rlim_max = 5000000;
|
||||
limit.rlim_cur = limit.rlim_max;
|
||||
if (setrlimit (RLIMIT_AS, &limit) < 0)
|
||||
return 77;
|
||||
#endif
|
||||
/* Some printf implementations allocate temporary space on the stack. */
|
||||
#ifdef RLIMIT_STACK
|
||||
if (getrlimit (RLIMIT_STACK, &limit) < 0)
|
||||
return 77;
|
||||
if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
|
||||
limit.rlim_max = 5000000;
|
||||
limit.rlim_cur = limit.rlim_max;
|
||||
if (setrlimit (RLIMIT_STACK, &limit) < 0)
|
||||
return 77;
|
||||
#endif
|
||||
ret = printf ("%.5000000f", 1.0);
|
||||
return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
|
||||
}
|
||||
'''
|
||||
|
||||
if not meson.is_cross_build() or meson.has_exe_wrapper()
|
||||
run_result = cc.run(printf_enomem_test,
|
||||
name : 'printf survives out-of-memory conditions')
|
||||
gl_cv_func_printf_enomem = run_result.compiled() and run_result.returncode() == 0
|
||||
else
|
||||
# If we don't know, assume the worst.
|
||||
gl_cv_func_printf_enomem = false
|
||||
if (host_system == 'linux' or
|
||||
host_system == 'solaris' or
|
||||
host_system == 'sunos' or
|
||||
host_system == 'aix' or
|
||||
host_system == 'irix' or
|
||||
host_system == 'beos' or
|
||||
host_system == 'haiku')
|
||||
gl_cv_func_printf_enomem = true
|
||||
endif
|
||||
endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue