[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [tyndur-devel] [PATCH] libc: wctype_t, iswctype, btowc
On Mon, Aug 17, 2009 at 02:50:03AM +0200, hartmut@xxxxxxxxxx wrote:
> From: Alexander Hartmut Kluth <hartmut@xxxxxxxxxx>
>
> wctype_t und Konsorten implementiert
>
> + Typ wctype_t hinzugefuegt
> + Funktion iswctype hinzugefuegt
> + Funktion btowc als Stub hinzugefuegt
>
> Signed-off-by: Alexander Hartmut Kluth <hartmut@xxxxxxxxxx>
> ---
> src/include/wctype.h | 7 +++
> src/modules/include/wchar.h | 7 +++
> src/modules/lib/stdlibc/wctype.c | 77 ++++++++++++++++++++++++++++++++++++++
> 3 files changed, 91 insertions(+), 0 deletions(-)
>
> diff --git a/src/include/wctype.h b/src/include/wctype.h
> index f273a71..30e47c6 100644
> --- a/src/include/wctype.h
> +++ b/src/include/wctype.h
> @@ -120,6 +120,12 @@ int iswprint(wint_t wc);
> int iswcntrl(wint_t wc);
>
>
> +int iswgraph(wint_t c);
> +
> +
> +int iswxdigit(wint_t c);
Ich habe den Eindruck, da fehlen Kommentare.
> +
> +
> /**
> * Breites Zeichen in einen Grossbuchstaben umwandeln, falls es sich um einen
> * Kleinbuchstaben handelt. Sonst wird das Zeichen unveraendert zurueckgegeben.
> @@ -139,5 +145,6 @@ wint_t towupper(wint_t wc);
> */
> wint_t towlower(wint_t wc);
>
> +
> #endif /* ndef WCTYPE_H */
>
Eine zusätzliche Leerzeile ist besonders nützlich ;-)
> diff --git a/src/modules/include/wchar.h b/src/modules/include/wchar.h
> index 3870f9d..d39c632 100644
> --- a/src/modules/include/wchar.h
> +++ b/src/modules/include/wchar.h
> @@ -40,6 +40,13 @@
> */
> typedef wchar_t wint_t;
>
> +
> +/**
> + * wctype_t ist ein Funktionspointer
Das sehe ich. Aber wofür benutzt man diesen Typ?
> + */
> +typedef int (*wctype_t)(wint_t);
> +
> +
> /**
> * Repraesentiert den internen Shift-Status einer Funktion, brauchen wir mit
> * UTF-8 nicht.
> diff --git a/src/modules/lib/stdlibc/wctype.c b/src/modules/lib/stdlibc/wctype.c
> index b3c174c..b3c689c 100644
> --- a/src/modules/lib/stdlibc/wctype.c
> +++ b/src/modules/lib/stdlibc/wctype.c
> @@ -27,6 +27,81 @@
> */
>
> #include <wctype.h>
> +#include <string.h>
> +
> +
> +struct { const char* name; wctype_t func; } types[] = {
> + { "alnum", iswalnum },
> + { "alpha", iswalpha },
> + { "blank", iswblank },
> + { "cntrl", iswcntrl },
> + { "digit", iswdigit },
> + { "graph", iswgraph },
> + { "lower", iswlower },
> + { "print", iswprint },
> + { "punct", iswpunct },
> + { "space", iswspace },
> + { "upper", iswupper },
> + { "xdigit", iswxdigit },
> +};
Sollte static sein.
> +
> +
> +/**
> + * Erstellt ein wctype-Objekt
> + *
> + * @param type Typ des zu erstellenden Objekts
> + *
> + * @return Das Objekt, ansonsten (wctype_t)0
> + */
> +wctype_t wctype(const char* name)
> +{
> + int i;
> +
> + for (i = 0; i < sizeof(types) / sizeof(types[0]); ++i)
> + {
> + if (!strcmp(name,types[i].name)) {
> + return types[i].func;
> + }
> + }
> +
> + return (wctype_t)0;
> +}
> +
> +
> +/**
> + * Pr??ft, ob der als Parameter ??bergebene Typ auch vom Typ
Irgendwas macht regelmäßig deine Umlaute kaputt.
> + * wctype_t ist
> + *
> + * @param wc ??bergebener Typ
> + * @param type Typklasse
> + *
> + * @return 0, wenn die Klasse nicht vorhanden ist, ansonsten den
> + * Funktionspointer
> + */
> +int iswctype(wint_t wc, wctype_t type)
> +{
> + return type(wc);
> +}
> +
> +
> +/// TODO
> +wint_t btowc(wint_t c)
> +{
> + return 0;
> +}
Hm, wofür ist die Funktion gut? Sie ist hier als Stub vorhanden, kommt
aber nichtmal in der Headerdatei vor.
> +
> +
> +int iswgraph(wint_t c)
> +{
> + return 0;
> +}
> +
> +
> +int iswxdigit(wint_t c)
> +{
> + return 0;
> +}
> +
Ich glaube ja ehrlichgesagt nicht, dass die Funktionen so schwer zu
implementieren sind, dass man sie als Stubs lassen muss. Aber wenn sie
schon Stubs bleiben, sollten sie in ein #ifndef CONFIG_LIBC_NO_STUBS