OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc2/] [newlib/] [libc/] [sys/] [linux/] [iconv/] [gconv_int.h] - Diff between revs 207 and 520

Only display areas with differences | Details | Blame | View Log

Rev 207 Rev 520
/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 
   The GNU C Library is free software; you can redistribute it and/or
   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
   version 2.1 of the License, or (at your option) any later version.
 
 
   The GNU C Library is distributed in the hope that it will be useful,
   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
   Lesser General Public License for more details.
 
 
   You should have received a copy of the GNU Lesser General Public
   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */
   02111-1307 USA.  */
 
 
#ifndef _GCONV_INT_H
#ifndef _GCONV_INT_H
#define _GCONV_INT_H    1
#define _GCONV_INT_H    1
 
 
#include "gconv.h"
#include "gconv.h"
#include <libc-symbols.h>
#include <libc-symbols.h>
 
 
__BEGIN_DECLS
__BEGIN_DECLS
 
 
 
 
/* Type to represent search path.  */
/* Type to represent search path.  */
struct path_elem
struct path_elem
{
{
  const char *name;
  const char *name;
  size_t len;
  size_t len;
};
};
 
 
/* Variable with search path for `gconv' implementation.  */
/* Variable with search path for `gconv' implementation.  */
extern struct path_elem *__gconv_path_elem;
extern struct path_elem *__gconv_path_elem;
/* Maximum length of a single path element.  */
/* Maximum length of a single path element.  */
extern size_t __gconv_max_path_elem_len;
extern size_t __gconv_max_path_elem_len;
 
 
 
 
/* Structure for alias definition.  Simply two strings.  */
/* Structure for alias definition.  Simply two strings.  */
struct gconv_alias
struct gconv_alias
{
{
  char *fromname;
  char *fromname;
  char *toname;
  char *toname;
};
};
 
 
 
 
/* How many character should be conveted in one call?  */
/* How many character should be conveted in one call?  */
#define GCONV_NCHAR_GOAL        8160
#define GCONV_NCHAR_GOAL        8160
 
 
 
 
/* Structure describing one loaded shared object.  This normally are
/* Structure describing one loaded shared object.  This normally are
   objects to perform conversation but as a special case the db shared
   objects to perform conversation but as a special case the db shared
   object is also handled.  */
   object is also handled.  */
struct __gconv_loaded_object
struct __gconv_loaded_object
{
{
  /* Name of the object.  It must be the first structure element.  */
  /* Name of the object.  It must be the first structure element.  */
  const char *name;
  const char *name;
 
 
  /* Reference counter for the db functionality.  If no conversion is
  /* Reference counter for the db functionality.  If no conversion is
     needed we unload the db library.  */
     needed we unload the db library.  */
  int counter;
  int counter;
 
 
  /* The handle for the shared object.  */
  /* The handle for the shared object.  */
  void *handle;
  void *handle;
 
 
  /* Pointer to the functions the module defines.  */
  /* Pointer to the functions the module defines.  */
  __gconv_fct fct;
  __gconv_fct fct;
  __gconv_init_fct init_fct;
  __gconv_init_fct init_fct;
  __gconv_end_fct end_fct;
  __gconv_end_fct end_fct;
};
};
 
 
 
 
/* Description for an available conversion module.  */
/* Description for an available conversion module.  */
struct gconv_module
struct gconv_module
{
{
  const char *from_string;
  const char *from_string;
  const char *to_string;
  const char *to_string;
 
 
  int cost_hi;
  int cost_hi;
  int cost_lo;
  int cost_lo;
 
 
  const char *module_name;
  const char *module_name;
 
 
  struct gconv_module *left;    /* Prefix smaller.  */
  struct gconv_module *left;    /* Prefix smaller.  */
  struct gconv_module *same;    /* List of entries with identical prefix.  */
  struct gconv_module *same;    /* List of entries with identical prefix.  */
  struct gconv_module *right;   /* Prefix larger.  */
  struct gconv_module *right;   /* Prefix larger.  */
};
};
 
 
 
 
/* Internal data structure to represent transliteration module.  */
/* Internal data structure to represent transliteration module.  */
struct trans_struct
struct trans_struct
{
{
  const char *name;
  const char *name;
  struct trans_struct *next;
  struct trans_struct *next;
 
 
  const char **csnames;
  const char **csnames;
  size_t ncsnames;
  size_t ncsnames;
  __gconv_trans_fct trans_fct;
  __gconv_trans_fct trans_fct;
  __gconv_trans_context_fct trans_context_fct;
  __gconv_trans_context_fct trans_context_fct;
  __gconv_trans_init_fct trans_init_fct;
  __gconv_trans_init_fct trans_init_fct;
  __gconv_trans_end_fct trans_end_fct;
  __gconv_trans_end_fct trans_end_fct;
};
};
 
 
 
 
/* Flags for `gconv_open'.  */
/* Flags for `gconv_open'.  */
enum
enum
{
{
  GCONV_AVOID_NOCONV = 1 << 0
  GCONV_AVOID_NOCONV = 1 << 0
};
};
 
 
 
 
/* Global variables.  */
/* Global variables.  */
 
 
/* Database of alias names.  */
/* Database of alias names.  */
extern void *__gconv_alias_db;
extern void *__gconv_alias_db;
 
 
/* Array with available modules.  */
/* Array with available modules.  */
extern size_t __gconv_nmodules;
extern size_t __gconv_nmodules;
extern struct gconv_module *__gconv_modules_db;
extern struct gconv_module *__gconv_modules_db;
 
 
/* Value of the GCONV_PATH environment variable.  */
/* Value of the GCONV_PATH environment variable.  */
extern const char *__gconv_path_envvar;
extern const char *__gconv_path_envvar;
 
 
 
 
/* The gconv functions expects the name to be in upper case and complete,
/* The gconv functions expects the name to be in upper case and complete,
   including the trailing slashes if necessary.  */
   including the trailing slashes if necessary.  */
