From 09042fd20a1f0c0e60cf88c126d1e5b541db10e9 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Sat, 8 Sep 2012 19:42:27 +0100 Subject: [PATCH] Added a few extra lang code functions. --- src/lang_codes.c | 24 +++++++++++++++++------- src/lang_codes.h | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/lang_codes.c b/src/lang_codes.c index 02ed3809..e13d5dfc 100644 --- a/src/lang_codes.c +++ b/src/lang_codes.c @@ -493,12 +493,12 @@ const lang_code_t lang_codes[] = { * Functions * *************************************************************************/ -const char *lang_code_get2 ( const char *code, size_t len ) +static const lang_code_t *_lang_code_get ( const char *code, size_t len ) { int i; char tmp[4]; - if (code && *code) { + if (code && *code && len) { /* Extract the code (lowercase) */ i = 0; @@ -515,19 +515,29 @@ const char *lang_code_get2 ( const char *code, size_t len ) if (i) { const lang_code_t *c = lang_codes; while (c->code2b) { - if ( !strcmp(tmp, c->code2b) ) return c->code2b; - if ( c->code1 && !strcmp(tmp, c->code1) ) return c->code2b; - if ( c->code2t && !strcmp(tmp, c->code2t) ) return c->code2b; + if ( !strcmp(tmp, c->code2b) ) return c; + if ( c->code1 && !strcmp(tmp, c->code1) ) return c; + if ( c->code2t && !strcmp(tmp, c->code2t) ) return c; c++; } } } - return lang_codes[0].code2b; + return &lang_codes[0]; } const char *lang_code_get ( const char *code ) { - return lang_code_get2(code, strlen(code)); + return lang_code_get3(code)->code2b; +} + +const char *lang_code_get2 ( const char *code, size_t len ) +{ + return _lang_code_get(code, len)->code2b; +} + +const lang_code_t *lang_code_get3 ( const char *code ) +{ + return _lang_code_get(code, strlen(code ?: "")); } const char **lang_code_split ( const char *codes ) diff --git a/src/lang_codes.h b/src/lang_codes.h index fccb7cc3..7bfaf3f9 100644 --- a/src/lang_codes.h +++ b/src/lang_codes.h @@ -32,6 +32,7 @@ extern const lang_code_t lang_codes[]; /* Convert code to preferred internal code */ const char *lang_code_get ( const char *code ); const char *lang_code_get2 ( const char *code, size_t len ); +const lang_code_t *lang_code_get3 ( const char *code ); /* Split list of codes as per HTTP Language-Accept spec */ const char **lang_code_split ( const char *codes );