diff --git a/src/buffer.h b/src/buffer.h new file mode 100644 index 0000000..6e953f1 --- /dev/null +++ b/src/buffer.h @@ -0,0 +1,63 @@ +#pragma once + +#include "common.h" + +typedef struct buffer buffer_t; + +struct buffer { + uint8_t *data; + uint8_t *read; + uint8_t *write; + uint8_t *end; +}; + +static inline void buffer_setup (buffer_t *buffer, void *data, size_t size) +{ + if (!data) + data = malloc(ALIGN(size)); + + buffer->data = data; + buffer->read = data; + buffer->write = data; + buffer->end = data; + buffer->end += size; +} + +static inline void buffer_format (buffer_t *buffer) +{ + buffer->write = buffer->data; + buffer->read = buffer->data; +} + +_pure_ +static inline size_t buffer_size (buffer_t *buffer) +{ + return buffer->end-buffer->data; +} + +_pure_ +static inline size_t buffer_write_size (buffer_t *buffer) +{ + return buffer->end-buffer->write; +} + +_pure_ +static inline size_t buffer_read_size (buffer_t *buffer) +{ + return buffer->write-buffer->read; +} + +static inline void buffer_shift (buffer_t *buffer) +{ + if (buffer->read==buffer->write) { + buffer_format(buffer); + } else { + const uint8_t *src = PALIGN_DOWN(buffer->read); + const size_t size = ALIGN(buffer->write-src); + if (buffer->data+sizedata, src, size); + buffer->read -= src-buffer->data; + buffer->write -= src-buffer->data; + } + } +} diff --git a/src/common-static.h b/src/common-static.h deleted file mode 100644 index b50802c..0000000 --- a/src/common-static.h +++ /dev/null @@ -1,133 +0,0 @@ -#pragma once - -#include "common.h" - -#include -#include -#include - -static inline size_t str_cpy (char *restrict dst, const char *restrict src, size_t len) -{ - if (!dst || !src) - return 0; - - size_t i; - - for (i=0; idata = data; - buffer->read = data; - buffer->write = data; - buffer->end = data; - buffer->end += size; -} - -static inline void buffer_format (buffer_t *buffer) -{ - buffer->write = buffer->data; - buffer->read = buffer->data; -} - -_pure_ -static inline size_t buffer_size (buffer_t *buffer) -{ - return buffer->end-buffer->data; -} - -_pure_ -static inline size_t buffer_write_size (buffer_t *buffer) -{ - return buffer->end-buffer->write; -} - -_pure_ -static inline size_t buffer_read_size (buffer_t *buffer) -{ - return buffer->write-buffer->read; -} - -static inline void buffer_shift (buffer_t *buffer) -{ - if (buffer->read==buffer->write) { - buffer_format(buffer); - } else { - const uint8_t *src = PALIGN_DOWN(buffer->read); - const size_t size = ALIGN(buffer->write-src); - if (buffer->data+sizedata, src, size); - buffer->read -= src-buffer->data; - buffer->write -= src-buffer->data; - } - } -} diff --git a/src/common.h b/src/common.h index 9aa49a7..aa953eb 100644 --- a/src/common.h +++ b/src/common.h @@ -2,8 +2,11 @@ #include #include +#include +#include +#include -#define COUNT(x) (sizeof(x)/sizeof(x[0])) +#define COUNT(x) (sizeof(x)/sizeof(x[0])) #define ALIGN_SIZE (1<<4) #define ALIGN_MASK (ALIGN_SIZE-1) @@ -26,15 +29,6 @@ #define _const_ __attribute__ ((const)) #define _align_(...) __attribute__ ((aligned(__VA_ARGS__))) -typedef struct buffer buffer_t; - -struct buffer { - uint8_t *data; - uint8_t *read; - uint8_t *write; - uint8_t *end; -}; - int gt_print (const char *, ...) _printf_(1,2); void gt_log (const char *, ...) _printf_(1,2); void gt_fatal (const char *, ...) _printf_(1,2) _noreturn_; diff --git a/src/db.c b/src/db.c index a5949cf..8c04c8f 100644 --- a/src/db.c +++ b/src/db.c @@ -1,5 +1,7 @@ +#include "common.h" + #include "db.h" -#include "common-static.h" +#include "str.h" #define CBIT(X) (1&(intptr_t)(X)) #define CBIT_PTR(X) (uint8_t *)(1|(intptr_t)(X)) diff --git a/src/ip-static.h b/src/ip.h similarity index 100% rename from src/ip-static.h rename to src/ip.h diff --git a/src/main.c b/src/main.c index 003d973..9fa2b27 100644 --- a/src/main.c +++ b/src/main.c @@ -1,11 +1,19 @@ +#include "common.h" + +#include "buffer.h" +#include "ip.h" +#include "str.h" +#include "option.h" +#include "tun.h" +#include "db.h" + #include #include #include #include -#include #include +#include #include -#include #include #ifndef __FAVOR_BSD @@ -27,13 +35,6 @@ #include -#include "common-static.h" -#include "ip-static.h" - -#include "option.h" -#include "tun.h" -#include "db.h" - #ifndef O_CLOEXEC #define O_CLOEXEC 0 #endif diff --git a/src/option.c b/src/option.c index 7af7b52..014187b 100644 --- a/src/option.c +++ b/src/option.c @@ -1,9 +1,7 @@ -#include "common-static.h" - -#include -#include +#include "common.h" #include "option.h" +#include "str.h" int option_str (void *data, int argc, char **argv) { diff --git a/src/str.h b/src/str.h new file mode 100644 index 0000000..7300ed6 --- /dev/null +++ b/src/str.h @@ -0,0 +1,78 @@ +#pragma once + +#include "common.h" + +static inline size_t str_cpy (char *restrict dst, const char *restrict src, size_t len) +{ + if (!dst || !src) + return 0; + + size_t i; + + for (i=0; i #include