#define norm_add_slashes(str,suffix) \
#define norm_add_slashes(str,suffix) \
  ({                                                                          \
  ({                                                                          \
    const char *cp = (str);                                                   \
    const char *cp = (str);                                                   \
    char *result;                                                             \
    char *result;                                                             \
    char *tmp;                                                                \
    char *tmp;                                                                \
    size_t cnt = 0;                                                            \
    size_t cnt = 0;                                                            \
    size_t suffix_len = (suffix) == NULL ? 0 : strlen (suffix);                \
    size_t suffix_len = (suffix) == NULL ? 0 : strlen (suffix);                \
                                                                              \
                                                                              \
    while (*cp != '\0')                                                       \
    while (*cp != '\0')                                                       \
      if (*cp++ == '/')                                                       \
      if (*cp++ == '/')                                                       \
        ++cnt;                                                                \
        ++cnt;                                                                \
                                                                              \
                                                                              \
    tmp = result = alloca (cp - (str) + 3 + suffix_len);                      \
    tmp = result = alloca (cp - (str) + 3 + suffix_len);                      \
    cp = (str);                                                               \
    cp = (str);                                                               \
    while (*cp != '\0')                                                       \
    while (*cp != '\0')                                                       \
      *tmp++ = __toupper_l (*cp++, &_nl_C_locobj);                            \
      *tmp++ = __toupper_l (*cp++, &_nl_C_locobj);                            \
    if (cnt < 2)                                                              \
    if (cnt < 2)                                                              \
      {                                                                       \
      {                                                                       \
        *tmp++ = '/';                                                         \
        *tmp++ = '/';                                                         \
        if (cnt < 1)                                                          \
        if (cnt < 1)                                                          \
          {                                                                   \
          {                                                                   \
            *tmp++ = '/';                                                     \
            *tmp++ = '/';                                                     \
            if (suffix != NULL)                                               \
            if (suffix != NULL)                                               \
            {                                                                 \
            {                                                                 \
              tmp = memcpy (tmp, suffix, suffix_len);                         \
              tmp = memcpy (tmp, suffix, suffix_len);                         \
              tmp += suffix_len;                                              \
              tmp += suffix_len;                                              \
            }                                                                 \
            }                                                                 \
          }                                                                   \
          }                                                                   \
      }                                                                       \
      }                                                                       \
    *tmp = '\0';                                                              \
    *tmp = '\0';                                                              \
    result;                                                                   \
    result;                                                                   \
  })
  })
 
 
 
 
/* Return in *HANDLE decriptor for transformation from FROMSET to TOSET.  */
/* Return in *HANDLE decriptor for transformation from FROMSET to TOSET.  */
extern int __gconv_open (const char *toset, const char *fromset,
extern int __gconv_open (const char *toset, const char *fromset,
                         __gconv_t *handle, int flags)
                         __gconv_t *handle, int flags)
     internal_function;
     internal_function;
 
 
/* Free resources associated with transformation descriptor CD.  */
/* Free resources associated with transformation descriptor CD.  */
extern int __gconv_close (__gconv_t cd)
extern int __gconv_close (__gconv_t cd)
     internal_function;
     internal_function;
 
 
/* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF
/* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF
   according to rules described by CD and place up to *OUTBYTESLEFT
   according to rules described by CD and place up to *OUTBYTESLEFT
   bytes in buffer starting at *OUTBUF.  Return number of non-identical
   bytes in buffer starting at *OUTBUF.  Return number of non-identical
   conversions in *IRREVERSIBLE if this pointer is not null.  */
   conversions in *IRREVERSIBLE if this pointer is not null.  */
extern int __gconv (__gconv_t cd, const unsigned char **inbuf,
extern int __gconv (__gconv_t cd, const unsigned char **inbuf,
                    const unsigned char *inbufend, unsigned char **outbuf,
                    const unsigned char *inbufend, unsigned char **outbuf,
                    unsigned char *outbufend, size_t *irreversible)
                    unsigned char *outbufend, size_t *irreversible)
     internal_function;
     internal_function;
 
 
/* Return in *HANDLE a pointer to an array with *NSTEPS elements describing
/* Return in *HANDLE a pointer to an array with *NSTEPS elements describing
   the single steps necessary for transformation from FROMSET to TOSET.  */
   the single steps necessary for transformation from FROMSET to TOSET.  */
extern int __gconv_find_transform (const char *toset, const char *fromset,
extern int __gconv_find_transform (const char *toset, const char *fromset,
                                   struct __gconv_step **handle,
                                   struct __gconv_step **handle,
                                   size_t *nsteps, int flags)
                                   size_t *nsteps, int flags)
     internal_function;
     internal_function;
 
 
/* Search for transformation in cache data.  */
/* Search for transformation in cache data.  */
extern int __gconv_lookup_cache (const char *toset, const char *fromset,
extern int __gconv_lookup_cache (const char *toset, const char *fromset,
                                 struct __gconv_step **handle, size_t *nsteps,
                                 struct __gconv_step **handle, size_t *nsteps,
                                 int flags)
                                 int flags)
     internal_function;
     internal_function;
 
 
/* Compare the two name for whether they are after alias expansion the
/* Compare the two name for whether they are after alias expansion the
   same.  This function uses the cache and fails if none is
   same.  This function uses the cache and fails if none is
   loaded.  */
   loaded.  */
extern int __gconv_compare_alias_cache (const char *name1, const char *name2,
extern int __gconv_compare_alias_cache (const char *name1, const char *name2,
                                        int *result) internal_function;
                                        int *result) internal_function;
 
 
/* Free data associated with a step's structure.  */
/* Free data associated with a step's structure.  */
extern void __gconv_release_step (struct __gconv_step *step)
extern void __gconv_release_step (struct __gconv_step *step)
     internal_function;
     internal_function;
 
 
/* Read all the configuration data and cache it.  */
/* Read all the configuration data and cache it.  */
extern void __gconv_read_conf (void);
extern void __gconv_read_conf (void);
 
 
/* Try to read module cache file.  */
/* Try to read module cache file.  */
extern int __gconv_load_cache (void) internal_function;
extern int __gconv_load_cache (void) internal_function;
 
 
/* Determine the directories we are looking in.  */
/* Determine the directories we are looking in.  */
extern void __gconv_get_path (void);
extern void __gconv_get_path (void);
 
 
/* Comparison function to search alias.  */
/* Comparison function to search alias.  */
extern int __gconv_alias_compare (const void *p1, const void *p2);
extern int __gconv_alias_compare (const void *p1, const void *p2);
 
 
/* Clear reference to transformation step implementations which might
/* Clear reference to transformation step implementations which might
   cause the code to be unloaded.  */
   cause the code to be unloaded.  */
extern int __gconv_close_transform (struct __gconv_step *steps,
extern int __gconv_close_transform (struct __gconv_step *steps,
                                    size_t nsteps)
                                    size_t nsteps)
     internal_function;
     internal_function;
 
 
/* Free all resources allocated for the transformation record when
/* Free all resources allocated for the transformation record when
   using the cache.  */
   using the cache.  */
extern void __gconv_release_cache (struct __gconv_step *steps, size_t nsteps)
extern void __gconv_release_cache (struct __gconv_step *steps, size_t nsteps)
     internal_function;
     internal_function;
 
 
/* Load shared object named by NAME.  If already loaded increment reference
/* Load shared object named by NAME.  If already loaded increment reference
   count.  */
   count.  */
extern struct __gconv_loaded_object *__gconv_find_shlib (const char *name)
extern struct __gconv_loaded_object *__gconv_find_shlib (const char *name)
     internal_function;
     internal_function;
 
 
/* Release shared object.  If no further reference is available unload
/* Release shared object.  If no further reference is available unload
   the object.  */
   the object.  */
extern void __gconv_release_shlib (struct __gconv_loaded_object *handle)
extern void __gconv_release_shlib (struct __gconv_loaded_object *handle)
     internal_function;
     internal_function;
 
 
