diff options
Diffstat (limited to 'wcsmbs')
-rw-r--r-- | wcsmbs/mbrtowc.c | 5 | ||||
-rw-r--r-- | wcsmbs/mbsinit.c | 3 | ||||
-rw-r--r-- | wcsmbs/mbsrtowcs.c | 6 | ||||
-rw-r--r-- | wcsmbs/wcrtomb.c | 10 | ||||
-rw-r--r-- | wcsmbs/wcsrtombs.c | 5 |
5 files changed, 26 insertions, 3 deletions
diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c index 17083196bd..2c4b0779da 100644 --- a/wcsmbs/mbrtowc.c +++ b/wcsmbs/mbrtowc.c @@ -20,6 +20,8 @@ Boston, MA 02111-1307, USA. */ #include <wchar.h> +static mbstate_t internal; + size_t mbrtowc (pwc, s, n, ps) wchar_t *pwc; @@ -29,6 +31,9 @@ mbrtowc (pwc, s, n, ps) { wchar_t to_wide; + if (ps == NULL) + ps = &internal; + /*************************************************************\ |* This is no complete implementation. While the multi-byte *| |* character handling is not finished this will do. *| diff --git a/wcsmbs/mbsinit.c b/wcsmbs/mbsinit.c index d9f01256d5..efbfd09347 100644 --- a/wcsmbs/mbsinit.c +++ b/wcsmbs/mbsinit.c @@ -17,6 +17,7 @@ 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 <string.h> #include <wchar.h> @@ -29,5 +30,5 @@ mbsinit (ps) |* character handling is not finished this will do. *| \*************************************************************/ - return *ps == 0; + return ps == NULL || *ps == 0; } diff --git a/wcsmbs/mbsrtowcs.c b/wcsmbs/mbsrtowcs.c index cb87938e5d..dc026b7252 100644 --- a/wcsmbs/mbsrtowcs.c +++ b/wcsmbs/mbsrtowcs.c @@ -20,6 +20,8 @@ Boston, MA 02111-1307, USA. */ #include <wchar.h> +static mbstate_t internal; + size_t mbsrtowcs (dst, src, len, ps) wchar_t *dst; @@ -28,6 +30,10 @@ mbsrtowcs (dst, src, len, ps) mbstate_t *ps; { size_t result = 0; + + if (ps == NULL) + ps = &internal; + /*************************************************************\ |* This is no complete implementation. While the multi-byte *| |* character handling is not finished this will do. *| diff --git a/wcsmbs/wcrtomb.c b/wcsmbs/wcrtomb.c index 43a2162500..2703e88a36 100644 --- a/wcsmbs/wcrtomb.c +++ b/wcsmbs/wcrtomb.c @@ -24,19 +24,25 @@ Boston, MA 02111-1307, USA. */ #define EILSEQ EINVAL #endif + +static mbstate_t internal; + size_t wcrtomb (s, wc, ps) char *s; wchar_t wc; mbstate_t *ps; { + char fake[1]; + + if (ps == NULL) + ps = internal; + /*************************************************************\ |* This is no complete implementation. While the multi-byte *| |* character handling is not finished this will do. *| \*************************************************************/ - char fake[1]; - if (s == NULL) { s = fake; diff --git a/wcsmbs/wcsrtombs.c b/wcsmbs/wcsrtombs.c index 487237fcad..9f1000937b 100644 --- a/wcsmbs/wcsrtombs.c +++ b/wcsmbs/wcsrtombs.c @@ -25,6 +25,8 @@ Boston, MA 02111-1307, USA. */ #endif +static mbstate_t internal; + size_t wcsrtombs (dst, src, len, ps) char *dst; @@ -34,6 +36,9 @@ wcsrtombs (dst, src, len, ps) { size_t result = 0; + if (ps == NULL) + ps = &internal; + /*************************************************************\ |* This is no complete implementation. While the multi-byte *| |* character handling is not finished this will do. *| |