This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] mbsnrtowcs/wcsnrtombs


On Feb 14 10:21, Corinna Vinschen wrote:
> On Feb 13 19:35, Corinna Vinschen wrote:
> > Hi,
> > 
> > the below patch adds the two functions mbsnrtowcs and wcsnrtombs, as
> > defined in BSD and POSIX.1-2008, [...]

Here's the entire patch again.  I now added documentation for the
wcsrtombs, wcsnrtombs, mbsrtowcs and mbsnrtowcs functions using the
FreeBSD man pages as template.


Corinna


	* libc/include/wchar.h (mbsnrtowcs): Declare.
	(_mbsnrtowcs_r): Declare.
	(wcsnrtombs): Declare.
	(_wcsnrtombs_r): Declare.
	* libc/stdlib/Makefile.am (ELIX_2_SOURCES): Add mbsnrtowcs.c
	and wcsnrtombs.c.
	* libc/stdlib/Makefile.in: Regenerate.
	* libc/stdlib/mbsnrtowcs.c: New file, implementing _mbsnrtowcs_r
	and mbsnrtowcs.  Document mbsnrtowcs and mbsrtowcs.
	* libc/stdlib/mbsrtowcs.c (_mbsrtowcs_r): Just call _mbsnrtowcs_r.
	(mbsrtowcs): Ditto.
	* libc/stdlib/wcsnrtombs.c: New file, implementing _wcsnrtombs_r
	and wcsnrtombs.  Document wcsrtombs and wcsnrtombs.
	* libc/stdlib/wcsrtombs.c (_wcsrtombs_r): Just call _wcsnrtombs_r.
	(wcsrtombs): Ditto.
	* libc/stdlib/stdlib.tex: Accommodate new documentation.


