add i_errors()/im_errors() to the API
authorTony Cook <tony@develop-help.com>
Mon, 13 Aug 2012 08:17:07 +0000 (18:17 +1000)
committerTony Cook <tony@develop-help.com>
Sat, 24 Nov 2012 03:59:24 +0000 (14:59 +1100)
error.c
imdatatypes.h
imerror.h
imext.c
imexttypes.h
immacros.h

diff --git a/error.c b/error.c
index 4b3faf2..03f5bef 100644 (file)
--- a/error.c
+++ b/error.c
@@ -150,21 +150,21 @@ i_failed_cb i_set_failed_cb(i_failed_cb cb) {
 #endif
 
 /*
 #endif
 
 /*
-=item i_errors()
+=item im_errors(ctx)
+=synopsis i_errmsg *errors = im_errors(aIMCTX);
+=synopsis i_errmsg *errors = i_errors();
 
 Returns a pointer to the first element of an array of error messages,
 terminated by a NULL pointer.  The highest level message is first.
 
 
 Returns a pointer to the first element of an array of error messages,
 terminated by a NULL pointer.  The highest level message is first.
 
+Also callable as C<i_errors()>.
+
 =cut
 */
 i_errmsg *im_errors(im_context_t ctx) {
   return ctx->error_stack + ctx->error_sp;
 }
 
 =cut
 */
 i_errmsg *im_errors(im_context_t ctx) {
   return ctx->error_stack + ctx->error_sp;
 }
 
-i_errmsg *i_errors(void) {
-  return im_errors(im_get_context());
-}
-
 /*
 =back
 
 /*
 =back
 
index b56b43f..32c92d1 100644 (file)
@@ -694,6 +694,13 @@ enum {
 
 #include "iolayert.h"
 
 
 #include "iolayert.h"
 
+/* error message information returned by im_errors() */
+
+typedef struct {
+  char *msg;
+  int code;
+} i_errmsg;
+
 typedef struct i_render_tag i_render;
 
 #ifdef IMAGER_FORMAT_ATTR
 typedef struct i_render_tag i_render;
 
 #ifdef IMAGER_FORMAT_ATTR
index 11f55de..e1cfc94 100644 (file)
--- a/imerror.h
+++ b/imerror.h
@@ -5,18 +5,13 @@
    see error.c for documentation
    the error information is currently global
 */
    see error.c for documentation
    the error information is currently global
 */
-typedef struct {
-  char *msg;
-  int code;
-} i_errmsg;
-
 typedef void (*i_error_cb)(int code, char const *msg);
 typedef void (*i_failed_cb)(i_errmsg *msgs);
 extern i_error_cb i_set_error_cb(i_error_cb);
 extern i_failed_cb i_set_failed_cb(i_failed_cb);
 extern void i_set_argv0(char const *);
 extern int i_set_errors_fatal(int new_fatal);
 typedef void (*i_error_cb)(int code, char const *msg);
 typedef void (*i_failed_cb)(i_errmsg *msgs);
 extern i_error_cb i_set_error_cb(i_error_cb);
 extern i_failed_cb i_set_failed_cb(i_failed_cb);
 extern void i_set_argv0(char const *);
 extern int i_set_errors_fatal(int new_fatal);
-extern i_errmsg *i_errors(void);
+extern i_errmsg *im_errors(pIMCTX);
 
 extern void im_push_error(pIMCTX, int code, char const *msg);
 #ifndef IMAGER_NO_CONTEXT
 
 extern void im_push_error(pIMCTX, int code, char const *msg);
 #ifndef IMAGER_NO_CONTEXT
diff --git a/imext.c b/imext.c
index 245d5f2..3f19123 100644 (file)
--- a/imext.c
+++ b/imext.c
@@ -160,7 +160,8 @@ im_ext_funcs imager_function_table =
     im_lhead,
     im_loog,
     im_context_refinc,
     im_lhead,
     im_loog,
     im_context_refinc,
-    im_context_refdec
+    im_context_refdec,
+    im_errors
   };
 
 /* in general these functions aren't called by Imager internally, but
   };
 
 /* in general these functions aren't called by Imager internally, but
index 8329f1e..6bdc35e 100644 (file)
@@ -227,6 +227,7 @@ typedef struct {
   void (*f_im_loog)(im_context_t, int level,const char *msg, ... ) I_FORMAT_ATTR(3,4);
   void (*f_im_context_refinc)(im_context_t, const char *where);
   void (*f_im_context_refdec)(im_context_t, const char *where);
   void (*f_im_loog)(im_context_t, int level,const char *msg, ... ) I_FORMAT_ATTR(3,4);
   void (*f_im_context_refinc)(im_context_t, const char *where);
   void (*f_im_context_refdec)(im_context_t, const char *where);
+  i_errmsg *(*f_im_errors)(im_context_t);
 } im_ext_funcs;
 
 #define PERL_FUNCTION_TABLE_NAME "Imager::__ext_func_table"
 } im_ext_funcs;
 
 #define PERL_FUNCTION_TABLE_NAME "Imager::__ext_func_table"
index c7a13c8..0dbe5e5 100644 (file)
@@ -155,6 +155,7 @@ returns -1 and pushes an error.
 #define i_clear_error() im_clear_error(aIMCTX)
 #define i_push_errorvf(code, fmt, args) im_push_errorvf(aIMCTX, code, fmt, args)
 #define i_push_error(code, msg) im_push_error(aIMCTX, code, msg)
 #define i_clear_error() im_clear_error(aIMCTX)
 #define i_push_errorvf(code, fmt, args) im_push_errorvf(aIMCTX, code, fmt, args)
 #define i_push_error(code, msg) im_push_error(aIMCTX, code, msg)
+#define i_errors() im_errors(aIMCTX)
 
 #define io_new_fd(fd) im_io_new_fd(aIMCTX, (fd))
 #define io_new_bufchain() im_io_new_bufchain(aIMCTX)
 
 #define io_new_fd(fd) im_io_new_fd(aIMCTX, (fd))
 #define io_new_bufchain() im_io_new_bufchain(aIMCTX)