diff options
author | Xavier Roche <xroche@users.noreply.github.com> | 2013-05-21 17:53:05 +0000 |
---|---|---|
committer | Xavier Roche <xroche@users.noreply.github.com> | 2013-05-21 17:53:05 +0000 |
commit | 03d57e2e73891f28f09a721d5d58108912d7157f (patch) | |
tree | 79fcd90600b0ebee8956041d4f9bbbd1af3f6c93 /src | |
parent | 362ea71c8fc91d877ea790310dd61118ffd875f2 (diff) |
Added hts_isStringIDNA()
Diffstat (limited to 'src')
-rw-r--r-- | src/htscharset.c | 16 | ||||
-rw-r--r-- | src/htscharset.h | 5 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/htscharset.c b/src/htscharset.c index a65e299..54465ae 100644 --- a/src/htscharset.c +++ b/src/htscharset.c @@ -970,6 +970,22 @@ char *hts_convertStringUTF8ToIDNA(const char *s, size_t size) { return dest; } +int hts_isStringIDNA(const char *s, size_t size) { + size_t i, startSeg; + for(i = startSeg = 0 ; i <= size ; i++) { + const unsigned char c = i < size ? s[i] : 0; + if (c == 0 || c == '.' || c == ':' || c == '/' || c == '?') { + const size_t segSize = i - startSeg; + /* IDNA segment ? */ + if (segSize > 4 + && strncasecmp(&s[startSeg], "xn--", 4) == 0) { + return 1; + } + } + } + return 0; +} + char *hts_convertStringIDNAToUTF8(const char *s, size_t size) { char *dest = NULL; size_t capa = 0, destSize = 0; diff --git a/src/htscharset.h b/src/htscharset.h index 5851ba3..c992d23 100644 --- a/src/htscharset.h +++ b/src/htscharset.h @@ -69,6 +69,11 @@ extern char *hts_convertStringUTF8ToIDNA(const char *s, size_t size); extern char *hts_convertStringIDNAToUTF8(const char *s, size_t size); /** + * Has the given string any IDNA segments ? + **/ +extern int hts_isStringIDNA(const char *s, size_t size); + +/** * Extract the charset from the HTML buffer "html" **/ extern char *hts_getCharsetFromMeta(const char *html, size_t size); |