hirlite 0.0.2.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/ext/hirlite_ext/hirlite_ext.h +1 -1
- data/ext/hirlite_ext/rlite.c +3 -23
- data/lib/hirlite/connection.rb +4 -0
- data/lib/hirlite/version.rb +1 -1
- data/vendor/rlite/deps/lua/src/lua_cjson.c +1 -1
- data/vendor/rlite/src/Makefile +12 -25
- data/vendor/rlite/src/dump.c +3 -3
- data/vendor/rlite/src/flock_posix.c +79 -0
- data/vendor/rlite/src/flock_win.c +6 -0
- data/vendor/rlite/src/hirlite.c +265 -25
- data/vendor/rlite/src/hyperloglog.c +1 -1
- data/vendor/rlite/src/lzf_c.c +1 -1
- data/vendor/rlite/src/lzf_d.c +1 -1
- data/vendor/rlite/src/page_btree.c +3 -3
- data/vendor/rlite/src/page_key.c +12 -13
- data/vendor/rlite/src/page_list.c +4 -4
- data/vendor/rlite/src/page_long.c +2 -2
- data/vendor/rlite/src/page_multi_string.c +5 -5
- data/vendor/rlite/src/page_skiplist.c +3 -3
- data/vendor/rlite/src/page_string.c +2 -2
- data/vendor/rlite/src/pubsub.c +448 -0
- data/vendor/rlite/src/restore.c +5 -5
- data/vendor/rlite/src/rlite.c +141 -146
- data/vendor/rlite/src/rlite.h +40 -12
- data/vendor/rlite/src/{constants.h → rlite/constants.h} +0 -0
- data/vendor/rlite/src/{crc64.h → rlite/crc64.h} +0 -0
- data/vendor/rlite/src/{dump.h → rlite/dump.h} +0 -0
- data/vendor/rlite/src/{endianconv.h → rlite/endianconv.h} +0 -0
- data/vendor/rlite/src/rlite/flock.h +8 -0
- data/vendor/rlite/src/{hirlite.h → rlite/hirlite.h} +1 -0
- data/vendor/rlite/src/{hyperloglog.h → rlite/hyperloglog.h} +0 -0
- data/vendor/rlite/src/{lzf.h → rlite/lzf.h} +0 -0
- data/vendor/rlite/src/{lzfP.h → rlite/lzfP.h} +0 -0
- data/vendor/rlite/src/{page_btree.h → rlite/page_btree.h} +0 -0
- data/vendor/rlite/src/{page_key.h → rlite/page_key.h} +0 -0
- data/vendor/rlite/src/{page_list.h → rlite/page_list.h} +0 -0
- data/vendor/rlite/src/{page_long.h → rlite/page_long.h} +0 -0
- data/vendor/rlite/src/{page_multi_string.h → rlite/page_multi_string.h} +0 -0
- data/vendor/rlite/src/{page_skiplist.h → rlite/page_skiplist.h} +0 -0
- data/vendor/rlite/src/{page_string.h → rlite/page_string.h} +0 -0
- data/vendor/rlite/src/{pqsort.h → rlite/pqsort.h} +0 -0
- data/vendor/rlite/src/rlite/pubsub.h +25 -0
- data/vendor/rlite/src/{rand.h → rlite/rand.h} +0 -0
- data/vendor/rlite/src/{restore.h → rlite/restore.h} +0 -0
- data/vendor/rlite/src/{scripting.h → rlite/scripting.h} +0 -0
- data/vendor/rlite/src/{sha1.h → rlite/sha1.h} +0 -0
- data/vendor/rlite/src/rlite/signal.h +11 -0
- data/vendor/rlite/src/{solarisfixes.h → rlite/solarisfixes.h} +0 -0
- data/vendor/rlite/src/{sort.h → rlite/sort.h} +0 -0
- data/vendor/rlite/src/{status.h → rlite/status.h} +1 -0
- data/vendor/rlite/src/{type_hash.h → rlite/type_hash.h} +0 -0
- data/vendor/rlite/src/{type_list.h → rlite/type_list.h} +0 -0
- data/vendor/rlite/src/{type_set.h → rlite/type_set.h} +0 -0
- data/vendor/rlite/src/{type_string.h → rlite/type_string.h} +0 -0
- data/vendor/rlite/src/{type_zset.h → rlite/type_zset.h} +0 -0
- data/vendor/rlite/src/{util.h → rlite/util.h} +2 -1
- data/vendor/rlite/src/{utilfromredis.h → rlite/utilfromredis.h} +0 -0
- data/vendor/rlite/src/rlite/wal.h +8 -0
- data/vendor/rlite/src/scripting.c +8 -10
- data/vendor/rlite/src/sha1.c +2 -2
- data/vendor/rlite/src/signal_posix.c +118 -0
- data/vendor/rlite/src/signal_win.c +17 -0
- data/vendor/rlite/src/sort.c +2 -2
- data/vendor/rlite/src/type_hash.c +4 -4
- data/vendor/rlite/src/type_list.c +4 -4
- data/vendor/rlite/src/type_set.c +4 -4
- data/vendor/rlite/src/type_string.c +4 -4
- data/vendor/rlite/src/type_zset.c +7 -7
- data/vendor/rlite/src/util.c +28 -5
- data/vendor/rlite/src/utilfromredis.c +1 -1
- data/vendor/rlite/src/wal.c +309 -0
- metadata +59 -35
data/vendor/rlite/src/rlite.h
CHANGED
@@ -2,18 +2,18 @@
|
|
2
2
|
#define _RLITE_H
|
3
3
|
|
4
4
|
#include <stdio.h>
|
5
|
-
#include "status.h"
|
6
|
-
#include "page_btree.h"
|
7
|
-
#include "page_key.h"
|
8
|
-
#include "type_hash.h"
|
9
|
-
#include "type_zset.h"
|
10
|
-
#include "type_set.h"
|
11
|
-
#include "type_list.h"
|
12
|
-
#include "type_string.h"
|
13
|
-
#include "sort.h"
|
14
|
-
#include "restore.h"
|
15
|
-
#include "dump.h"
|
16
|
-
#include "util.h"
|
5
|
+
#include "rlite/status.h"
|
6
|
+
#include "rlite/page_btree.h"
|
7
|
+
#include "rlite/page_key.h"
|
8
|
+
#include "rlite/type_hash.h"
|
9
|
+
#include "rlite/type_zset.h"
|
10
|
+
#include "rlite/type_set.h"
|
11
|
+
#include "rlite/type_list.h"
|
12
|
+
#include "rlite/type_string.h"
|
13
|
+
#include "rlite/sort.h"
|
14
|
+
#include "rlite/restore.h"
|
15
|
+
#include "rlite/dump.h"
|
16
|
+
#include "rlite/util.h"
|
17
17
|
|
18
18
|
#define REDIS_RDB_VERSION 6
|
19
19
|
|
@@ -50,6 +50,24 @@
|
|
50
50
|
#define RLITE_OPEN_READWRITE 0x00000002
|
51
51
|
#define RLITE_OPEN_CREATE 0x00000004
|
52
52
|
|
53
|
+
#define RLITE_FLOCK_SH 1
|
54
|
+
#define RLITE_FLOCK_EX 2
|
55
|
+
#define RLITE_FLOCK_UN 3
|
56
|
+
|
57
|
+
#define RLITE_INTERNAL_DB_COUNT 6
|
58
|
+
#define RLITE_INTERNAL_DB_NO 0
|
59
|
+
#define RLITE_INTERNAL_DB_LUA 1
|
60
|
+
// the following two databases might look confusing, bear with me
|
61
|
+
// subscriber->channels map a subscriber_id to a set of channels it is subscribed
|
62
|
+
// channel->subscribers maps a channel to the subscribers id
|
63
|
+
// any operation on one of them should keep the other one in sync
|
64
|
+
// same premise applies to patterns instead of channels
|
65
|
+
#define RLITE_INTERNAL_DB_SUBSCRIBER_CHANNELS 2
|
66
|
+
#define RLITE_INTERNAL_DB_CHANNEL_SUBSCRIBERS 3
|
67
|
+
#define RLITE_INTERNAL_DB_SUBSCRIBER_PATTERNS 4
|
68
|
+
#define RLITE_INTERNAL_DB_PATTERN_SUBSCRIBERS 5
|
69
|
+
#define RLITE_INTERNAL_DB_SUBSCRIBER_MESSAGES 6
|
70
|
+
|
53
71
|
struct rlite;
|
54
72
|
struct rl_btree;
|
55
73
|
|
@@ -93,6 +111,7 @@ typedef struct rlite {
|
|
93
111
|
long page_size;
|
94
112
|
void *driver;
|
95
113
|
int driver_type;
|
114
|
+
int selected_internal;
|
96
115
|
int selected_database;
|
97
116
|
int number_of_databases;
|
98
117
|
long *databases;
|
@@ -102,6 +121,10 @@ typedef struct rlite {
|
|
102
121
|
long write_pages_alloc;
|
103
122
|
long write_pages_len;
|
104
123
|
rl_page **write_pages;
|
124
|
+
|
125
|
+
char *subscriber_id;
|
126
|
+
char *subscriber_lock_filename;
|
127
|
+
FILE *subscriber_lock_fp;
|
105
128
|
} rlite;
|
106
129
|
|
107
130
|
typedef struct watched_key {
|
@@ -111,9 +134,12 @@ typedef struct watched_key {
|
|
111
134
|
} watched_key;
|
112
135
|
|
113
136
|
int rl_open(const char *filename, rlite **db, int flags);
|
137
|
+
int rl_refresh(rlite *db);
|
114
138
|
int rl_close(rlite *db);
|
115
139
|
|
140
|
+
int rl_ensure_pages(rlite *db);
|
116
141
|
int rl_read_header(rlite *db);
|
142
|
+
int rl_header_deserialize(struct rlite *db, void **obj, void *context, unsigned char *data);
|
117
143
|
int rl_read(struct rlite *db, rl_data_type *type, long page, void *context, void **obj, int cache);
|
118
144
|
int rl_get_key_btree(rlite *db, struct rl_btree **btree, int create);
|
119
145
|
int rl_alloc_page_number(rlite *db, long *page_number);
|
@@ -124,7 +150,9 @@ int rl_dirty_hash(struct rlite *db, unsigned char **hash);
|
|
124
150
|
int rl_commit(struct rlite *db);
|
125
151
|
int rl_discard(struct rlite *db);
|
126
152
|
int rl_is_balanced(struct rlite *db);
|
153
|
+
int rl_get_selected_db(struct rlite *db);
|
127
154
|
int rl_select(struct rlite *db, int selected_database);
|
155
|
+
int rl_select_internal(struct rlite *db, int internal);
|
128
156
|
int rl_move(struct rlite *db, unsigned char *key, long keylen, int database);
|
129
157
|
int rl_rename(struct rlite *db, const unsigned char *src, long srclen, const unsigned char *target, long targetlen, int overwrite);
|
130
158
|
int rl_dbsize(struct rlite *db, long *size);
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -107,6 +107,7 @@ struct rliteClient;
|
|
107
107
|
typedef struct rliteContext {
|
108
108
|
int err; /* Error flags, 0 when there is no error */
|
109
109
|
char errstr[128]; /* String representation of error when applicable */
|
110
|
+
char *path;
|
110
111
|
rliteReply **replies;
|
111
112
|
int replyPosition; // avoid reallocing the pointer after removing an element, keep a reference of the next position
|
112
113
|
int replyLength;
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#ifndef _RL_PUBSUB_H
|
2
|
+
#define _RL_PUBSUB_H
|
3
|
+
|
4
|
+
#include <sys/time.h>
|
5
|
+
#include "rlite.h"
|
6
|
+
|
7
|
+
int rl_subscribe(rlite *db, int channelc, unsigned char **channelv, long *channelvlen);
|
8
|
+
int rl_psubscribe(rlite *db, int patternc, unsigned char **patternv, long *patternvlen);
|
9
|
+
int rl_unsubscribe(rlite *db, int channelc, unsigned char **channelv, long *channelvlen);
|
10
|
+
int rl_punsubscribe(rlite *db, int patternc, unsigned char **patternv, long *patternvlen);
|
11
|
+
int rl_unsubscribe_all(rlite *db);
|
12
|
+
int rl_poll(rlite *db, int *elementc, unsigned char ***_elements, long **_elementslen);
|
13
|
+
/**
|
14
|
+
* When timeout is NULL, it will wait for ever.
|
15
|
+
*/
|
16
|
+
int rl_poll_wait(rlite *db, int *elementc, unsigned char ***_elements, long **_elementslen, struct timeval *timeout);
|
17
|
+
int rl_publish(rlite *db, unsigned char *channel, size_t channellen, const char *data, size_t datalen, long *recipients);
|
18
|
+
|
19
|
+
int rl_pubsub_count_subscriptions(rlite *db, long *numsubscriptions);
|
20
|
+
int rl_pubsub_channels(rlite *db, unsigned char *pattern, long patternlen, long* channelc, unsigned char ***channelv, long **channelvlen);
|
21
|
+
int rl_pubsub_patterns(rlite *db, long* patternc, unsigned char ***patternv, long **patternvlen);
|
22
|
+
int rl_pubsub_numsub(rlite *db, int channelc, unsigned char **channelv, long *channelvlen, long *numsub);
|
23
|
+
int rl_pubsub_numpat(rlite *db, long *numpat);
|
24
|
+
|
25
|
+
#endif
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#ifndef _RL_FIFO_H
|
2
|
+
#define _RL_FIFO_H
|
3
|
+
|
4
|
+
#include <sys/time.h>
|
5
|
+
|
6
|
+
int rl_create_signal(const char *signal_name);
|
7
|
+
int rl_delete_signal(const char *signal_name);
|
8
|
+
int rl_read_signal(const char *signal_name, struct timeval *timeout, char **_data, size_t *_datalen);
|
9
|
+
int rl_write_signal(const char *signal_name, const char *data, size_t datalen);
|
10
|
+
|
11
|
+
#endif
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -59,13 +59,14 @@ int sha1_cmp(void *v1, void *v2);
|
|
59
59
|
int double_cmp(void *v1, void *v2);
|
60
60
|
#ifdef RL_DEBUG
|
61
61
|
int long_formatter(void *v2, char **formatted, int *size);
|
62
|
-
int sha1_formatter(void *v2, char **formatted, int *size);
|
63
62
|
int double_formatter(void *v2, char **formatted, int *size);
|
64
63
|
#endif
|
64
|
+
int sha1_formatter(void *v2, char **formatted, int *size);
|
65
65
|
double get_double(const unsigned char *p);
|
66
66
|
void put_double(unsigned char *p, double v);
|
67
67
|
int sha1(const unsigned char *data, long datalen, unsigned char digest[20]);
|
68
68
|
unsigned long long rl_mstime();
|
69
69
|
double rl_strtod(unsigned char *str, long strlen, unsigned char **eptr);
|
70
|
+
char *rl_get_filename_with_suffix(const char *filename, char *suffix);
|
70
71
|
|
71
72
|
#endif
|
File without changes
|
@@ -29,10 +29,10 @@
|
|
29
29
|
*/
|
30
30
|
|
31
31
|
#include "rlite.h"
|
32
|
-
#include "hirlite.h"
|
33
|
-
#include "sha1.h"
|
34
|
-
#include "rand.h"
|
35
|
-
#include "constants.h"
|
32
|
+
#include "rlite/hirlite.h"
|
33
|
+
#include "rlite/sha1.h"
|
34
|
+
#include "rlite/rand.h"
|
35
|
+
#include "rlite/constants.h"
|
36
36
|
|
37
37
|
#include <lua.h>
|
38
38
|
#include <lauxlib.h>
|
@@ -52,25 +52,23 @@ static int setScript(rliteClient *c, char *script, long scriptlen) {
|
|
52
52
|
int retval;
|
53
53
|
char hash[40];
|
54
54
|
sha1hex(hash, script, scriptlen);
|
55
|
-
|
56
|
-
c->context->db->selected_database = c->context->db->number_of_databases;
|
55
|
+
RL_CALL(rl_select_internal, RL_OK, c->context->db, RLITE_INTERNAL_DB_LUA);
|
57
56
|
|
58
57
|
RL_CALL(rl_set, RL_OK, c->context->db, (unsigned char *)hash, 40, (unsigned char *)script, scriptlen, 0, 0);
|
59
58
|
|
60
59
|
cleanup:
|
61
|
-
c->context->db
|
60
|
+
rl_select_internal(c->context->db, RLITE_INTERNAL_DB_NO);
|
62
61
|
return retval;
|
63
62
|
}
|
64
63
|
|
65
64
|
static int getScript(rliteClient *c, char hash[40], char **script, long *scriptlen) {
|
66
65
|
int retval;
|
67
|
-
|
68
|
-
c->context->db->selected_database = c->context->db->number_of_databases;
|
66
|
+
RL_CALL(rl_select_internal, RL_OK, c->context->db, RLITE_INTERNAL_DB_LUA);
|
69
67
|
|
70
68
|
RL_CALL(rl_get, RL_OK, c->context->db, (unsigned char *)hash, 40, (unsigned char **)script, scriptlen);
|
71
69
|
|
72
70
|
cleanup:
|
73
|
-
c->context->db
|
71
|
+
rl_select_internal(c->context->db, RLITE_INTERNAL_DB_NO);
|
74
72
|
return retval;
|
75
73
|
}
|
76
74
|
|
data/vendor/rlite/src/sha1.c
CHANGED
@@ -25,9 +25,9 @@ A million repetitions of "a"
|
|
25
25
|
#include <string.h>
|
26
26
|
#include <sys/types.h> /* for u_int*_t */
|
27
27
|
#if defined(__sun)
|
28
|
-
#include "solarisfixes.h"
|
28
|
+
#include "rlite/solarisfixes.h"
|
29
29
|
#endif
|
30
|
-
#include "sha1.h"
|
30
|
+
#include "rlite/sha1.h"
|
31
31
|
|
32
32
|
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
|
33
33
|
|
@@ -0,0 +1,118 @@
|
|
1
|
+
#include <fcntl.h>
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <stdio.h>
|
5
|
+
#include <sys/types.h>
|
6
|
+
#include <sys/select.h>
|
7
|
+
#include <sys/stat.h>
|
8
|
+
#include <unistd.h>
|
9
|
+
#include "rlite.h"
|
10
|
+
#include "rlite/util.h"
|
11
|
+
#include "rlite/crc64.h"
|
12
|
+
#include "rlite/endianconv.h"
|
13
|
+
|
14
|
+
// header is 4-bytes size and 8-bytes crc
|
15
|
+
#define FIFO_HEADER_SIZE 12
|
16
|
+
|
17
|
+
int rl_create_signal(const char *signal_name) {
|
18
|
+
return mkfifo(signal_name, 0777) == 0 ? RL_OK : RL_UNEXPECTED;
|
19
|
+
}
|
20
|
+
|
21
|
+
int rl_delete_signal(const char *signal_name) {
|
22
|
+
unlink(signal_name);
|
23
|
+
return RL_OK;
|
24
|
+
}
|
25
|
+
|
26
|
+
int rl_read_signal(const char *signal_name, struct timeval *timeout, char **_data, size_t *_datalen)
|
27
|
+
{
|
28
|
+
char header[FIFO_HEADER_SIZE];
|
29
|
+
uint64_t crc;
|
30
|
+
size_t readbytes;
|
31
|
+
size_t datalen;
|
32
|
+
int fd;
|
33
|
+
int retval;
|
34
|
+
char *data = NULL;
|
35
|
+
fd_set rfds;
|
36
|
+
int oflag = O_RDONLY;
|
37
|
+
|
38
|
+
if (timeout) {
|
39
|
+
// select will block, we don't want open to block
|
40
|
+
oflag |= O_NONBLOCK;
|
41
|
+
}
|
42
|
+
|
43
|
+
fd = open(signal_name, oflag);
|
44
|
+
if (fd == -1) {
|
45
|
+
retval = RL_UNEXPECTED;
|
46
|
+
goto cleanup;
|
47
|
+
}
|
48
|
+
|
49
|
+
if (timeout) {
|
50
|
+
FD_ZERO(&rfds);
|
51
|
+
FD_SET(fd, &rfds);
|
52
|
+
retval = select(fd + 1, &rfds, NULL, NULL, timeout);
|
53
|
+
if (retval == -1) {
|
54
|
+
retval = RL_UNEXPECTED;
|
55
|
+
goto cleanup;
|
56
|
+
} else if (retval != 0) {
|
57
|
+
retval = RL_TIMEOUT;
|
58
|
+
goto cleanup;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
readbytes = read(fd, header, FIFO_HEADER_SIZE);
|
63
|
+
if (readbytes != FIFO_HEADER_SIZE) {
|
64
|
+
retval = RL_UNEXPECTED;
|
65
|
+
goto cleanup;
|
66
|
+
}
|
67
|
+
|
68
|
+
datalen = (size_t)get_4bytes((unsigned char *)header);
|
69
|
+
RL_MALLOC(data, sizeof(char) * datalen);
|
70
|
+
|
71
|
+
readbytes = read(fd, data, datalen);
|
72
|
+
if (readbytes != datalen) {
|
73
|
+
retval = RL_UNEXPECTED;
|
74
|
+
goto cleanup;
|
75
|
+
}
|
76
|
+
crc = rl_crc64(0, (unsigned char *)data, datalen);
|
77
|
+
memrev64ifbe(&crc);
|
78
|
+
memcpy(&header[4], &crc, 8);
|
79
|
+
if (memcmp(&crc, &header[4], 8) != 0) {
|
80
|
+
retval = RL_UNEXPECTED;
|
81
|
+
goto cleanup;
|
82
|
+
}
|
83
|
+
if (_data) {
|
84
|
+
*_data = data;
|
85
|
+
}
|
86
|
+
if (_datalen) {
|
87
|
+
*_datalen = datalen;
|
88
|
+
}
|
89
|
+
retval = RL_OK;
|
90
|
+
cleanup:
|
91
|
+
if (fd >= 0) {
|
92
|
+
close(fd);
|
93
|
+
}
|
94
|
+
if (retval != RL_OK || _data == NULL) {
|
95
|
+
rl_free(data);
|
96
|
+
}
|
97
|
+
return retval;
|
98
|
+
}
|
99
|
+
|
100
|
+
int rl_write_signal(const char *signal_name, const char *data, size_t datalen) {
|
101
|
+
char header[FIFO_HEADER_SIZE];
|
102
|
+
put_4bytes((unsigned char *)header, datalen);
|
103
|
+
|
104
|
+
uint64_t crc = rl_crc64(0, (unsigned char *)data, datalen);
|
105
|
+
memrev64ifbe(&crc);
|
106
|
+
memcpy(&header[4], &crc, 8);
|
107
|
+
|
108
|
+
int fd = open(signal_name, O_WRONLY | O_NONBLOCK);
|
109
|
+
if (fd == -1) {
|
110
|
+
// fifo may not always exist on our code
|
111
|
+
// it is a way to signal between processes, but it is show and forget
|
112
|
+
return RL_OK;
|
113
|
+
}
|
114
|
+
write(fd, header, FIFO_HEADER_SIZE);
|
115
|
+
write(fd, data, datalen);
|
116
|
+
close(fd);
|
117
|
+
return RL_OK;
|
118
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#include "rlite.h"
|
2
|
+
|
3
|
+
int rl_create_signal(const char *signal_name) {
|
4
|
+
return RL_NOT_IMPLEMENTED;
|
5
|
+
}
|
6
|
+
|
7
|
+
int rl_delete_signal(const char *signal_name) {
|
8
|
+
return RL_NOT_IMPLEMENTED;
|
9
|
+
}
|
10
|
+
|
11
|
+
int rl_read_signal(const char *signal_name, char **_data, size_t *_datalen) {
|
12
|
+
return RL_NOT_IMPLEMENTED;
|
13
|
+
}
|
14
|
+
|
15
|
+
int rl_write_signal(const char *signal_name, const char *data, size_t datalen) {
|
16
|
+
return RL_NOT_IMPLEMENTED;
|
17
|
+
}
|
data/vendor/rlite/src/sort.c
CHANGED
@@ -30,8 +30,8 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
#include "rlite.h"
|
33
|
-
#include "sort.h"
|
34
|
-
#include "pqsort.h" /* Partial qsort for SORT+LIMIT */
|
33
|
+
#include "rlite/sort.h"
|
34
|
+
#include "rlite/pqsort.h" /* Partial qsort for SORT+LIMIT */
|
35
35
|
#include <math.h> /* isnan() */
|
36
36
|
#include <errno.h>
|
37
37
|
|