mirror of
https://github.com/clearlinux/uwsgi.git
synced 2026-08-18 11:39:05 +00:00
48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
#include "../uwsgi.h"
|
|
|
|
/*
|
|
|
|
Storage subsystem: filesystem-like abstraction
|
|
|
|
struct uwsgi_storage_engine {
|
|
char *name;
|
|
uint16_t name_len;
|
|
int64_t (*get)(char *, uint16_t, char *, uint64_t, uint64_t, uint64_t);
|
|
int64_t (*set)(char *, uint16_t, char *, uint64_t, uint64_t, uint64_t);
|
|
};
|
|
|
|
struct uwsgi_storage {
|
|
char *name;
|
|
uint16_t name_len;
|
|
struct uwsgi_storage_engine *engine;
|
|
};
|
|
|
|
|
|
|
|
*/
|
|
|
|
struct uwsgi_storage* uwsgi_storage_by_name(char *name, uint16_t name_len) {
|
|
if (!name_len) {
|
|
name_len = strlen(name);
|
|
}
|
|
struct uwsgi_storage *s = uwsgi.virtualdisks;
|
|
while(s) {
|
|
if (!uwsgi_strncmp(s->name, s->name_len, name, name_len)) {
|
|
return s;
|
|
}
|
|
s = s->next;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
int64_t uwsgi_storage_get(struct uwsgi_storage *storage, char *key, uint16_t key_len, char *out_buf, uint64_t pos, uint64_t size, uint64_t flags) {
|
|
if (!storage->get) return -1;
|
|
return storage->get(key, key_len, out_buf, pos, size, flags);
|
|
}
|
|
|
|
int64_t uwsgi_storage_set(struct uwsgi_storage *storage, char *key, uint16_t key_len, char *in_buf, uint64_t pos, uint64_t size, uint64_t flags) {
|
|
if (!storage->set) return -1;
|
|
return storage->set(key, key_len, out_buf, pos, size, flags);
|
|
}
|