uriparser 0.9.8
Loading...
Searching...
No Matches
Data Structures | Typedefs | Enumerations | Functions
UriBase.h File Reference

Data Structures

struct  UriIp4Struct
 
struct  UriIp6Struct
 
struct  UriMemoryManagerStruct
 

Typedefs

typedef int UriBool
 
typedef struct UriIp4Struct UriIp4
 
typedef struct UriIp6Struct UriIp6
 
typedef void *(* UriFuncMalloc) (struct UriMemoryManagerStruct *, size_t)
 
typedef void *(* UriFuncCalloc) (struct UriMemoryManagerStruct *, size_t, size_t)
 
typedef void *(* UriFuncRealloc) (struct UriMemoryManagerStruct *, void *, size_t)
 
typedef void *(* UriFuncReallocarray) (struct UriMemoryManagerStruct *, void *, size_t, size_t)
 
typedef void(* UriFuncFree) (struct UriMemoryManagerStruct *, void *)
 
typedef struct UriMemoryManagerStruct UriMemoryManager
 
typedef enum UriBreakConversionEnum UriBreakConversion
 
typedef enum UriNormalizationMaskEnum UriNormalizationMask
 
typedef enum UriResolutionOptionsEnum UriResolutionOptions
 

Enumerations

enum  UriBreakConversionEnum {
  URI_BR_TO_LF , URI_BR_TO_CRLF , URI_BR_TO_CR , URI_BR_TO_UNIX = URI_BR_TO_LF ,
  URI_BR_TO_WINDOWS = URI_BR_TO_CRLF , URI_BR_TO_MAC = URI_BR_TO_CR , URI_BR_DONT_TOUCH
}
 
enum  UriNormalizationMaskEnum {
  URI_NORMALIZED = 0 , URI_NORMALIZE_SCHEME = 1 << 0 , URI_NORMALIZE_USER_INFO = 1 << 1 , URI_NORMALIZE_HOST = 1 << 2 ,
  URI_NORMALIZE_PATH = 1 << 3 , URI_NORMALIZE_QUERY = 1 << 4 , URI_NORMALIZE_FRAGMENT = 1 << 5
}
 
enum  UriResolutionOptionsEnum { URI_RESOLVE_STRICTLY = 0 , URI_RESOLVE_IDENTICAL_SCHEME_COMPAT = 1 << 0 }
 

Functions

int uriCompleteMemoryManager (UriMemoryManager *memory, UriMemoryManager *backend)
 
void * uriEmulateCalloc (UriMemoryManager *memory, size_t nmemb, size_t size)
 
void * uriEmulateReallocarray (UriMemoryManager *memory, void *ptr, size_t nmemb, size_t size)
 
int uriTestMemoryManager (UriMemoryManager *memory)
 

Detailed Description

Holds definitions independent of the encoding pass.

Typedef Documentation

◆ UriBool

typedef int UriBool

Boolean type

◆ UriBreakConversion

Specifies a line break conversion mode.

"

Specifies a line break conversion mode. "

◆ UriFuncCalloc

typedef void *(* UriFuncCalloc) (struct UriMemoryManagerStruct *, size_t, size_t)

Function signature that custom calloc(3) functions must conform to

Since
0.9.0

◆ UriFuncFree

typedef void(* UriFuncFree) (struct UriMemoryManagerStruct *, void *)

Function signature that custom free(3) functions must conform to

Since
0.9.0

◆ UriFuncMalloc

typedef void *(* UriFuncMalloc) (struct UriMemoryManagerStruct *, size_t)

Function signature that custom malloc(3) functions must conform to

Since
0.9.0

◆ UriFuncRealloc

typedef void *(* UriFuncRealloc) (struct UriMemoryManagerStruct *, void *, size_t)

Function signature that custom realloc(3) functions must conform to

Since
0.9.0

◆ UriFuncReallocarray

typedef void *(* UriFuncReallocarray) (struct UriMemoryManagerStruct *, void *, size_t, size_t)

Function signature that custom reallocarray(3) functions must conform to

Since
0.9.0

◆ UriIp4

typedef struct UriIp4Struct UriIp4

Holds an IPv4 address.

"

Holds an IPv4 address. "

◆ UriIp6

typedef struct UriIp6Struct UriIp6

Holds an IPv6 address.

"

Holds an IPv6 address. "

◆ UriMemoryManager

Class-like interface of custom memory managers

See also
uriCompleteMemoryManager
uriEmulateCalloc
uriEmulateReallocarray
uriTestMemoryManager
Since
0.9.0

"

Class-like interface of custom memory managers

See also
uriCompleteMemoryManager
uriEmulateCalloc
uriEmulateReallocarray
uriTestMemoryManager
Since
0.9.0 "

◆ UriNormalizationMask

Specifies which component of a URI has to be normalized.

"

Specifies which component of a URI has to be normalized. "

