1
0
mirror of https://github.com/falk-werner/webfuse-provider synced 2026-03-02 04:09:18 +00:00

feat(API wrapper): separates implementation from public API

* moves implementation to impl subdirectory
* adds prefix _impl to implementation symbols
* removes double compilation for shared and static libraries
* fixes include guards
* fixes usage of extern "C"
This commit is contained in:
Falk Werner
2019-03-26 15:35:33 +01:00
committed by GitHub
parent 48185776b6
commit 1c9d1c8420
146 changed files with 3043 additions and 2390 deletions

32
lib/wsfs/core/message.c Normal file
View File

@@ -0,0 +1,32 @@
#include "wsfs/core/message.h"
#include <stdlib.h>
#include <libwebsockets.h>
extern struct wsfs_message * wsfs_message_create(json_t const * value)
{
struct wsfs_message * message = NULL;
size_t const length = json_dumpb(value, NULL, 0, JSON_COMPACT);
if (0 < length)
{
char * data = malloc(sizeof(struct wsfs_message) + LWS_PRE + length);
message = (struct wsfs_message *) data;
if (NULL != message)
{
message->data = &data[sizeof(struct wsfs_message) + LWS_PRE];
message->length = length;
message->next = NULL;
json_dumpb(value, message->data, length, JSON_COMPACT);
}
}
return message;
}
void wsfs_message_dispose(
struct wsfs_message * message)
{
free(message);
}

34
lib/wsfs/core/message.h Normal file
View File

@@ -0,0 +1,34 @@
#ifndef WSFS_MESSAGE_H
#define WSFS_MESSAGE_H
#ifndef __cplusplus
#include <stddef.h>
#else
#include <cstddef>
using std::size_t;
#endif
#include <jansson.h>
struct wsfs_message
{
struct wsfs_message * next;
char * data;
size_t length;
};
#ifdef __cplusplus
extern "C"
{
#endif
extern struct wsfs_message * wsfs_message_create(json_t const * value);
extern void wsfs_message_dispose(
struct wsfs_message * message);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,63 @@
#include "wsfs/core/message_queue.h"
#include "wsfs/core/message.h"
void wsfs_message_queue_init(
struct wsfs_message_queue * queue)
{
queue->first = NULL;
queue->last = NULL;
}
void wsfs_message_queue_cleanup(
struct wsfs_message_queue * queue)
{
struct wsfs_message * message = queue->first;
while (NULL != message)
{
struct wsfs_message * next = message->next;
wsfs_message_dispose(message);
message = next;
}
wsfs_message_queue_init(queue);
}
bool wsfs_message_queue_empty(
struct wsfs_message_queue * queue)
{
return (NULL == queue->first);
}
void wsfs_message_queue_push(
struct wsfs_message_queue * queue,
struct wsfs_message * message)
{
message->next = NULL;
if (NULL != queue->last)
{
queue->last->next = message;
queue->last = message;
}
else
{
queue->first = message;
queue->last = message;
}
}
struct wsfs_message * wsfs_message_queue_pop(
struct wsfs_message_queue * queue)
{
struct wsfs_message * const result = queue->first;
if (NULL != result)
{
queue->first = queue->first->next;
if (NULL == queue->first)
{
queue->last = NULL;
}
}
return result;
}

View File

@@ -0,0 +1,42 @@
#ifndef WSFS_MESSAGE_QUEUE_H
#define WSFS_MESSAGE_QUEUE_H
#ifndef __cplusplus
#include <stdbool.h>
#endif
struct wsfs_message_queue;
struct wsfs_message;
struct wsfs_message_queue
{
struct wsfs_message * first;
struct wsfs_message * last;
};
#ifdef __cplusplus
extern "C"
{
#endif
extern void wsfs_message_queue_init(
struct wsfs_message_queue * queue);
extern void wsfs_message_queue_cleanup(
struct wsfs_message_queue * queue);
extern bool wsfs_message_queue_empty(
struct wsfs_message_queue * queue);
extern void wsfs_message_queue_push(
struct wsfs_message_queue * queue,
struct wsfs_message * message);
extern struct wsfs_message * wsfs_message_queue_pop(
struct wsfs_message_queue * queue);
#ifdef __cplusplus
}
#endif
#endif

34
lib/wsfs/core/status.c Normal file
View File

@@ -0,0 +1,34 @@
#include "wsfs/core/status_intern.h"
#include <errno.h>
int wsfs_status_to_rc(wsfs_status status)
{
switch(status)
{
case WSFS_GOOD: return 0;
case WSFS_BAD_NOTIMPLEMENTED: return -ENOSYS;
case WSFS_BAD_TIMEOUT: return -ETIMEDOUT;
case WSFS_BAD_BUSY: return -ENOENT;
case WSFS_BAD_FORMAT: return -ENOENT;
case WSFS_BAD_NOENTRY: return -ENOENT;
case WSFS_BAD_NOACCESS: return -EACCES;
default: return -ENOENT;
}
}
char const * wsfs_status_tostring(wsfs_status status)
{
switch(status)
{
case WSFS_GOOD: return "Good";
case WSFS_BAD: return "Bad";
case WSFS_BAD_NOTIMPLEMENTED: return "Bad (not implelemted)";
case WSFS_BAD_TIMEOUT: return "Bad (timeout)";
case WSFS_BAD_BUSY: return "Bad (busy)";
case WSFS_BAD_FORMAT: return "Bad (format)";
case WSFS_BAD_NOENTRY: return "Bad (no entry)";
case WSFS_BAD_NOACCESS: return "Bad (no access)";
default: return "Bad (unknown)";
}
}

View File

@@ -0,0 +1,19 @@
#ifndef WSFS_STATUS_INTERN_H
#define WSFS_STATUS_INTERN_H
#include "wsfs/core/status.h"
#ifdef __cplusplus
extern "C" {
#endif
extern int wsfs_status_to_rc(wsfs_status status);
extern char const * wsfs_status_tostring(wsfs_status status);
#ifdef __cplusplus
}
#endif
#endif

10
lib/wsfs/core/util.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef WSFS_UTIL_H
#define WSFS_UTIL_H
#ifdef __GNUC__
#define WSFS_UNUSED_PARAM(param) param __attribute__((unused))
#else
#define WSFS_UNUSED_PARAM(param)
#endif
#endif