first steps towards enabling support for wide chars in our libroot: reverted mbrtowc.c to glibc 2.2.5, added necessary iconv support to let it compile, added dl*** wrappers for needed glibc functions. Not sure it's the correct path, but let's try, at least.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24150 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2008-02-27 15:53:54 +00:00
parent 8ec7fd3156
commit 4454eadeb4
3 changed files with 29 additions and 23 deletions
+22
View File
@@ -68,3 +68,25 @@ dlerror(void)
return NULL;
}
// __libc_dl*** wrappers
// We use a mixed glibc / bsd libc, and glibc wants these
void *
__libc_dlopen(const char *name)
{
return dlopen(name, 0);
}
void *
__libc_dlsym(void *handle, const char *name)
{
return dlsym(handle, name);
}
void
__libc_dlclose(void *handle)
{
dlclose(handle);
}
@@ -20,4 +20,5 @@ MergeObject posix_gnu_iconv.o :
gconv_db.c
# gconv_dl.c
gconv_simple.c
gconv_trans.c
;
@@ -1,4 +1,4 @@
/* Copyright (C) 1996,1997,1998,1999,2000,2002 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <[email protected]>, 1996.
@@ -21,7 +21,7 @@
#include <errno.h>
#include <gconv.h>
#include <wchar.h>
//#include <wcsmbsload.h>
#include <wcsmbsload.h>
#include <assert.h>
@@ -35,19 +35,6 @@ static mbstate_t state;
size_t
__mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
{
// ToDo: this is a dummy implementation to get it going
if (s == NULL)
n = 1, s = "";
if (pwc == NULL || n == 0)
return 0;
if (ps == NULL)
ps = &state;
pwc[0] = s[0];
return s[0] == 0 ? 0 : 1;
#if 0
wchar_t buf[1];
struct __gconv_step_data data;
int status;
@@ -55,7 +42,6 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
size_t dummy;
const unsigned char *inbuf;
char *outbuf = (char *) (pwc ?: buf);
const struct gconv_fcts *fcts;
/* Set information for this step. */
data.__invocation_counter = 0;
@@ -77,13 +63,13 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
data.__outbuf = outbuf;
data.__outbufend = outbuf + sizeof (wchar_t);
/* Get the conversion functions. */
fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
/* Make sure we use the correct function. */
update_conversion_ptrs ();
/* Do a normal conversion. */
inbuf = (const unsigned char *) s;
status = DL_CALL_FCT (fcts->towc->__fct,
(fcts->towc, &data, &inbuf, inbuf + n,
status = DL_CALL_FCT (__wcsmbs_gconv_fcts.towc->__fct,
(__wcsmbs_gconv_fcts.towc, &data, &inbuf, inbuf + n,
NULL, &dummy, 0, 1));
/* There must not be any problems with the conversion but illegal input
@@ -117,8 +103,5 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
}
return result;
#endif
}
libc_hidden_def (__mbrtowc)
weak_alias (__mbrtowc, mbrtowc)
libc_hidden_weak (mbrtowc)