(linenum→info "unix/slp.c:2238")

glibc/2.7/locale/broken_cur_max.c

    1: /* Return number of characters in multibyte representation for current
    2:    character set.
    3:    Copyright (C) 1996, 1999 Free Software Foundation, Inc.
    4:    This file is part of the GNU C Library.
    5:    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
    6: 
    7:    The GNU C Library is free software; you can redistribute it and/or
    8:    modify it under the terms of the GNU Lesser General Public
    9:    License as published by the Free Software Foundation; either
   10:    version 2.1 of the License, or (at your option) any later version.
   11: 
   12:    The GNU C Library is distributed in the hope that it will be useful,
   13:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   14:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   15:    Lesser General Public License for more details.
   16: 
   17:    You should have received a copy of the GNU Lesser General Public
   18:    License along with the GNU C Library; if not, write to the Free
   19:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   20:    02111-1307 USA.  */
   21: 
   22: #include <langinfo.h>
   23: #include <locale.h>
   24: #include <stdlib.h>
   25: #include "localeinfo.h"
   26: 
   27: 
   28: /* This is a gross hack to get broken programs running.
   29: 
   30:    ISO C provides no mean to find out how many bytes the wide
   31:    character representation really uses.  But it defines MB_CUR_LEN to
   32:    return the information for the multi-byte character representation.
   33:    Many programmers don't know the difference between the two and
   34:    think this means the same.  But assuming all characters have a size
   35:    of MB_CUR_LEN after they have been processed by `mbrtowc' is wrong.
   36:    Instead the maximum number of characters used for the conversion is
   37:    MB_CUR_LEN.
   38: 
   39:    It is known that some Motif applications have this problem.  To
   40:    cure this one has to make sure the glibc uses the function in this
   41:    file instead of the one in locale/mb_cur_max.c.  This can either be
   42:    done by linking with this file or by using the LD_PRELOAD feature
   43:    of the dynamic linker.  */
   44: size_t
   45: __ctype_get_mb_cur_max (void)
   46: {
   47:   union locale_data_value u;
   48: 
   49:   u.string = nl_langinfo (_NL_CTYPE_MB_CUR_MAX);
   50:   return ((size_t []) { 1, 1, 1, 2, 2, 3, 4 })[u.word];
   51: }
Syntax (Markdown)