Use __PMT instead of __P for function pointer.
[kopensolaris-gnu/glibc.git] / iconv / gconv.h
index 76a7197..3f787c5 100644 (file)
@@ -24,6 +24,7 @@
 #define _GCONV_H       1
 
 #include <features.h>
+#include <wchar.h>
 #define __need_size_t
 #include <stddef.h>
 
@@ -51,23 +52,26 @@ enum
 /* Forward declarations.  */
 struct gconv_step;
 struct gconv_step_data;
+struct gconv_loaded_object;
 
 
 /* Type of a conversion function.  */
-typedef int (*gconv_fct) __P ((struct gconv_step *,
-                              struct gconv_step_data *,
-                              __const char *, size_t *, size_t *, int));
+typedef int (*gconv_fct) __PMT ((struct gconv_step *,
+                                struct gconv_step_data *, __const char **,
+                                __const char *, size_t *, int));
 
 /* Constructor and destructor for local data for conversion step.  */
-typedef int (*gconv_init_fct) __P ((struct gconv_step *,
-                                   struct gconv_step_data *));
-typedef void (*gconv_end_fct) __P ((struct gconv_step_data *));
+typedef int (*gconv_init_fct) __PMT ((struct gconv_step *));
+typedef void (*gconv_end_fct) __PMT ((struct gconv_step *));
 
 
 /* Description of a conversion step.  */
 struct gconv_step
 {
-  void *shlib_handle;
+  struct gconv_loaded_object *shlib_handle;
+  const char *modname;
+
+  int counter;
 
   __const char *from_name;
   __const char *to_name;
@@ -75,6 +79,18 @@ struct gconv_step
   gconv_fct fct;
   gconv_init_fct init_fct;
   gconv_end_fct end_fct;
+
+  /* Information about the number of bytes needed or produced in this
+     step.  This helps optimizing the buffer sizes.  */
+  int min_needed_from;
+  int max_needed_from;
+  int min_needed_to;
+  int max_needed_to;
+
+  /* Flag whether this is a stateful encoding or not.  */
+  int stateful;
+
+  void *data;          /* Pointer to step-local data.  */
 };
 
 /* Additional data for steps in use of conversion descriptor.  This is
@@ -82,12 +98,22 @@ struct gconv_step
 struct gconv_step_data
 {
   char *outbuf;                /* Output buffer for this step.  */
-  size_t outbufavail;  /* Bytes already available in output buffer.  */
-  size_t outbufsize;   /* Size of output buffer.  */
+  char *outbufend;     /* Address of first byte after the output buffer.  */
 
+  /* Is this the last module in the chain.  */
   int is_last;
 
-  void *data;          /* Pointer to step-local data.  */
+  /* Counter for number of invocations of the module function for this
+     desriptor.  */
+  int invocation_counter;
+
+  /* Flag whether this is an internal use of the module (in the mb*towc*
+     and wc*tomb* functions) or regular with iconv(3).  */
+  int internal_use;
+
+  mbstate_t *statep;
+  mbstate_t __state;   /* This element should not be used directly by
+                          any module; always use STATEP!  */
 };