Back to index

glibc  2.9
outdigits.h
Go to the documentation of this file.
00001 /* Copyright (C) 2000 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003    Contributed by Ulrich Drepper <drepper@gnu.org>, 2000.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #include <assert.h>
00021 #include <langinfo.h>
00022 #include <string.h>
00023 #include "../locale/localeinfo.h"
00024 
00025 /* Look up the value of the next multibyte character and return its numerical
00026    value if it is one of the digits known in the locale.  If *DECIDED is
00027    -1 this means it is not yet decided which form it is and we have to
00028    search through all available digits.  Otherwise we know which script
00029    the digits are from.  */
00030 static inline char *
00031 outdigit_value (char *s, int n)
00032 {
00033   const char *outdigit;
00034   size_t dlen;
00035 
00036   assert (0 <= n && n <= 9);
00037   outdigit = _NL_CURRENT (LC_CTYPE, _NL_CTYPE_OUTDIGIT0_MB + n);
00038   dlen = strlen (outdigit);
00039 
00040   s -= dlen;
00041   while (dlen-- > 0)
00042     s[dlen] = outdigit[dlen];
00043 
00044   return s;
00045 }