diff --git a/magick/resource.c b/magick/resource.c
index 5b45c62..6ca29d8 100644
--- a/magick/resource.c
+++ b/magick/resource.c
@@ -762,9 +762,23 @@
files=(-1);
#if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_OPEN_MAX)
files=sysconf(_SC_OPEN_MAX);
-#elif defined(MAGICKCORE_HAVE_GETDTABLESIZE) && defined(MAGICKCORE_POSIX_SUPPORT)
- files=getdtablesize();
#endif
+#if defined(MAGICKCORE_HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
+ if (files < 0)
+ {
+ struct rlimit
+ resources;
+
+ if (getrlimit(RLIMIT_NOFILE,&resources) != -1)
+ files=resources.rlim_cur;
+ }
+#endif
+#if defined(MAGICKCORE_HAVE_GETDTABLESIZE) && defined(MAGICKCORE_POSIX_SUPPORT)
+ if (files < 0)
+ files=getdtablesize();
+#endif
+ if (files < 0)
+ files=64;
(void) SetMagickResourceLimit(FileResource,MagickMax((unsigned long)
(3*files/4),64));
limit=GetEnvironmentValue("MAGICK_FILE_LIMIT");