Index: libc/include/wchar.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/wchar.h,v
retrieving revision 1.20
diff -u -p -r1.20 wchar.h
--- libc/include/wchar.h	12 Feb 2009 23:10:01 -0000	1.20
+++ libc/include/wchar.h	16 Feb 2009 15:19:50 -0000
@@ -47,10 +47,18 @@ size_t	_EXFUN(mbrtowc, (wchar_t * , cons
 size_t	_EXFUN(_mbrtowc_r, (struct _reent *, wchar_t * , const char * , 
 			size_t, mbstate_t *));
 int	_EXFUN(mbsinit, (const mbstate_t *));
+size_t	_EXFUN(mbsnrtowcs, (wchar_t * , const char ** , size_t, size_t,
+			mbstate_t *));
+size_t	_EXFUN(_mbsnrtowcs_r, (struct _reent *, wchar_t * , const char ** ,
+			size_t, size_t, mbstate_t *));
 size_t	_EXFUN(mbsrtowcs, (wchar_t * , const char ** , size_t, mbstate_t *));
 size_t	_EXFUN(_mbsrtowcs_r, (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *));
 size_t	_EXFUN(wcrtomb, (char * , wchar_t, mbstate_t *));
 size_t	_EXFUN(_wcrtomb_r, (struct _reent *, char * , wchar_t, mbstate_t *));
+size_t	_EXFUN(wcsnrtombs, (char * , const wchar_t ** , size_t, size_t,
+			mbstate_t *));
+size_t	_EXFUN(_wcsnrtombs_r, (struct _reent *, char * , const wchar_t ** , 
+			size_t, size_t, mbstate_t *));
 size_t	_EXFUN(wcsrtombs, (char * , const wchar_t ** , size_t, mbstate_t *));
 size_t	_EXFUN(_wcsrtombs_r, (struct _reent *, char * , const wchar_t ** , 
 			size_t, mbstate_t *));
Index: libc/stdlib/Makefile.am
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdlib/Makefile.am,v
retrieving revision 1.26
diff -u -p -r1.26 Makefile.am
--- libc/stdlib/Makefile.am	12 Feb 2009 23:10:01 -0000	1.26
+++ libc/stdlib/Makefile.am	16 Feb 2009 15:19:50 -0000
@@ -98,10 +98,12 @@ ELIX_2_SOURCES = \
 	mbrlen.c	\
 	mbrtowc.c	\
 	mbsinit.c	\
+	mbsnrtowcs.c	\
 	mbsrtowcs.c	\
 	on_exit.c	\
 	valloc.c	\
 	wcrtomb.c	\
+	wcsnrtombs.c	\
 	wcsrtombs.c	\
 	wctob.c
 
Index: libc/stdlib/mbsnrtowcs.c
===================================================================
RCS file: libc/stdlib/mbsnrtowcs.c
diff -N libc/stdlib/mbsnrtowcs.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libc/stdlib/mbsnrtowcs.c	16 Feb 2009 15:19:50 -0000
@@ -0,0 +1,179 @@
+/*
+FUNCTION
+<<mbsrtowcs>>, <<mbsnrtowcs>>---convert a character string to a wide-character string
+
+INDEX
+	mbsrtowcs
+INDEX
+	_mbsrtowcs_r
+INDEX
+	mbsnrtowcs
+INDEX
+	_mbsnrtowcs_r
+
+ANSI_SYNOPSIS
+	#include <wchar.h>
+	size_t mbsrtowcs(wchar_t *<[dst]>, const char **<[src]>, size_t <[len]>,
+			 mbstate_t *<[ps]>);
+
+	#include <wchar.h>
+	size_t _mbsrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
+			    const char **<[src]>, size_t <[len]>,
+			    mbstate_t *<[ps]>);
+
+	#include <wchar.h>
+	size_t mbsnrtowcs(wchar_t *<[dst]>, const char **<[src]>,
+			  size_t <[nms]>, size_t <[len]>, mbstate_t *<[ps]>);
+
+	#include <wchar.h>
+	size_t _mbsnrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
+			     const char **<[src]>, size_t <[nms]>,
+			     size_t <[len]>, mbstate_t *<[ps]>);
+
+TRAD_SYNOPSIS
+	#include <wchar.h>
+	size_t mbsrtowcs(<[dst]>, <[src]>, <[len]>, <[ps]>)
+	wchar_t *<[dst]>;
+	const char **<[src]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+	#include <wchar.h>
+	size_t _mbsrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[len]>, <[ps]>)
+	struct _reent *<[ptr]>;
+	wchar_t *<[dst]>;
+	const char **<[src]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+	#include <wchar.h>
+	size_t mbsnrtowcs(<[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
+	wchar_t *<[dst]>;
+	const char **<[src]>;
+	size_t <[nms]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+	#include <wchar.h>
+	size_t _mbsnrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
+	struct _reent *<[ptr]>;
+	wchar_t *<[dst]>;
+	const char **<[src]>;
+	size_t <[nms]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+DESCRIPTION
+The <<mbsrtowcs>> function converts a sequence of multibyte characters
+pointed to indirectly by <[src]> into a sequence of corresponding wide
+characters and stores at most <[len]> of them in the wchar_t array pointed
+to by <[dst]>, until it encounters a terminating null character ('\0').
+
+If <[dst]> is NULL, no characters are stored.
+
+If <[dst]> is not NULL, the pointer pointed to by <[src]> is updated to point
+to the character after the one that conversion stopped at.  If conversion
+stops because a null character is encountered, *<[src]> is set to NULL.
+
+The mbstate_t argument, <[ps]>, is used to keep track of the shift state.  If
+it is NULL, <<mbsrtowcs>> uses an internal, static mbstate_t object, which
+is initialized to the initial conversion state at program startup.
+
+The <<mbsnrtowcs>> function behaves identically to <<mbsrtowcs>>, except that
+conversion stops after reading at most <[nms]> bytes from the buffer pointed
+to by <[src]>.
+
+RETURNS
+The <<mbsrtowcs>> and <<mbsnrtowcs>> functions return the number of wide
+characters stored in the array pointed to by <[dst]> if successful, otherwise
+it returns (size_t)-1.
+
+PORTABILITY
+<<mbsrtowcs>> is defined by the C99 standard.
+<<mbsnrtowcs>> is defined by the POSIX.1-2008 standard.
+*/
+
+#include <reent.h>
+#include <newlib.h>
+#include <wchar.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+size_t
+_DEFUN (_mbsnrtowcs_r, (r, dst, src, nms, len, ps), 
+	struct _reent *r _AND
+	wchar_t *dst _AND
+	const char **src _AND
+	size_t nms _AND
+	size_t len _AND
+	mbstate_t *ps)
+{
+  wchar_t *ptr = dst;
+  const char *tmp_src;
+  size_t max;
+  size_t count = 0;
+  int bytes;
+
+#ifdef _MB_CAPABLE
+  if (ps == NULL)
+    {
+      _REENT_CHECK_MISC(r);
+      ps = &(_REENT_MBSRTOWCS_STATE(r));
+    }
+#endif
+
+  if (dst == NULL)
+    {
+      /* Ignore original len value and do not alter src pointer if the
+         dst pointer is NULL.  */
+      len = (size_t)-1;
+      tmp_src = *src;
+      src = &tmp_src;
+    }      
+  
+  max = len;
+  while (len > 0)
+    {
+      bytes = _mbrtowc_r (r, ptr, *src, nms, ps);
+      if (bytes > 0)
+	{
+	  *src += bytes;
+	  nms -= bytes;
+	  ++count;
+	  ptr = (dst == NULL) ? NULL : ptr + 1;
+	  --len;
+	}
+      else if (bytes == -2)
+	{
+	  *src += nms;
+	  return count;
+	}
+      else if (bytes == 0)
+	{
+	  *src = NULL;
+	  return count;
+	}
+      else
+	{
+	  ps->__count = 0;
+	  r->_errno = EILSEQ;
+	  return (size_t)-1;
+	}
+    }
+
+  return (size_t)max;
+}
+
+#ifndef _REENT_ONLY
+size_t
+_DEFUN (mbsnrtowcs, (dst, src, nms, len, ps),
+	wchar_t *dst _AND
+	const char **src _AND
+	size_t nms _AND
+	size_t len _AND
+	mbstate_t *ps)
+{
+  return _mbsnrtowcs_r (_REENT, dst, src, nms, len, ps);
+}
+#endif /* !_REENT_ONLY */
Index: libc/stdlib/mbsrtowcs.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdlib/mbsrtowcs.c,v
retrieving revision 1.5
diff -u -p -r1.5 mbsrtowcs.c
--- libc/stdlib/mbsrtowcs.c	23 Apr 2004 21:44:22 -0000	1.5
+++ libc/stdlib/mbsrtowcs.c	16 Feb 2009 15:19:50 -0000
@@ -6,65 +6,14 @@
 #include <errno.h>
 
 size_t
-_DEFUN (_mbsrtowcs_r, (r, dst, src, n, ps), 
+_DEFUN (_mbsrtowcs_r, (r, dst, src, len, ps), 
 	struct _reent *r _AND
 	wchar_t *dst _AND
 	const char **src _AND
-	size_t n _AND
+	size_t len _AND
 	mbstate_t *ps)
 {
-  wchar_t *ptr = dst;
-  const char *tmp_src;
-  size_t max;
-  size_t count = 0;
-  int bytes;
-
-#ifdef _MB_CAPABLE
-  if (ps == NULL)
-    {
-      _REENT_CHECK_MISC(r);
-      ps = &(_REENT_MBSRTOWCS_STATE(r));
-    }
-#endif
-
-  if (dst == NULL)
-    {
-      /* Ignore original n value and do not alter src pointer if the
-         dst pointer is NULL.  */
-      n = (size_t)-1;
-      tmp_src = *src;
-      src = &tmp_src;
-    }      
-  
-  max = n;
-  while (n > 0)
-    {
-      bytes = _mbrtowc_r (r, ptr, *src, MB_CUR_MAX, ps);
-      if (bytes > 0)
-	{
-	  *src += bytes;
-	  ++count;
-	  ptr = (dst == NULL) ? NULL : ptr + 1;
-	  --n;
-	}
-      else if (bytes == -2)
-	{
-	  *src += MB_CUR_MAX;
-	}
-      else if (bytes == 0)
-	{
-	  *src = NULL;
-	  return count;
-	}
-      else
-	{
-	  ps->__count = 0;
-	  r->_errno = EILSEQ;
-	  return (size_t)-1;
-	}
-    }
-
-  return (size_t)max;
+  return _mbsnrtowcs_r (r, dst, src, (size_t) -1, len, ps);
 }
 
 #ifndef _REENT_ONLY
@@ -75,6 +24,6 @@ _DEFUN (mbsrtowcs, (dst, src, len, ps),
 	size_t len _AND
 	mbstate_t *ps)
 {
-  return _mbsrtowcs_r (_REENT, dst, src, len, ps);
+  return _mbsnrtowcs_r (_REENT, dst, src, (size_t) -1, len, ps);
 }
 #endif /* !_REENT_ONLY */
Index: libc/stdlib/wcsnrtombs.c
===================================================================
RCS file: libc/stdlib/wcsnrtombs.c
diff -N libc/stdlib/wcsnrtombs.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libc/stdlib/wcsnrtombs.c	16 Feb 2009 15:19:50 -0000
@@ -0,0 +1,184 @@
+/*
+FUNCTION
+<<wcsrtombs>>, <<wcsnrtombs>>---convert a wide-character string to a character string
+
+INDEX
+	wcsrtombs
+INDEX
+	_wcsrtombs_r
+INDEX
+	wcsnrtombs
+INDEX
+	_wcsnrtombs_r
+
+ANSI_SYNOPSIS
+	#include <wchar.h>
+	size_t wcsrtombs(char *<[dst]>, const wchar_t **<[src]>, size_t <[len]>,
+			 mbstate_t *<[ps]>);
+
+	#include <wchar.h>
+	size_t _wcsrtombs_r(struct _reent *<[ptr]>, char *<[dst]>,
+			    const wchar_t **<[src]>, size_t <[len]>,
+			    mbstate_t *<[ps]>);
+
+	#include <wchar.h>
+	size_t wcsnrtombs(char *<[dst]>, const wchar_t **<[src]>,
+			  size_t <[nwc]>, size_t <[len]>, mbstate_t *<[ps]>);
+
+	#include <wchar.h>
+	size_t _wcsnrtombs_r(struct _reent *<[ptr]>, char *<[dst]>,
+			     const wchar_t **<[src]>, size_t <[nwc]>,
+			     size_t <[len]>, mbstate_t *<[ps]>);
+
+TRAD_SYNOPSIS
+	#include <wchar.h>
+	size_t wcsrtombs(<[dst]>, <[src]>, <[len]>, <[ps]>)
+	char *<[dst]>;
+	const wchar_t **<[src]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+	#include <wchar.h>
+	size_t _wcsrtombs_r(<[ptr]>, <[dst]>, <[src]>, <[len]>, <[ps]>)
+	struct _rent *<[ptr]>;
+	char *<[dst]>;
+	const wchar_t **<[src]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+	#include <wchar.h>
+	size_t wcsnrtombs(<[dst]>, <[src]>, <[nwc]>, <[len]>, <[ps]>)
+	char *<[dst]>;
+	const wchar_t **<[src]>;
+	size_t <[nwc]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+	#include <wchar.h>
+	size_t _wcsnrtombs_r(<[ptr]>, <[dst]>, <[src]>, <[nwc]>, <[len]>, <[ps]>)
+	struct _rent *<[ptr]>;
+	char *<[dst]>;
+	const wchar_t **<[src]>;
+	size_t <[nwc]>;
+	size_t <[len]>;
+	mbstate_t *<[ps]>;
+
+DESCRIPTION
+The <<wcsrtombs>> function converts a string of wide characters indirectly
+pointed to by <[src]> to a corresponding multibyte character string stored in
+the array pointed to by <[dst}>.  No more than <[len]> bytes are written to
+<[dst}>.
+
+If <[dst}> is NULL, no characters are stored.
+
+If <[dst}> is not NULL, the pointer pointed to by <[src]> is updated to point
+to the character after the one that conversion stopped at.  If conversion
+stops because a null character is encountered, *<[src]> is set to NULL.
+
+The mbstate_t argument, <[ps]>, is used to keep track of the shift state.  If
+it is NULL, <<wcsrtombs>> uses an internal, static mbstate_t object, which
+is initialized to the initial conversion state at program startup.
+
+The <<wcsnrtombs>> function behaves identically to <<wcsrtombs>>, except that
+conversion stops after reading at most <[nwc]> characters from the buffer
+pointed to by <[src]>.
+
+RETURNS
+The <<wcsrtombs>> and <<wcsnrtombs>> functions return the number of bytes
+stored in the array pointed to by <[dst]> (not including any terminating
+null), if successful, otherwise it returns (size_t)-1.
+
+PORTABILITY
+<<wcsrtombs>> is defined by C99 standard.
+<<wcsnrtombs>> is defined by the POSIX.1-2008 standard.
+*/
+
+#include <reent.h>
+#include <newlib.h>
+#include <wchar.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+size_t
+_DEFUN (_wcsnrtombs_r, (r, dst, src, nwc, len, ps),
+	struct _reent *r _AND
+	char *dst _AND
+	const wchar_t **src _AND
+	size_t nwc _AND
+	size_t len _AND
+	mbstate_t *ps)
+{
+  char *ptr = dst;
+  char buff[10];
+  wchar_t *pwcs;
+  size_t n;
+  int i;
+
+#ifdef _MB_CAPABLE
+  if (ps == NULL)
+    {
+      _REENT_CHECK_MISC(r);
+      ps = &(_REENT_WCSRTOMBS_STATE(r));
+    }
+#endif
+
+  /* If no dst pointer, treat len as maximum possible value. */
+  if (dst == NULL)
+    len = (size_t)-1;
+
+  n = 0;
+  pwcs = (wchar_t *)(*src);
+
+  while (n < len && nwc-- > 0)
+    {
+      int count = ps->__count;
+      wint_t wch = ps->__value.__wch;
+      int bytes = _wcrtomb_r (r, buff, *pwcs, ps);
+      if (bytes == -1)
+	{
+	  r->_errno = EILSEQ;
+	  ps->__count = 0;
+	  return (size_t)-1;
+	}
+      if (n + bytes <= len)
+	{
+          n += bytes;
+	  if (dst)
+	    {
+	      for (i = 0; i < bytes; ++i)
+	        *ptr++ = buff[i];
+	      ++(*src);
+	    }
+	  if (*pwcs++ == 0x00)
+	    {
+	      if (dst)
+	        *src = NULL;
+	      ps->__count = 0;
+	      return n - 1;
+	    }
+	}
+      else
+	{
+	  /* not enough room, we must back up state to before _wctomb_r call */
+	  ps->__count = count;
+	  ps->__value.__wch = wch;
+          len = 0;
+	}
+    }
+
+  return n;
+} 
+
+#ifndef _REENT_ONLY
+size_t
+_DEFUN (wcsnrtombs, (dst, src, nwc, len, ps),
+	char *dst _AND
+	const wchar_t **src _AND
+	size_t nwc _AND
+	size_t len _AND
+	mbstate_t *ps)
+{
+  return _wcsnrtombs_r (_REENT, dst, src, nwc, len, ps);
+}
+#endif /* !_REENT_ONLY */
Index: libc/stdlib/wcsrtombs.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdlib/wcsrtombs.c,v
retrieving revision 1.8
diff -u -p -r1.8 wcsrtombs.c
--- libc/stdlib/wcsrtombs.c	28 Aug 2008 17:36:49 -0000	1.8
+++ libc/stdlib/wcsrtombs.c	16 Feb 2009 15:19:50 -0000
@@ -1,9 +1,6 @@
 #include <reent.h>
 #include <newlib.h>
 #include <wchar.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
 
 size_t
 _DEFUN (_wcsrtombs_r, (r, dst, src, len, ps),
@@ -13,65 +10,7 @@ _DEFUN (_wcsrtombs_r, (r, dst, src, len,
 	size_t len _AND
 	mbstate_t *ps)
 {
-  char *ptr = dst;
-  char buff[10];
-  wchar_t *pwcs;
-  size_t n;
-  int i;
-
-#ifdef _MB_CAPABLE
-  if (ps == NULL)
-    {
-      _REENT_CHECK_MISC(r);
-      ps = &(_REENT_WCSRTOMBS_STATE(r));
-    }
-#endif
-
-  /* If no dst pointer, treat len as maximum possible value. */
-  if (dst == NULL)
-    len = (size_t)-1;
-
-  n = 0;
-  pwcs = (wchar_t *)(*src);
-
-  while (n < len)
-    {
-      int count = ps->__count;
-      wint_t wch = ps->__value.__wch;
-      int bytes = _wcrtomb_r (r, buff, *pwcs, ps);
-      if (bytes == -1)
-	{
-	  r->_errno = EILSEQ;
-	  ps->__count = 0;
-	  return (size_t)-1;
-	}
-      if (n + bytes <= len)
-	{
-          n += bytes;
-	  if (dst)
-	    {
-	      for (i = 0; i < bytes; ++i)
-	        *ptr++ = buff[i];
-	      ++(*src);
-	    }
-	  if (*pwcs++ == 0x00)
-	    {
-	      if (dst)
-	        *src = NULL;
-	      ps->__count = 0;
-	      return n - 1;
-	    }
-	}
-      else
-	{
-	  /* not enough room, we must back up state to before _wctomb_r call */
-	  ps->__count = count;
-	  ps->__value.__wch = wch;
-          len = 0;
-	}
-    }
-
-  return n;
+  return _wcsnrtombs_r (r, dst, src, (size_t) -1, len, ps);
 } 
 
 #ifndef _REENT_ONLY
@@ -82,6 +21,6 @@ _DEFUN (wcsrtombs, (dst, src, len, ps),
 	size_t len _AND
 	mbstate_t *ps)
 {
-  return _wcsrtombs_r (_REENT, dst, src, len, ps);
+  return _wcsnrtombs_r (_REENT, dst, src, (size_t) -1, len, ps);
 }
 #endif /* !_REENT_ONLY */
Index: libc/stdlib/stdlib.tex
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdlib/stdlib.tex,v
retrieving revision 1.8
diff -u -p -r1.8 stdlib.tex
--- libc/stdlib/stdlib.tex	12 Feb 2009 23:10:01 -0000	1.8
+++ libc/stdlib/stdlib.tex	16 Feb 2009 15:19:50 -0000
@@ -29,6 +29,7 @@ The corresponding declarations are in th
 * malloc::      Allocate and manage memory (malloc, realloc, free)
 * mallinfo::	Get information about allocated memory
 * __malloc_lock::	Lock memory pool for malloc and free
+* mbsnrtowcs::	Convert a character string to a wide-character string
 * mbstowcs::	Minimal multibyte string to wide string converter
 * mblen::	Minimal multibyte length
 * mbtowc::      Minimal multibyte to wide character converter
@@ -40,6 +41,7 @@ The corresponding declarations are in th
 * strtoll::     String to long long
 * strtoul::     String to unsigned long
 * strtoull::    String to unsigned long long
+* wcsnrtombs::	Convert a wide-character string to a character string
 * wcstod::      Wide string to double or float
 * wcstol::      Wide string to long
 * wcstoll::     Wide string to long long
@@ -123,6 +125,9 @@ The corresponding declarations are in th
 @include stdlib/mblen.def
 
 @page
+@include stdlib/mbsnrtowcs.def
+
+@page
 @include stdlib/mbstowcs.def
 
 @page
@@ -153,6 +158,9 @@ The corresponding declarations are in th
 @include stdlib/strtoull.def
 
 @page
+@include stdlib/wcsnrtombs.def
+
+@page
 @include stdlib/wcstod.def
 
 @page


-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]