/* Fill STEP with information about builtin module with NAME.  */
/* Fill STEP with information about builtin module with NAME.  */
extern void __gconv_get_builtin_trans (const char *name,
extern void __gconv_get_builtin_trans (const char *name,
                                       struct __gconv_step *step)
                                       struct __gconv_step *step)
     internal_function;
     internal_function;
 
 
/* Try to load transliteration step module.  */
/* Try to load transliteration step module.  */
extern int __gconv_translit_find (struct trans_struct *trans)
extern int __gconv_translit_find (struct trans_struct *trans)
     internal_function;
     internal_function;
 
 
/* Transliteration using the locale's data.  */
/* Transliteration using the locale's data.  */
extern int __gconv_transliterate (struct __gconv_step *step,
extern int __gconv_transliterate (struct __gconv_step *step,
                                  struct __gconv_step_data *step_data,
                                  struct __gconv_step_data *step_data,
                                  void *trans_data,
                                  void *trans_data,
                                  __const unsigned char *inbufstart,
                                  __const unsigned char *inbufstart,
                                  __const unsigned char **inbufp,
                                  __const unsigned char **inbufp,
                                  __const unsigned char *inbufend,
                                  __const unsigned char *inbufend,
                                  unsigned char **outbufstart,
                                  unsigned char **outbufstart,
                                  size_t *irreversible);
                                  size_t *irreversible);
 
 
 
 
/* Builtin transformations.  */
/* Builtin transformations.  */
#ifdef _LIBC
#ifdef _LIBC
# define __BUILTIN_TRANS(Name) \
# define __BUILTIN_TRANS(Name) \
  extern int Name (struct __gconv_step *step,                                 \
  extern int Name (struct __gconv_step *step,                                 \
                   struct __gconv_step_data *data,                            \
                   struct __gconv_step_data *data,                            \
                   const unsigned char **inbuf,                               \
                   const unsigned char **inbuf,                               \
                   const unsigned char *inbufend,                             \
                   const unsigned char *inbufend,                             \
                   unsigned char **outbufstart, size_t *irreversible,         \
                   unsigned char **outbufstart, size_t *irreversible,         \
                   int do_flush, int consume_incomplete)
                   int do_flush, int consume_incomplete)
 
 
__BUILTIN_TRANS (__gconv_transform_ascii_internal);
__BUILTIN_TRANS (__gconv_transform_ascii_internal);
__BUILTIN_TRANS (__gconv_transform_internal_ascii);
__BUILTIN_TRANS (__gconv_transform_internal_ascii);
__BUILTIN_TRANS (__gconv_transform_utf8_internal);
__BUILTIN_TRANS (__gconv_transform_utf8_internal);
__BUILTIN_TRANS (__gconv_transform_internal_utf8);
__BUILTIN_TRANS (__gconv_transform_internal_utf8);
__BUILTIN_TRANS (__gconv_transform_ucs2_internal);
__BUILTIN_TRANS (__gconv_transform_ucs2_internal);
__BUILTIN_TRANS (__gconv_transform_internal_ucs2);
__BUILTIN_TRANS (__gconv_transform_internal_ucs2);
__BUILTIN_TRANS (__gconv_transform_ucs2reverse_internal);
__BUILTIN_TRANS (__gconv_transform_ucs2reverse_internal);
__BUILTIN_TRANS (__gconv_transform_internal_ucs2reverse);
__BUILTIN_TRANS (__gconv_transform_internal_ucs2reverse);
__BUILTIN_TRANS (__gconv_transform_internal_ucs4);
__BUILTIN_TRANS (__gconv_transform_internal_ucs4);
__BUILTIN_TRANS (__gconv_transform_ucs4_internal);
__BUILTIN_TRANS (__gconv_transform_ucs4_internal);
__BUILTIN_TRANS (__gconv_transform_internal_ucs4le);
__BUILTIN_TRANS (__gconv_transform_internal_ucs4le);
__BUILTIN_TRANS (__gconv_transform_ucs4le_internal);
__BUILTIN_TRANS (__gconv_transform_ucs4le_internal);
__BUILTIN_TRANS (__gconv_transform_internal_utf16);
__BUILTIN_TRANS (__gconv_transform_internal_utf16);
__BUILTIN_TRANS (__gconv_transform_utf16_internal);
__BUILTIN_TRANS (__gconv_transform_utf16_internal);
# undef __BUITLIN_TRANS
# undef __BUITLIN_TRANS
 
 
#endif
#endif
 
 
__END_DECLS
__END_DECLS
 
 
#endif /* gconv_int.h */
#endif /* gconv_int.h */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.