netatalk  4.4.0
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
utf8.c File Reference
#include <arpa/inet.h>
#include <errno.h>
#include <stdlib.h>
#include <atalk/byteorder.h>
#include <atalk/logger.h>
#include <atalk/unicode.h>

Macros

#define GETUCVAL(utf8_trailbyte, shift)
#define GETUTF8TRAILBYTE(uc, shift)

Functions

static size_t utf8_pull (void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
 Convert from UTF-8 to UTF-16.
static size_t utf8_push (void *, char **, size_t *, char **, size_t *)

Variables

struct charset_functions charset_utf8
struct charset_functions charset_utf8_mac

Detailed Description

See also
The Unicode Standard Version 6.2 – Core Specification http://www.unicode.org/versions/Unicode6.2.0/ch03.pdf
Scalar Value First Second Third Fourth
00000000 0xxxxxxx 0xxxxxxx
00000yyy yyxxxxxx 110yyyyy 10xxxxxx
zzzzyyyy yyxxxxxx 1110zzzz 10yyyyyy 10xxxxxx
000uuuuu zzzzyyyy yyxxxxxx 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx

Macro Definition Documentation

◆ GETUCVAL

#define GETUCVAL ( utf8_trailbyte,
shift )
Value:
((unsigned int) (( utf8_trailbyte & 0x3F) << shift))

Given a trailing UTF-8 byte, get the contribution from it to the Unicode scalar value for a particular bit shift amount

◆ GETUTF8TRAILBYTE

#define GETUTF8TRAILBYTE ( uc,
shift )
Value:
((char)( 0x80 | ((uc >> shift) & 0x3F) ) )

Given a unicode scalar, get a trail UTF-8 byte for a particular bit shift amount

Function Documentation

◆ utf8_pull()

size_t utf8_pull ( void * cd,
char ** inbuf,
size_t * inbytesleft,
char ** outbuf,
size_t * outbytesleft )
static

Convert from UTF-8 to UTF-16.

Code Points First Second Third Fourth
U+0000..U+007F 00..7F
U+0080..U+07FF C2..DF 80..BF
U+0800..U+0FFF E0 A0..BF 80..BF
U+1000..U+CFFF E1..EC 80..BF 80..BF
U+D000..U+D7FF ED 80..9F 80..BF
U+E000..U+FFFF EE..EF 80..BF 80..BF
U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
U+100000..U+10FFFF F4 80..8F 80..BF 80..BF

◆ utf8_push()

size_t utf8_push ( void * cd,
char ** inbuf,
size_t * inbytesleft,
char ** outbuf,
size_t * outbytesleft )
static

Convert from UTF-16 to UTF-8

Variable Documentation

◆ charset_utf8

struct charset_functions charset_utf8
Initial value:
= {
"UTF8",
0x08000103,
NULL,
NULL,
NULL
}
static size_t utf8_pull(void *, char **, size_t *, char **, size_t *)
Convert from UTF-8 to UTF-16.
Definition libatalk/unicode/Utf8.c:103
static size_t utf8_push(void *, char **, size_t *, char **, size_t *)
Definition libatalk/unicode/Utf8.c:227
#define CHARSET_PRECOMPOSED
Definition unicode.h:30
#define CHARSET_VOLUME
Definition unicode.h:29
#define CHARSET_MULTIBYTE
Definition unicode.h:32

◆ charset_utf8_mac

struct charset_functions charset_utf8_mac
Initial value:
= {
"UTF8-MAC",
0x08000103,
NULL,
NULL,
NULL
}
#define CHARSET_DECOMPOSED
Definition unicode.h:31
#define CHARSET_CLIENT
Definition unicode.h:28