]> git.imager.perl.org - imager.git/blobdiff - limits.c
pick up im_ prefix functions too
[imager.git] / limits.c
index bd13917a57aea6041f7863711350eeb59c535bb7..a245a6b23a32daabfbd4534446cee00f4242aee0 100644 (file)
--- a/limits.c
+++ b/limits.c
@@ -24,11 +24,9 @@ Setting a value of zero means that limit will be ignored.
   
  */
 
+#define IMAGER_NO_CONTEXT
 #include "imageri.h"
 
-static i_img_dim max_width, max_height;
-static size_t max_bytes = 0x40000000;
-
 /*
 =item i_set_image_file_limits(width, height, bytes)
 
@@ -51,7 +49,8 @@ i_img_dim width, height - maximum width and height.
 
 =item *
 
-size_t bytes - maximum size in memory in bytes
+size_t bytes - maximum size in memory in bytes.  A value of zero sets
+this limit to one gigabyte.
 
 =back
 
@@ -61,7 +60,7 @@ Returns non-zero on success.
 */
 
 int
-i_set_image_file_limits(i_img_dim width, i_img_dim height, size_t bytes) {
+im_set_image_file_limits(pIMCTX, i_img_dim width, i_img_dim height, size_t bytes) {
   i_clear_error();
 
   if (width < 0) {
@@ -77,9 +76,9 @@ i_set_image_file_limits(i_img_dim width, i_img_dim height, size_t bytes) {
     return 0;
   }
 
-  max_width = width;
-  max_height = height;
-  max_bytes = bytes;
+  aIMCTX->max_width = width;
+  aIMCTX->max_height = height;
+  aIMCTX->max_bytes = bytes ? bytes : DEF_BYTES_LIMIT;
 
   return 1;
 }
@@ -108,12 +107,12 @@ size_t *bytes - size in memory of the image in bytes.
 */
 
 int
-i_get_image_file_limits(i_img_dim *width, i_img_dim *height, size_t *bytes) {
-  i_clear_error();
+im_get_image_file_limits(pIMCTX, i_img_dim *width, i_img_dim *height, size_t *bytes) {
+  im_clear_error(aIMCTX);
 
-  *width = max_width;
-  *height = max_height;
-  *bytes = max_bytes;
+  *width = aIMCTX->max_width;
+  *height = aIMCTX->max_height;
+  *bytes = aIMCTX->max_bytes;
 
   return 1;
 }
@@ -138,41 +137,41 @@ This function is intended to be called by image file read functions.
 */
 
 int
-i_int_check_image_file_limits(i_img_dim width, i_img_dim height, int channels, size_t sample_size) {
+im_int_check_image_file_limits(pIMCTX, i_img_dim width, i_img_dim height, int channels, size_t sample_size) {
   size_t bytes;
-  i_clear_error();
+  im_clear_error(aIMCTX);
   
   if (width <= 0) {
-    i_push_errorf(0, "file size limit - image width of %" i_DF " is not positive",
+    im_push_errorf(aIMCTX, 0, "file size limit - image width of %" i_DF " is not positive",
                  i_DFc(width));
     return 0;
   }
-  if (max_width && width > max_width) {
-    i_push_errorf(0, "file size limit - image width of %" i_DF " exceeds limit of %" i_DF,
-                 i_DFc(width), i_DFc(max_width));
+  if (aIMCTX->max_width && width > aIMCTX->max_width) {
+    im_push_errorf(aIMCTX, 0, "file size limit - image width of %" i_DF " exceeds limit of %" i_DF,
+                 i_DFc(width), i_DFc(aIMCTX->max_width));
     return 0;
   }
 
   if (height <= 0) {
-    i_push_errorf(0, "file size limit - image height %" i_DF " is not positive",
+    im_push_errorf(aIMCTX, 0, "file size limit - image height of %" i_DF " is not positive",
                  i_DFc(height));
     return 0;
   }
 
-  if (max_height && height > max_height) {
-    i_push_errorf(0, "file size limit - image height of %" i_DF
-                 " exceeds limit of %" i_DF, i_DFc(height), i_DFc(max_height));
+  if (aIMCTX->max_height && height > aIMCTX->max_height) {
+    im_push_errorf(aIMCTX, 0, "file size limit - image height of %" i_DF
+                 " exceeds limit of %" i_DF, i_DFc(height), i_DFc(aIMCTX->max_height));
     return 0;
   }
 
   if (channels < 1 || channels > MAXCHANNELS) {
-    i_push_errorf(0, "file size limit - channels %d out of range",
+    im_push_errorf(aIMCTX, 0, "file size limit - channels %d out of range",
                  channels);
     return 0;
   }
   
   if (sample_size < 1 || sample_size > sizeof(long double)) {
-    i_push_errorf(0, "file size limit - sample_size %ld out of range",
+    im_push_errorf(aIMCTX, 0, "file size limit - sample_size %ld out of range",
                  (long)sample_size);
     return 0;
   }
@@ -184,14 +183,14 @@ i_int_check_image_file_limits(i_img_dim width, i_img_dim height, int channels, s
   bytes = width * height * channels * sample_size;
   if (bytes / width != height * channels * sample_size
       || bytes / height != width * channels * sample_size) {
-    i_push_error(0, "file size limit - integer overflow calculating storage");
+    im_push_error(aIMCTX, 0, "file size limit - integer overflow calculating storage");
     return 0;
   }
-  if (max_bytes) {
-    if (bytes > max_bytes) {
-      i_push_errorf(0, "file size limit - storage size of %lu "
+  if (aIMCTX->max_bytes) {
+    if (bytes > aIMCTX->max_bytes) {
+      im_push_errorf(aIMCTX, 0, "file size limit - storage size of %lu "
                    "exceeds limit of %lu", (unsigned long)bytes,
-                   (unsigned long)max_bytes);
+                   (unsigned long)aIMCTX->max_bytes);
       return 0;
     }
   }