◆ UriResolutionOptions

Specifies how to resolve URI references.

"

Specifies how to resolve URI references. "

Enumeration Type Documentation

◆ UriBreakConversionEnum

Specifies a line break conversion mode.

Enumerator
URI_BR_TO_LF 

Convert to Unix line breaks ("\\x0a")

URI_BR_TO_CRLF 

Convert to Windows line breaks ("\\x0d\\x0a")

URI_BR_TO_CR 

Convert to Macintosh line breaks ("\\x0d")

URI_BR_TO_UNIX 

Convert to Unix line breaks ("\\x0a")

URI_BR_TO_WINDOWS 

Convert to Windows line breaks ("\\x0d\\x0a")

URI_BR_TO_MAC 

Convert to Macintosh line breaks ("\\x0d")

URI_BR_DONT_TOUCH 

Copy line breaks unmodified

◆ UriNormalizationMaskEnum

Specifies which component of a URI has to be normalized.

Enumerator
URI_NORMALIZED 

Do not normalize anything

URI_NORMALIZE_SCHEME 

Normalize scheme (fix uppercase letters)

URI_NORMALIZE_USER_INFO 

Normalize user info (fix uppercase percent-encodings)

URI_NORMALIZE_HOST 

Normalize host (fix uppercase letters)

URI_NORMALIZE_PATH 

Normalize path (fix uppercase percent-encodings and redundant dot segments)

URI_NORMALIZE_QUERY 

Normalize query (fix uppercase percent-encodings)

URI_NORMALIZE_FRAGMENT 

Normalize fragment (fix uppercase percent-encodings)

◆ UriResolutionOptionsEnum

Specifies how to resolve URI references.

Enumerator
URI_RESOLVE_STRICTLY 

Full RFC conformance

URI_RESOLVE_IDENTICAL_SCHEME_COMPAT 

Treat URI to resolve with identical scheme as having no scheme

Function Documentation

◆ uriCompleteMemoryManager()

int uriCompleteMemoryManager ( UriMemoryManager * memory,
UriMemoryManager * backend )

Wraps a memory manager backend that only provides malloc and free to make a complete memory manager ready to be used.

The core feature of this wrapper is that you don't need to implement realloc if you don't want to. The wrapped memory manager uses backend->malloc, memcpy, and backend->free and soieof(size_t) extra bytes per allocation to emulate fallback realloc for you.

memory->calloc is uriEmulateCalloc. memory->free uses backend->free and handles the size header. memory->malloc uses backend->malloc and adds a size header. memory->realloc uses memory->malloc, memcpy, and memory->free and reads the size header. memory->reallocarray is uriEmulateReallocarray.

The internal workings behind memory->free, memory->malloc, and memory->realloc may change so the functions exposed by these function pointer sshould be consided internal and not public API.

Parameters
memoryOUT: Where to write the wrapped memory manager to
backendIN: Memory manager to use as a backend
Returns
Error code or 0 on success
See also
uriEmulateCalloc
uriEmulateReallocarray
UriMemoryManager
Since
0.9.0

◆ uriEmulateCalloc()

void * uriEmulateCalloc ( UriMemoryManager * memory,
size_t nmemb,
size_t size )

Offers emulation of calloc(3) based on memory->malloc and memset. See "man 3 calloc" as well.

Parameters
memoryIN: Memory manager to use, should not be NULL
nmembIN: Number of elements to allocate
sizeIN: Size in bytes per element
Returns
Pointer to allocated memory or NULL
See also
uriCompleteMemoryManager
uriEmulateReallocarray
UriMemoryManager
Since
0.9.0

◆ uriEmulateReallocarray()

void * uriEmulateReallocarray ( UriMemoryManager * memory,
void * ptr,
size_t nmemb,
size_t size )

Offers emulation of reallocarray(3) based on memory->realloc. See "man 3 reallocarray" as well.

Parameters
memoryIN: Memory manager to use, should not be NULL
ptrIN: Pointer allocated using memory->malloc/... or NULL
nmembIN: Number of elements to allocate
sizeIN: Size in bytes per element
Returns
Pointer to allocated memory or NULL
See also
uriCompleteMemoryManager
uriEmulateCalloc
UriMemoryManager
Since
0.9.0

◆ uriTestMemoryManager()

int uriTestMemoryManager ( UriMemoryManager * memory)

Run multiple tests against a given memory manager. For example, one test

  1. allocates a small amount of memory,
  2. writes some magic bytes to it,
  3. reallocates it,
  4. checks that previous values are still present,
  5. and frees that memory.

It is recommended to compile with AddressSanitizer enabled to take full advantage of uriTestMemoryManager.

Parameters
memoryIN: Memory manager to use, should not be NULL
Returns
Error code or 0 on success
See also
uriEmulateCalloc
uriEmulateReallocarray
UriMemoryManager
Since
0.9.0