17#ifndef SERD_INTERNAL_H
18#define SERD_INTERNAL_H
20#define _POSIX_C_SOURCE 200809L
29#include "serd_config.h"
31#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO)
35#define SERD_PAGE_SIZE 4096
38# define MIN(a, b) (((a) < (b)) ? (a) : (b))
46 FILE* fd = fopen((
const char*)path,
mode);
48 if (errno != ENOTDIR) fprintf(stderr,
"Error opening file %s (%s)\n", path, strerror(errno));
51#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO)
52 posix_fadvise(fileno(fd), 0, 0, POSIX_FADV_SEQUENTIAL);
60#ifdef HAVE_POSIX_MEMALIGN
63 return ret ?
NULL : ptr;
79#define SERD_STACK_BOTTOM sizeof(void*)
109 const size_t new_size = stack->
size + n_bytes;
115 stack->
size = new_size;
123 stack->
size -= n_bytes;
139 stack->
buf[stack->
size - 1] = pad;
183 if (bsink->
size > 0) {
200 const size_t orig_len = len;
203 const size_t n =
MIN(space, len);
247 case ' ':
case '\f':
case '\n':
case '\r':
case '\t':
case '\v':
263 return is_alpha(path[0]) && (path[1] ==
':' || path[1] ==
'|')
264 && (path[2] ==
'/' || path[2] ==
'\\');
272 return a->len ==
b->len
273 && !strncmp((
const char*)
a->buf, (
const char*)
b->buf,
a->len);
279 return uri->path_base.len +
uri->path.len;
286 return uri->path_base.buf[
i];
288 return uri->path.buf[
i -
uri->path_base.len];
305 for (
size_t i = 0;
i < path_len &&
i < root_len; ++
i) {
323 error_sink(handle,
e);
325 fprintf(stderr,
"error: %s:%u:%u: ",
e->filename,
e->line,
e->col);
326 vfprintf(stderr,
e->fmt, *
e->args);
uint8_t a
Definition Spc_Cpu.h:141
* e
Definition inflate.c:1404
register unsigned i
Definition inflate.c:1575
SerdStatus(* SerdErrorSink)(void *SERD_NULLABLE handle, const SerdError *SERD_NONNULL error)
Definition serd.h:607
size_t(* SerdSink)(const void *SERD_NONNULL buf, size_t len, void *SERD_NONNULL stream)
Sink function for raw string output.
Definition serd.h:351
static size_t serd_bulk_sink_write(const void *buf, size_t len, SerdBulkSink *bsink)
Definition serd_internal.h:198
static void serd_stack_pop(SerdStack *stack, size_t n_bytes)
Definition serd_internal.h:120
static bool is_space(const char c)
Definition serd_internal.h:244
#define MIN(a, b)
Definition serd_internal.h:38
static void serd_stack_free(SerdStack *stack)
Definition serd_internal.h:98
static FILE * serd_fopen(const char *path, const char *mode)
Definition serd_internal.h:44
static void serd_bulk_sink_flush(SerdBulkSink *bsink)
Definition serd_internal.h:181
static void * serd_stack_push_aligned(SerdStack *stack, size_t n_bytes, size_t align)
Definition serd_internal.h:127
static uint8_t * serd_stack_push(SerdStack *stack, size_t n_bytes)
Definition serd_internal.h:107
static uint8_t uri_path_at(const SerdURI *uri, size_t i)
Definition serd_internal.h:283
static bool in_range(const uint8_t c, const uint8_t min, const uint8_t max)
Definition serd_internal.h:224
static size_t uri_path_len(const SerdURI *uri)
Definition serd_internal.h:277
struct SerdBulkSinkImpl SerdBulkSink
static bool is_alpha(const uint8_t c)
Definition serd_internal.h:231
static bool serd_stack_is_empty(SerdStack *stack)
Definition serd_internal.h:92
static void * serd_bufalloc(size_t size)
Definition serd_internal.h:58
static void serd_bulk_sink_free(SerdBulkSink *bsink)
Definition serd_internal.h:190
static void serd_stack_pop_aligned(SerdStack *stack, size_t n_bytes)
Definition serd_internal.h:146
static SerdBulkSink serd_bulk_sink_new(SerdSink sink, void *stream, size_t block_size)
Definition serd_internal.h:169
static bool chunk_equals(const SerdChunk *a, const SerdChunk *b)
Definition serd_internal.h:270
static bool is_digit(const uint8_t c)
Definition serd_internal.h:238
static SerdStack serd_stack_new(size_t size)
Definition serd_internal.h:82
static bool is_base64(const uint8_t c)
Definition serd_internal.h:255
static bool uri_is_under(const SerdURI *uri, const SerdURI *root)
Definition serd_internal.h:294
unsigned char uint8_t
Definition mid.cpp:98
#define min(x, y)
Definition os.h:74
#define max(x, y)
Definition os.h:78
png_structrp int mode
Definition png.h:1139
#define SERD_STACK_BOTTOM
Definition stack.h:27
Definition serd_internal.h:160
SerdSink sink
Definition serd_internal.h:161
uint8_t * buf
Definition serd_internal.h:163
void * stream
Definition serd_internal.h:162
size_t size
Definition serd_internal.h:164
size_t block_size
Definition serd_internal.h:165
An unterminated string fragment.
Definition serd.h:208
size_t len
Length of chunk in bytes.
Definition serd.h:210
An error description.
Definition serd.h:214
size_t size
Conceptual size of stack in buf.
Definition stack.h:33
uint8_t * buf
Stack memory.
Definition stack.h:31
size_t buf_size
Allocated size of buf (>= size).
Definition stack.h:32
SerdChunk authority
Authority.
Definition serd.h:232
SerdChunk scheme
Scheme.
Definition serd.h:231
static size_t block_size(const block_header_t *block)
Definition tlsf.c:173
int n
Definition crypt.c:458
return c
Definition crypt.c:175
memcpy(hh, h, RAND_HEAD_LEN)
static bool chunk_equals(const SerdChunk *a, const SerdChunk *b)
Definition uri_utils.h:29