Update.
1998-05-21 15:27 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/wcsnrtombs.c: Correct computation of result. * wcsmbs/wcsrtombs.c: Likewise. * wcsmbs/Makefile (tests): Add wcsmbs-tst1.c. * wcsmbs/wcsmbs-tst1.c: New file. * iconv/loop.c (COUNT_CONVERTED): Correct computation. * locale/C-ctype.c (_nl_C_LC_CTYPE): Define MB_CUR_MAX for C locale as 1. * locale/setlocale.c: Don't make _nl_current_* and _nl_C_* references weak. 1998-05-21 Philip Blundell <philb@gnu.org> * sysdeps/arm/fpu_control.h: Replace stub file with real implementation. * sysdeps/arm/fpu/bits/fenv.h: New file. * sysdeps/arm/fpu/fesetround.c: Likewise. * sysdeps/arm/fpu/fclrexcpt.c: Likewise. * sysdeps/arm/fpu/fsetexcptflag.c: Likewise. * sysdeps/arm/fpu/ftestexcpt.c: Likewise. * sysdeps/arm/fpu/fraiseexcpt.c: Likewise. * sysdeps/arm/fpu/fegetenv.c: Likewise. * sysdeps/arm/fpu/fesetenv.c: Likewise. 1998-05-21 16:34 Richard Henderson <rth@cygnus.com> * elf/dl-load.c (_dl_map_object_from_fd): Get file header with read instead of mmap.
This commit is contained in:
parent
32c85e43ed
commit
23f0c99c0e
34
ChangeLog
34
ChangeLog
|
@ -1,3 +1,37 @@
|
|||
1998-05-21 15:27 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* wcsmbs/wcsnrtombs.c: Correct computation of result.
|
||||
* wcsmbs/wcsrtombs.c: Likewise.
|
||||
|
||||
* wcsmbs/Makefile (tests): Add wcsmbs-tst1.c.
|
||||
* wcsmbs/wcsmbs-tst1.c: New file.
|
||||
|
||||
* iconv/loop.c (COUNT_CONVERTED): Correct computation.
|
||||
|
||||
* locale/C-ctype.c (_nl_C_LC_CTYPE): Define MB_CUR_MAX for C locale
|
||||
as 1.
|
||||
|
||||
* locale/setlocale.c: Don't make _nl_current_* and _nl_C_* references
|
||||
weak.
|
||||
|
||||
1998-05-21 Philip Blundell <philb@gnu.org>
|
||||
|
||||
* sysdeps/arm/fpu_control.h: Replace stub file with real
|
||||
implementation.
|
||||
* sysdeps/arm/fpu/bits/fenv.h: New file.
|
||||
* sysdeps/arm/fpu/fesetround.c: Likewise.
|
||||
* sysdeps/arm/fpu/fclrexcpt.c: Likewise.
|
||||
* sysdeps/arm/fpu/fsetexcptflag.c: Likewise.
|
||||
* sysdeps/arm/fpu/ftestexcpt.c: Likewise.
|
||||
* sysdeps/arm/fpu/fraiseexcpt.c: Likewise.
|
||||
* sysdeps/arm/fpu/fegetenv.c: Likewise.
|
||||
* sysdeps/arm/fpu/fesetenv.c: Likewise.
|
||||
|
||||
1998-05-21 16:34 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* elf/dl-load.c (_dl_map_object_from_fd): Get file header with
|
||||
read instead of mmap.
|
||||
|
||||
1998-05-21 8:16 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/glob.c: Include sysdeps/generic/glob.c
|
||||
|
|
|
@ -103,10 +103,10 @@
|
|||
? (inptr - *inptrp) : (outptr - *outptrp))
|
||||
# endif
|
||||
# else
|
||||
# define COUNT_CONVERTED (inptr - *inptrp)
|
||||
# define COUNT_CONVERTED ((inptr - *inptrp) / MIN_NEEDED_INPUT)
|
||||
# endif
|
||||
# elif MIN_NEEDED_OUTPUT == MAX_NEEDED_OUTPUT
|
||||
# define COUNT_CONVERTED (outptr - *outptrp)
|
||||
# define COUNT_CONVERTED ((outptr - *outptrp) / MIN_NEEDED_OUTPUT)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -367,7 +367,7 @@ const struct locale_data _nl_C_LC_CTYPE =
|
|||
"print\0" "graph\0" "blank\0" "cntrl\0" "punct\0" "alnum\0" },
|
||||
{ string: "tolower\0" "toupper\0" },
|
||||
{ string: _nl_C_LC_CTYPE_width },
|
||||
{ word: 2 },
|
||||
{ word: 1 },
|
||||
{ string: "ANSI_X3.4-1968" }
|
||||
}
|
||||
};
|
||||
|
|
|
@ -36,8 +36,7 @@
|
|||
then nothing is using the locale data. */
|
||||
#define DEFINE_CATEGORY(category, category_name, items, a, b, c, d) \
|
||||
extern struct locale_data *_nl_current_##category; \
|
||||
extern struct locale_data _nl_C_##category; \
|
||||
weak_extern (_nl_current_##category) weak_extern (_nl_C_##category)
|
||||
extern struct locale_data _nl_C_##category;
|
||||
#include "categories.def"
|
||||
#undef DEFINE_CATEGORY
|
||||
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _FENV_H
|
||||
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
|
||||
#endif
|
||||
|
||||
/* Define bits representing exceptions in the FPU status word. */
|
||||
enum
|
||||
{
|
||||
FE_INVALID = 1,
|
||||
#define FE_INVALID FE_INVALID
|
||||
FE_DIVBYZERO = 2,
|
||||
#define FE_DIVBYZERO FE_DIVBYZERO
|
||||
FE_OVERFLOW = 4,
|
||||
#define FE_OVERFLOW FE_OVERFLOW
|
||||
FE_UNDERFLOW = 8,
|
||||
#define FE_UNDERFLOW FE_UNDERFLOW
|
||||
};
|
||||
|
||||
/* Amount to shift by to convert an exception to a mask bit. */
|
||||
#define FE_EXCEPTION_SHIFT 16
|
||||
|
||||
/* All supported exceptions. */
|
||||
#define FE_ALL_EXCEPT \
|
||||
(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW)
|
||||
|
||||
/* The ARM FPU basically only supports round-to-nearest. Other rounding
|
||||
modes exist, but you have to encode them in the actual instruction. */
|
||||
#define FE_TONEAREST 0
|
||||
|
||||
/* Type representing exception flags. */
|
||||
typedef unsigned long fexcept_t;
|
||||
|
||||
/* Type representing floating-point environment. */
|
||||
typedef struct
|
||||
{
|
||||
unsigned long cw;
|
||||
}
|
||||
fenv_t;
|
||||
|
||||
/* If the default argument is used we use this value. */
|
||||
#define FE_DFL_ENV ((fenv_t *) -1l)
|
|
@ -0,0 +1,39 @@
|
|||
/* Clear given exceptions in current floating-point environment.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fpu_control.h>
|
||||
|
||||
void
|
||||
feclearexcept (int excepts)
|
||||
{
|
||||
unsigned long int temp;
|
||||
|
||||
/* Mask out unsupported bits/exceptions. */
|
||||
excepts &= FE_ALL_EXCEPT;
|
||||
|
||||
/* Get the current floating point status. */
|
||||
_FPU_GETCW(temp);
|
||||
|
||||
/* Clear the relevant bits. */
|
||||
temp &= excepts ^ FE_ALL_EXCEPT;
|
||||
|
||||
/* Put the new data in effect. */
|
||||
_FPU_SETCW(temp);
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/* Store current floating-point environment.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fpu_control.h>
|
||||
|
||||
void
|
||||
fegetenv (fenv_t *envp)
|
||||
{
|
||||
unsigned long int temp;
|
||||
_FPU_GETCW(temp);
|
||||
envp->cw = temp;
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/* Return current rounding direction.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
int
|
||||
fegetround (void)
|
||||
{
|
||||
return FE_TONEAREST; /* Easy. :-) */
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/* Install given floating-point environment.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fpu_control.h>
|
||||
|
||||
void
|
||||
fesetenv (const fenv_t *envp)
|
||||
{
|
||||
if (envp == FE_DFL_ENV)
|
||||
_FPU_SETCW(_FPU_DEFAULT);
|
||||
else
|
||||
{
|
||||
unsigned long temp = envp->cw;
|
||||
_FPU_SETCW(temp);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/* Set current rounding direction.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
int
|
||||
fesetround (int round)
|
||||
{
|
||||
/* We only support FE_TONEAREST, so there is no need for any work. */
|
||||
return (round == FE_TONEAREST)?1:0;
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/* Raise given exceptions.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fpu_control.h>
|
||||
#include <math.h>
|
||||
|
||||
void
|
||||
feraiseexcept (int excepts)
|
||||
{
|
||||
/* Raise exceptions represented by EXPECTS. */
|
||||
fexcept_t temp;
|
||||
_FPU_GETCW(temp);
|
||||
temp |= (excepts & FE_ALL_EXCEPT);
|
||||
_FPU_SETCW(temp);
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/* Set floating-point environment exception handling.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <math.h>
|
||||
#include <fpu_control.h>
|
||||
|
||||
void
|
||||
fesetexceptflag (const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
fexcept_t temp;
|
||||
|
||||
/* Get the current environment. */
|
||||
_FPU_GETCW(temp);
|
||||
|
||||
/* Set the desired exception mask. */
|
||||
temp &= ~((excepts & FE_ALL_EXCEPT) << FE_EXCEPT_SHIFT);
|
||||
temp |= (*flagp & excepts & FE_ALL_EXCEPT) << FE_EXCEPT_SHIFT;
|
||||
|
||||
/* Save state back to the FPU. */
|
||||
_FPU_SETCW(temp);
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/* Test exception in current environment.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <fpu_control.h>
|
||||
|
||||
int
|
||||
fetestexcept (int excepts)
|
||||
{
|
||||
fexcept_t temp;
|
||||
|
||||
/* Get current exceptions. */
|
||||
_FPU_GETCW(temp);
|
||||
|
||||
return temp & excepts & FE_ALL_EXCEPT;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* FPU control word definitions. Stub version.
|
||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
/* FPU control word definitions. ARM version.
|
||||
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
|
@ -20,7 +20,54 @@
|
|||
#ifndef _FPU_CONTROL_H
|
||||
#define _FPU_CONTROL_H
|
||||
|
||||
#define _FPU_RESERVED 0xffffffff /* These bits are reserved. */
|
||||
/* We have a slight terminology confusion here. On the ARM, the register
|
||||
* we're interested in is actually the FPU status word - the FPU control
|
||||
* word is something different (which is implementation-defined and only
|
||||
* accessible from supervisor mode.)
|
||||
*
|
||||
* The FPSR looks like this:
|
||||
*
|
||||
* 31-24 23-16 15-8 7-0
|
||||
* | system ID | trap enable | system control | exception flags |
|
||||
*
|
||||
* We ignore the system ID bits; for interest's sake they are:
|
||||
*
|
||||
* 0000 "old" FPE
|
||||
* 1000 FPPC hardware
|
||||
* 0001 FPE 400
|
||||
* 1001 FPA hardware
|
||||
*
|
||||
* The trap enable and exception flags are both structured like this:
|
||||
*
|
||||
* 7 - 5 4 3 2 1 0
|
||||
* | reserved | INX | UFL | OFL | DVZ | IVO |
|
||||
*
|
||||
* where a `1' bit in the enable byte means that the trap can occur, and
|
||||
* a `1' bit in the flags byte means the exception has occurred.
|
||||
*
|
||||
* The exceptions are:
|
||||
*
|
||||
* IVO - invalid operation
|
||||
* DVZ - divide by zero
|
||||
* OFL - overflow
|
||||
* UFL - underflow
|
||||
* INX - inexact (do not use; implementations differ)
|
||||
*
|
||||
* The system control byte looks like this:
|
||||
*
|
||||
* 7-5 4 3 2 1 0
|
||||
* | reserved | AC | EP | SO | NE | ND |
|
||||
*
|
||||
* where the bits mean
|
||||
*
|
||||
* ND - no denormalised numbers (force them all to zero)
|
||||
* NE - enable NaN exceptions
|
||||
* SO - synchronous operation
|
||||
* EP - use expanded packed-decimal format
|
||||
* AC - use alternate definition for C flag on compare operations
|
||||
*/
|
||||
|
||||
#define _FPU_RESERVED 0xfff0e0f0 /* These bits are reserved. */
|
||||
|
||||
/* The fdlibm code requires no interrupts for exceptions. Don't
|
||||
change the rounding mode, it would break long double I/O! */
|
||||
|
@ -29,11 +76,9 @@
|
|||
/* Type of the control word. */
|
||||
typedef unsigned int fpu_control_t;
|
||||
|
||||
/* Macros for accessing the hardware control word.
|
||||
* On the ARM, we can't do this from user mode (it would trap).
|
||||
*/
|
||||
#define _FPU_GETCW(cw) __asm__ ("movnv r0,r0" : "=g" (cw))
|
||||
#define _FPU_SETCW(cw) __asm__ ("movnv r0,r0" : : "g" (cw))
|
||||
/* Macros for accessing the hardware control word. */
|
||||
#define _FPU_GETCW(cw) __asm__ ("rfs %0" : "=r" (cw))
|
||||
#define _FPU_SETCW(cw) __asm__ ("wfs %0" : : "r" (cw))
|
||||
|
||||
/* Default control word set at startup. */
|
||||
extern fpu_control_t __fpu_control;
|
||||
|
|
|
@ -39,7 +39,7 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
|
|||
wcscasecmp wcsncase wcscasecmp_l wcsncase_l \
|
||||
wcsmbsload
|
||||
|
||||
tests := tst-wcstof
|
||||
tests := tst-wcstof wcsmbs-tst1
|
||||
|
||||
include ../Rules
|
||||
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
/* Based on a test program by Won Kyu Park <wkpark@chem.skku.ac.kr>. */
|
||||
|
||||
#include <wchar.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wctype.h>
|
||||
#include <locale.h>
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int test=0, idx=0;
|
||||
char buf[100], *pchar;
|
||||
wchar_t tmp[10];
|
||||
wchar_t tmp1[]={L'W',L'o',L'r',L'l',L'd',L'\0'};
|
||||
char str[]="Hello";
|
||||
int result = 0;
|
||||
|
||||
pchar= setlocale (LC_ALL, "");
|
||||
printf ("locale : %s\n",pchar);
|
||||
printf ("MB_CUR_MAX %d\n", MB_CUR_MAX);
|
||||
|
||||
puts("---- test 1 ------");
|
||||
test = mbstowcs (tmp, str, (strlen (str) + 1) * sizeof (char));
|
||||
printf ("size of string by mbstowcs %d\n", test);
|
||||
if (test != strlen (str))
|
||||
result = 1;
|
||||
idx += wctomb (&buf[0], tmp[0]);
|
||||
idx += wctomb (&buf[idx], tmp[1]);
|
||||
buf[idx] = 0;
|
||||
printf ("orig string %s\n", str);
|
||||
printf ("string by wctomb %s\n", buf);
|
||||
printf ("string by %%C %C", tmp[0]);
|
||||
if (tmp[0] != L'H')
|
||||
result = 1;
|
||||
printf ("%C\n", tmp[1]);
|
||||
if (tmp[1] != L'e')
|
||||
result = 1;
|
||||
printf ("string by %%S %S\n", tmp);
|
||||
if (wcscmp (tmp, L"Hello") != 0)
|
||||
result = 1;
|
||||
puts("---- test 2 ------");
|
||||
printf ("wchar string %S\n", tmp1);
|
||||
printf ("wchar %C\n", tmp1[0]);
|
||||
test = wcstombs (buf, tmp1, (wcslen (tmp1) + 1) * sizeof (wchar_t));
|
||||
printf ("size of string by wcstombs %d\n", test);
|
||||
if (test != wcslen (tmp1))
|
||||
result = 1;
|
||||
test = wcslen (tmp1);
|
||||
printf ("size of string by wcslen %d\n", test);
|
||||
printf ("char %s\n", buf);
|
||||
if (strcmp (buf, "World") != 0)
|
||||
result = 1;
|
||||
puts("------------------");
|
||||
|
||||
return result;
|
||||
}
|
|
@ -46,7 +46,7 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||
struct gconv_step_data data;
|
||||
const wchar_t *srcend;
|
||||
int status;
|
||||
size_t result = 0;
|
||||
size_t result;
|
||||
|
||||
/* Tell where we want the result. */
|
||||
data.invocation_counter = 0;
|
||||
|
@ -66,7 +66,9 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||
{
|
||||
char buf[256]; /* Just an arbitrary value. */
|
||||
const wchar_t *inbuf = *src;
|
||||
size_t dummy;
|
||||
|
||||
result = 0;
|
||||
data.outbufend = buf + sizeof (buf);
|
||||
|
||||
do
|
||||
|
@ -77,7 +79,10 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||
&data,
|
||||
(const char **) &inbuf,
|
||||
(const char *) srcend,
|
||||
&result, 0);
|
||||
&dummy, 0);
|
||||
|
||||
/* Count the number of bytes. */
|
||||
result += data.outbuf - buf;
|
||||
}
|
||||
while (status == GCONV_FULL_OUTPUT);
|
||||
|
||||
|
@ -91,13 +96,18 @@ __wcsnrtombs (dst, src, nwc, len, ps)
|
|||
/* This code is based on the safe assumption that all internal
|
||||
multi-byte encodings use the NUL byte only to mark the end
|
||||
of the string. */
|
||||
size_t dummy;
|
||||
|
||||
data.outbuf = dst;
|
||||
data.outbufend = dst + len;
|
||||
|
||||
status = (*__wcsmbs_gconv_fcts.tomb->fct) (__wcsmbs_gconv_fcts.tomb,
|
||||
&data, (const char **) src,
|
||||
(const char *) srcend,
|
||||
&result, 0);
|
||||
&dummy, 0);
|
||||
|
||||
/* Count the number of bytes. */
|
||||
result = data.outbuf - dst;
|
||||
|
||||
/* We have to determine whether the last character converted
|
||||
is the NUL character. */
|
||||
|
|
|
@ -42,7 +42,7 @@ __wcsrtombs (dst, src, len, ps)
|
|||
{
|
||||
struct gconv_step_data data;
|
||||
int status;
|
||||
size_t result = 0;
|
||||
size_t result;
|
||||
|
||||
/* Tell where we want the result. */
|
||||
data.invocation_counter = 0;
|
||||
|
@ -59,7 +59,9 @@ __wcsrtombs (dst, src, len, ps)
|
|||
char buf[256]; /* Just an arbitrary value. */
|
||||
const wchar_t *srcend = *src + __wcslen (*src) + 1;
|
||||
const wchar_t *inbuf = *src;
|
||||
size_t dummy;
|
||||
|
||||
result = 0;
|
||||
data.outbufend = buf + sizeof (buf);
|
||||
|
||||
do
|
||||
|
@ -70,7 +72,10 @@ __wcsrtombs (dst, src, len, ps)
|
|||
&data,
|
||||
(const char **) &inbuf,
|
||||
(const char *) srcend,
|
||||
&result, 0);
|
||||
&dummy, 0);
|
||||
|
||||
/* Count the number of bytes. */
|
||||
result += data.outbuf - buf;
|
||||
}
|
||||
while (status == GCONV_FULL_OUTPUT);
|
||||
|
||||
|
@ -88,6 +93,7 @@ __wcsrtombs (dst, src, len, ps)
|
|||
multi-byte encodings use the NUL byte only to mark the end
|
||||
of the string. */
|
||||
const wchar_t *srcend = *src + __wcsnlen (*src, len * MB_CUR_MAX) + 1;
|
||||
size_t dummy;
|
||||
|
||||
data.outbuf = dst;
|
||||
data.outbufend = dst + len;
|
||||
|
@ -95,7 +101,10 @@ __wcsrtombs (dst, src, len, ps)
|
|||
status = (*__wcsmbs_gconv_fcts.tomb->fct) (__wcsmbs_gconv_fcts.tomb,
|
||||
&data, (const char **) src,
|
||||
(const char *) srcend,
|
||||
&result, 0);
|
||||
&dummy, 0);
|
||||
|
||||
/* Count the number of bytes. */
|
||||
result = data.outbuf - dst;
|
||||
|
||||
/* We have to determine whether the last character converted
|
||||
is the NUL character. */
|
||||
|
|
Loading…
Reference in New Issue