Subversion Repositories Kolibri OS

Rev

Rev 4872 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include <reent.h>
  2. #include <newlib.h>
  3. #include <wchar.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <errno.h>
  7. #include "local.h"
  8.  
  9. size_t
  10. _DEFUN (_wcrtomb_r, (ptr, s, wc, ps),
  11.         struct _reent *ptr _AND
  12.         char *s _AND
  13.         wchar_t wc _AND
  14.         mbstate_t *ps)
  15. {
  16.   int retval = 0;
  17.   char buf[10];
  18.  
  19. #ifdef _MB_CAPABLE
  20.   if (ps == NULL)
  21.     {
  22.       _REENT_CHECK_MISC(ptr);
  23.       ps = &(_REENT_WCRTOMB_STATE(ptr));
  24.     }
  25. #endif
  26.  
  27.   if (s == NULL)
  28.     retval = __wctomb (ptr, buf, L'\0', __locale_charset (), ps);
  29.   else
  30.     retval = __wctomb (ptr, s, wc, __locale_charset (), ps);
  31.  
  32.   if (retval == -1)
  33.     {
  34.       ps->__count = 0;
  35.       ptr->_errno = EILSEQ;
  36.       return (size_t)(-1);
  37.     }
  38.   else
  39.     return (size_t)retval;
  40. }
  41.  
  42. #ifndef _REENT_ONLY
  43. size_t
  44. _DEFUN (wcrtomb, (s, wc, ps),
  45.         char *s _AND
  46.         wchar_t wc _AND
  47.         mbstate_t *ps)
  48. {
  49. #if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
  50.   return _wcrtomb_r (_REENT, s, wc, ps);
  51. #else
  52.   int retval = 0;
  53.   char buf[10];
  54.  
  55. #ifdef _MB_CAPABLE
  56.   if (ps == NULL)
  57.     {
  58.       _REENT_CHECK_MISC(_REENT);
  59.       ps = &(_REENT_WCRTOMB_STATE(_REENT));
  60.     }
  61. #endif
  62.  
  63.   if (s == NULL)
  64.     retval = __wctomb (_REENT, buf, L'\0', __locale_charset (), ps);
  65.   else
  66.     retval = __wctomb (_REENT, s, wc, __locale_charset (), ps);
  67.  
  68.   if (retval == -1)
  69.     {
  70.       ps->__count = 0;
  71.       _REENT->_errno = EILSEQ;
  72.       return (size_t)(-1);
  73.     }
  74.   else
  75.     return (size_t)retval;
  76. #endif /* not PREFER_SIZE_OVER_SPEED */
  77. }
  78. #endif /* !_REENT_ONLY */
  79.