1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- # Make a reasonable guess about memory limits using sysconf().
- # includes 5% slop factor as suggested in documentation.
- --- jpeg-7/jmemansi.c
- +++ jpeg-7/jmemansi.c
- @@ -12,6 +12,15 @@
- * is shoved onto the user.
- */
-
- +#include <unistd.h>
- +
- +#ifdef __FreeBSD__
- +# include <sys/types.h>
- +# include <sys/sysctl.h>
- +# include <sys/vmmeter.h>
- +# include <vm/vm_param.h>
- +#endif
- +
- #define JPEG_INTERNALS
- #include "jinclude.h"
- #include "jpeglib.h"
- @@ -157,7 +166,26 @@
- GLOBAL(long)
- jpeg_mem_init (j_common_ptr cinfo)
- {
- - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */
- +#ifdef _SC_AVPHYS_PAGES
- + long phys_size;
- +
- + if ((phys_size = sysconf(_SC_AVPHYS_PAGES)) == -1)
- + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */
- + if ((phys_size *= sysconf(_SC_PAGESIZE)) < 0)
- + return DEFAULT_MAX_MEM;
- + return (long) (phys_size * 0.95);
- +#elif defined(HAVE_SYSCTL) && defined(HW_PHYSMEM)
- + /* This works on *bsd and darwin. */
- + unsigned int physmem;
- + size_t len = sizeof physmem;
- + static int mib[2] = { CTL_HW, HW_PHYSMEM };
- +
- + if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
- + && len == sizeof (physmem))
- + return (long) (physmem * 0.95);
- +#endif
- +
- + return DEFAULT_MAX_MEM;
- }
-
- GLOBAL(void)
|