Back to index

plt-scheme  4.2.1
Defines | Functions | Variables
finddomain.c File Reference
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <strings.h>
#include "gettext.h"
#include "gettextP.h"
#include "libgettext.h"

Go to the source code of this file.


#define strchr   index


void free ()
static char *stpcpy PARAMS ((char *dest, const char *src))
struct loaded_l10nfile_nl_find_domain (char *dirname, char *locale, const char *domainname) const
static char * stpcpy (char *dest, const char *src)


static struct loaded_l10nfile_nl_loaded_domains

Define Documentation

#define strchr   index

Definition at line 45 of file finddomain.c.

Function Documentation

struct loaded_l10nfile* _nl_find_domain ( char *  dirname,
char *  locale,
const char *  domainname 
) const [read]

Definition at line 82 of file finddomain.c.

  struct loaded_l10nfile *retval;
  const char *language;
  const char *modifier;
  const char *territory;
  const char *codeset;
  const char *normalized_codeset;
  const char *special;
  const char *sponsor;
  const char *revision;
  const char *alias_value;
  int mask;

  /* LOCALE can consist of up to four recognized parts for the XPG syntax:


     and six parts for the CEN syntax:


     Beside the first all of them are allowed to be missing.  If the
     full specified locale is not found, the less specific one are
     looked for.  The various part will be stripped of according to
     the following order:
              (1) revision
              (2) sponsor
              (3) special
              (4) codeset
              (5) normalized codeset
              (6) territory
              (7) audience/modifier

  /* If we have already tested for this locale entry there has to
     be one data set in the list of loaded domains.  */
  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
                            strlen (dirname) + 1, 0, locale, NULL, NULL,
                            NULL, NULL, NULL, NULL, NULL, domainname, 0);
  if (retval != NULL)
      /* We know something about this locale.  */
      int cnt;

      if (retval->decided == 0)
       _nl_load_domain (retval);

      if (retval->data != NULL)
       return retval;

      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
         if (retval->successor[cnt]->decided == 0)
           _nl_load_domain (retval->successor[cnt]);

         if (retval->successor[cnt]->data != NULL)
      return cnt >= 0 ? retval : NULL;
      /* NOTREACHED */

  /* See whether the locale value is an alias.  If yes its value
     *overwrites* the alias name.  No test for the original value is
     done.  */
  alias_value = _nl_expand_alias (locale);
  if (alias_value != NULL)
      size_t len = strlen (alias_value) + 1;
      locale = (char *) malloc (len);
      if (locale == NULL)
       return NULL;

      memcpy (locale, alias_value, len);

  /* Now we determine the single parts of the locale name.  First
     look for the language.  Termination symbols are `_' and `@' if
     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
  mask = _nl_explode_name (locale, &language, &modifier, &territory,
                        &codeset, &normalized_codeset, &special,
                        &sponsor, &revision);

  /* Create all possible locale entries which might be interested in
     generalzation.  */
  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
                            strlen (dirname) + 1, mask, language, territory,
                            codeset, normalized_codeset, modifier, special,
                            sponsor, revision, domainname, 1);
  if (retval == NULL)
    /* This means we are out of core.  */
    return NULL;

  if (retval->decided == 0)
    _nl_load_domain (retval);
  if (retval->data == NULL)
      int cnt;
      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
         if (retval->successor[cnt]->decided == 0)
           _nl_load_domain (retval->successor[cnt]);
         if (retval->successor[cnt]->data != NULL)

  /* The room for an alias was dynamically allocated.  Free it now.  */
  if (alias_value != NULL)
    free (locale);

  return retval;

Here is the call graph for this function:

void free ( )
static char* stpcpy PARAMS ( (char *dest, const char *src ) [static]
static char* stpcpy ( char *  dest,
const char *  src 
) [static]

Definition at line 208 of file finddomain.c.

  while ((*dest++ = *src++) != '\0')
    /* Do nothing. */ ;
  return dest - 1;

Variable Documentation

Definition at line 75 of file finddomain.c.