netatalk  4.5.0
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
util_unistr.c File Reference
#include <arpa/inet.h>
#include <atalk/logger.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <atalk/unicode.h>
#include <atalk/byteorder.h>
#include "precompose.h"

Functions

int strlower_w (ucs2_t *s)
 Convert a string to lower case.
 
int strupper_w (ucs2_t *s)
 Convert a string to upper case.
 
size_t strlen_w (const ucs2_t *src)
 wide strlen()
 
size_t strnlen_w (const ucs2_t *src, size_t max)
 wide strnlen()
 
ucs2_tstrchr_w (const ucs2_t *s, ucs2_t c)
 wide strchr()
 
ucs2_tstrcasechr_w (const ucs2_t *s, ucs2_t c)
 wide strcasechr()
 
ucs2_tstrcasechr_sp (const ucs2_t *s, uint32_t c_sp)
 sp strcasechr()
 
int strcmp_w (const ucs2_t *a, const ucs2_t *b)
 wide strcmp()
 
int strncmp_w (const ucs2_t *a, const ucs2_t *b, size_t len)
 wide strncmp()
 
ucs2_tstrstr_w (const ucs2_t *s, const ucs2_t *ins)
 wide strstr()
 
ucs2_tstrcasestr_w (const ucs2_t *s, const ucs2_t *ins)
 wide strcasestr()
 
int strcasecmp_w (const ucs2_t *a, const ucs2_t *b)
 wide strcasecmp()
 
int strncasecmp_w (const ucs2_t *a, const ucs2_t *b, size_t len)
 wide strncasecmp()
 
ucs2_tstrndup_w (const ucs2_t *src, size_t len)
 wide strndup()
 
ucs2_tstrdup_w (const ucs2_t *src)
 wide strdup()
 
static ucs2_t do_precomposition (unsigned int base, unsigned int comb)
 
static uint32_t do_precomposition_sp (unsigned int base_sp, unsigned int comb_sp)
 
static uint32_t do_decomposition (ucs2_t base)
 
static uint64_t do_decomposition_sp (unsigned int base_sp)
 
size_t precompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen)
 pre|decomposition
 
size_t decompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen)
 

Function Documentation

◆ decompose_w()

size_t decompose_w ( ucs2_t name,
size_t  inplen,
ucs2_t comp,
size_t *  outlen 
)

◆ do_decomposition()

static uint32_t do_decomposition ( ucs2_t  base)
static

◆ do_decomposition_sp()

static uint64_t do_decomposition_sp ( unsigned int  base_sp)
static

◆ do_precomposition()

static ucs2_t do_precomposition ( unsigned int  base,
unsigned int  comb 
)
static

binary search for pre|decomposition

◆ do_precomposition_sp()

static uint32_t do_precomposition_sp ( unsigned int  base_sp,
unsigned int  comb_sp 
)
static

◆ precompose_w()

size_t precompose_w ( ucs2_t name,
size_t  inplen,
ucs2_t comp,
size_t *  outlen 
)

pre|decomposition

we can't use static, this stuff needs to be reentrant static char comp[MAXPATHLEN +1];

We don't implement Singleton and Canonical Ordering. We ignore CompositionExclusions.txt because they cause the problem of the roundtrip such as Dancing Icon.

exclude U2000-U2FFF, UFE30-UFE4F and U2F800-U2FA1F ranges in precompose.h from composition according to AFP 3.x spec

◆ strcasechr_sp()

ucs2_t * strcasechr_sp ( const ucs2_t s,
uint32_t  c_sp 
)

sp strcasechr()

Note
separately process BMP and surrogate pair

◆ strcasechr_w()

ucs2_t * strcasechr_w ( const ucs2_t s,
ucs2_t  c 
)

wide strcasechr()

Note
separately process BMP and surrogate pair

◆ strcasecmp_w()

int strcasecmp_w ( const ucs2_t a,
const ucs2_t b 
)

wide strcasecmp()

case insensitive string comparison

Note
surrogate pair support

◆ strcasestr_w()

ucs2_t * strcasestr_w ( const ucs2_t s,
const ucs2_t ins 
)

wide strcasestr()

Note
surrogate pair support

◆ strchr_w()

ucs2_t * strchr_w ( const ucs2_t s,
ucs2_t  c 
)

wide strchr()

Note
hi and lo of surrogate pair are separately processed.

◆ strcmp_w()

int strcmp_w ( const ucs2_t a,
const ucs2_t b 
)

wide strcmp()

Note
no problem of surrogate pair

◆ strdup_w()

ucs2_t * strdup_w ( const ucs2_t src)

wide strdup()

duplicate string

Note
no problem of surrogate pair

◆ strlen_w()

size_t strlen_w ( const ucs2_t src)

wide strlen()

Count the number of characters in a UTF-16 string.

Note
one surrogate pair is two characters.

◆ strlower_w()

int strlower_w ( ucs2_t s)

Convert a string to lower case.

Returns
True if any char is converted
Note
surrogate pair support

◆ strncasecmp_w()

int strncasecmp_w ( const ucs2_t a,
const ucs2_t b,
size_t  len 
)

wide strncasecmp()

case insensitive string comparison, length limited

Note
compare up to 'len+1' if 'len' isolate surrogate pair

◆ strncmp_w()

int strncmp_w ( const ucs2_t a,
const ucs2_t b,
size_t  len 
)

wide strncmp()

Note
no problem of surrogate pair

◆ strndup_w()

ucs2_t * strndup_w ( const ucs2_t src,
size_t  len 
)

wide strndup()

duplicate string

Note
not check isolation of surrogate pair
if len == 0 then duplicate the whole string

◆ strnlen_w()

size_t strnlen_w ( const ucs2_t src,
size_t  max 
)

wide strnlen()

Count up to max number of characters in a UTF-16 string.

Note
one surrogate pair is two characters.

◆ strstr_w()

ucs2_t * strstr_w ( const ucs2_t s,
const ucs2_t ins 
)

wide strstr()

Note
no problem of surrogate pair

◆ strupper_w()

int strupper_w ( ucs2_t s)

Convert a string to upper case.

Returns
True if any char is converted
Note
surrogate pair support