1extern crate c2rust_bitfields;
2extern crate libc;
3extern crate core;
4
5extern crate num_traits;
6
7extern "C" {
8 pub type RedisModuleCommand;
9 static mut server: redisServer;
10 fn mstime() -> libc::c_longlong;
11 fn freeClient(c: *mut client);
12 fn addReplyError(c: *mut client, err: *const libc::c_char);
13 fn getLongLongFromObjectOrReply(
14 c: *mut client,
15 o: *mut robj,
16 target: *mut libc::c_longlong,
17 msg: *const libc::c_char,
18 ) -> libc::c_int;
19 fn getLongDoubleFromObjectOrReply(
20 c: *mut client,
21 o: *mut robj,
22 target: *mut f64,
23 msg: *const libc::c_char,
24 ) -> libc::c_int;
25 fn mustObeyClient(c: *mut client) -> libc::c_int;
26 fn _serverLog(level: libc::c_int, fmt: *const libc::c_char, _: ...);
27 fn unblockClient(c: *mut client);
28 fn replyToBlockedClientTimedOut(c: *mut client);
29 fn memcpy(
30 _: *mut libc::c_void,
31 _: *const libc::c_void,
32 _: libc::c_ulong,
33 ) -> *mut libc::c_void;
34 fn memset(
35 _: *mut libc::c_void,
36 _: libc::c_int,
37 _: libc::c_ulong,
38 ) -> *mut libc::c_void;
39 fn raxTryInsert(
40 rax: *mut rax,
41 s: *mut libc::c_uchar,
42 len: size_t,
43 data: *mut libc::c_void,
44 old: *mut *mut libc::c_void,
45 ) -> libc::c_int;
46 fn raxRemove(
47 rax: *mut rax,
48 s: *mut libc::c_uchar,
49 len: size_t,
50 old: *mut *mut libc::c_void,
51 ) -> libc::c_int;
52 fn raxStart(it: *mut raxIterator, rt: *mut rax);
53 fn raxSeek(
54 it: *mut raxIterator,
55 op: *const libc::c_char,
56 ele: *mut libc::c_uchar,
57 len: size_t,
58 ) -> libc::c_int;
59 fn raxNext(it: *mut raxIterator) -> libc::c_int;
60 fn raxStop(it: *mut raxIterator);
61 fn raxSize(rax: *mut rax) -> uint64_t;
62 fn intrev64(v: uint64_t) -> uint64_t;
63 fn clusterRedirectBlockedClientIfNeeded(c: *mut client) -> libc::c_int;
64 fn ceill(_: f64) -> f64;
65}
66pub type __int16_t = libc::c_short;
67pub type __uint16_t = libc::c_ushort;
68pub type __int32_t = libc::c_int;
69pub type __uint32_t = libc::c_uint;
70pub type __int64_t = libc::c_long;
71pub type __uint64_t = libc::c_ulong;
72pub type __uint_least64_t = __uint64_t;
73pub type __mode_t = libc::c_uint;
74pub type __off64_t = libc::c_long;
75pub type __pid_t = libc::c_int;
76pub type __time_t = libc::c_long;
77pub type __ssize_t = libc::c_long;
78pub type __sig_atomic_t = libc::c_int;
79pub type size_t = libc::c_ulong;
80#[derive(Copy, Clone)]
81#[repr(C)]
82pub struct iovec {
83 pub iov_base: *mut libc::c_void,
84 pub iov_len: size_t,
85}
86pub type mode_t = __mode_t;
87pub type off_t = __off64_t;
88pub type pid_t = __pid_t;
89pub type ssize_t = __ssize_t;
90pub type time_t = __time_t;
91pub type int16_t = __int16_t;
92pub type int32_t = __int32_t;
93pub type int64_t = __int64_t;
94pub type pthread_t = libc::c_ulong;
95pub type uint16_t = __uint16_t;
96pub type uint32_t = __uint32_t;
97pub type uint64_t = __uint64_t;
98pub type uint_least64_t = __uint_least64_t;
99pub type sds = *mut libc::c_char;
100#[derive(Copy, Clone)]
101#[repr(C)]
102pub struct aeEventLoop {
103 pub maxfd: libc::c_int,
104 pub setsize: libc::c_int,
105 pub timeEventNextId: libc::c_longlong,
106 pub events: *mut aeFileEvent,
107 pub fired: *mut aeFiredEvent,
108 pub timeEventHead: *mut aeTimeEvent,
109 pub stop: libc::c_int,
110 pub apidata: *mut libc::c_void,
111 pub beforesleep: Option::<aeBeforeSleepProc>,
112 pub aftersleep: Option::<aeBeforeSleepProc>,
113 pub flags: libc::c_int,
114}
115pub type aeBeforeSleepProc = unsafe extern "C" fn(*mut aeEventLoop) -> ();
116#[derive(Copy, Clone)]
117#[repr(C)]
118pub struct aeTimeEvent {
119 pub id: libc::c_longlong,
120 pub when: monotime,
121 pub timeProc: Option::<aeTimeProc>,
122 pub finalizerProc: Option::<aeEventFinalizerProc>,
123 pub clientData: *mut libc::c_void,
124 pub prev: *mut aeTimeEvent,
125 pub next: *mut aeTimeEvent,
126 pub refcount: libc::c_int,
127}
128pub type aeEventFinalizerProc = unsafe extern "C" fn(
129 *mut aeEventLoop,
130 *mut libc::c_void,
131) -> ();
132pub type aeTimeProc = unsafe extern "C" fn(
133 *mut aeEventLoop,
134 libc::c_longlong,
135 *mut libc::c_void,
136) -> libc::c_int;
137pub type monotime = uint64_t;
138#[derive(Copy, Clone)]
139#[repr(C)]
140pub struct aeFiredEvent {
141 pub fd: libc::c_int,
142 pub mask: libc::c_int,
143}
144#[derive(Copy, Clone)]
145#[repr(C)]
146pub struct aeFileEvent {
147 pub mask: libc::c_int,
148 pub rfileProc: Option::<aeFileProc>,
149 pub wfileProc: Option::<aeFileProc>,
150 pub clientData: *mut libc::c_void,
151}
152pub type aeFileProc = unsafe extern "C" fn(
153 *mut aeEventLoop,
154 libc::c_int,
155 *mut libc::c_void,
156 libc::c_int,
157) -> ();
158#[derive(Copy, Clone)]
159#[repr(C)]
160pub struct connection {
161 pub type_0: *mut ConnectionType,
162 pub state: ConnectionState,
163 pub flags: libc::c_short,
164 pub refs: libc::c_short,
165 pub last_errno: libc::c_int,
166 pub private_data: *mut libc::c_void,
167 pub conn_handler: ConnectionCallbackFunc,
168 pub write_handler: ConnectionCallbackFunc,
169 pub read_handler: ConnectionCallbackFunc,
170 pub fd: libc::c_int,
171}
172pub type ConnectionCallbackFunc = Option::<unsafe extern "C" fn(*mut connection) -> ()>;
173pub type ConnectionState = libc::c_uint;
174pub const CONN_STATE_ERROR: ConnectionState = 5;
175pub const CONN_STATE_CLOSED: ConnectionState = 4;
176pub const CONN_STATE_CONNECTED: ConnectionState = 3;
177pub const CONN_STATE_ACCEPTING: ConnectionState = 2;
178pub const CONN_STATE_CONNECTING: ConnectionState = 1;
179pub const CONN_STATE_NONE: ConnectionState = 0;
180#[derive(Copy, Clone)]
181#[repr(C)]
182pub struct ConnectionType {
183 pub ae_handler: Option::<
184 unsafe extern "C" fn(
185 *mut aeEventLoop,
186 libc::c_int,
187 *mut libc::c_void,
188 libc::c_int,
189 ) -> (),
190 >,
191 pub connect: Option::<
192 unsafe extern "C" fn(
193 *mut connection,
194 *const libc::c_char,
195 libc::c_int,
196 *const libc::c_char,
197 ConnectionCallbackFunc,
198 ) -> libc::c_int,
199 >,
200 pub write: Option::<
201 unsafe extern "C" fn(*mut connection, *const libc::c_void, size_t) -> libc::c_int,
202 >,
203 pub writev: Option::<
204 unsafe extern "C" fn(*mut connection, *const iovec, libc::c_int) -> libc::c_int,
205 >,
206 pub read: Option::<
207 unsafe extern "C" fn(*mut connection, *mut libc::c_void, size_t) -> libc::c_int,
208 >,
209 pub close: Option::<unsafe extern "C" fn(*mut connection) -> ()>,
210 pub accept: Option::<
211 unsafe extern "C" fn(*mut connection, ConnectionCallbackFunc) -> libc::c_int,
212 >,
213 pub set_write_handler: Option::<
214 unsafe extern "C" fn(
215 *mut connection,
216 ConnectionCallbackFunc,
217 libc::c_int,
218 ) -> libc::c_int,
219 >,
220 pub set_read_handler: Option::<
221 unsafe extern "C" fn(*mut connection, ConnectionCallbackFunc) -> libc::c_int,
222 >,
223 pub get_last_error: Option::<
224 unsafe extern "C" fn(*mut connection) -> *const libc::c_char,
225 >,
226 pub blocking_connect: Option::<
227 unsafe extern "C" fn(
228 *mut connection,
229 *const libc::c_char,
230 libc::c_int,
231 libc::c_longlong,
232 ) -> libc::c_int,
233 >,
234 pub sync_write: Option::<
235 unsafe extern "C" fn(
236 *mut connection,
237 *mut libc::c_char,
238 ssize_t,
239 libc::c_longlong,
240 ) -> ssize_t,
241 >,
242 pub sync_read: Option::<
243 unsafe extern "C" fn(
244 *mut connection,
245 *mut libc::c_char,
246 ssize_t,
247 libc::c_longlong,
248 ) -> ssize_t,
249 >,
250 pub sync_readline: Option::<
251 unsafe extern "C" fn(
252 *mut connection,
253 *mut libc::c_char,
254 ssize_t,
255 libc::c_longlong,
256 ) -> ssize_t,
257 >,
258 pub get_type: Option::<unsafe extern "C" fn(*mut connection) -> libc::c_int>,
259}
260#[derive(Copy, Clone,c2rust_bitfields:: BitfieldStruct)]
261#[repr(C)]
262pub struct redisObject {
263 #[bitfield(name = "type_0", ty = "libc::c_uint", bits = "0..=3")]
264 #[bitfield(name = "encoding", ty = "libc::c_uint", bits = "4..=7")]
265 #[bitfield(name = "lru", ty = "libc::c_uint", bits = "8..=31")]
266 pub type_0_encoding_lru: [u8; 4],
267 pub refcount: libc::c_int,
268 pub ptr: *mut libc::c_void,
269}
270pub type atomic_int = libc::c_int;
271pub type atomic_uint = libc::c_uint;
272pub type atomic_llong = libc::c_longlong;
273pub type sig_atomic_t = __sig_atomic_t;
274#[derive(Copy, Clone)]
275#[repr(C)]
276pub struct hdr_histogram {
277 pub lowest_discernible_value: int64_t,
278 pub highest_trackable_value: int64_t,
279 pub unit_magnitude: int32_t,
280 pub significant_figures: int32_t,
281 pub sub_bucket_half_count_magnitude: int32_t,
282 pub sub_bucket_half_count: int32_t,
283 pub sub_bucket_mask: int64_t,
284 pub sub_bucket_count: int32_t,
285 pub bucket_count: int32_t,
286 pub min_value: int64_t,
287 pub max_value: int64_t,
288 pub normalizing_index_offset: int32_t,
289 pub conversion_ratio: libc::c_double,
290 pub counts_len: int32_t,
291 pub total_count: int64_t,
292 pub counts: *mut int64_t,
293}
294pub type mstime_t = libc::c_longlong;
295pub type ustime_t = libc::c_longlong;
296#[derive(Copy, Clone)]
297#[repr(C)]
298pub struct dictEntry {
299 pub key: *mut libc::c_void,
300 pub v: C2RustUnnamed,
301 pub next: *mut dictEntry,
302 pub metadata: [*mut libc::c_void; 0],
303}
304#[derive(Copy, Clone)]
305#[repr(C)]
306pub union C2RustUnnamed {
307 pub val: *mut libc::c_void,
308 pub u64_0: uint64_t,
309 pub s64: int64_t,
310 pub d: libc::c_double,
311}
312#[derive(Copy, Clone)]
313#[repr(C)]
314pub struct dict {
315 pub type_0: *mut dictType,
316 pub ht_table: [*mut *mut dictEntry; 2],
317 pub ht_used: [libc::c_ulong; 2],
318 pub rehashidx: libc::c_long,
319 pub pauserehash: int16_t,
320 pub ht_size_exp: [libc::c_schar; 2],
321}
322#[derive(Copy, Clone)]
323#[repr(C)]
324pub struct dictType {
325 pub hashFunction: Option::<unsafe extern "C" fn(*const libc::c_void) -> uint64_t>,
326 pub keyDup: Option::<
327 unsafe extern "C" fn(*mut dict, *const libc::c_void) -> *mut libc::c_void,
328 >,
329 pub valDup: Option::<
330 unsafe extern "C" fn(*mut dict, *const libc::c_void) -> *mut libc::c_void,
331 >,
332 pub keyCompare: Option::<
333 unsafe extern "C" fn(
334 *mut dict,
335 *const libc::c_void,
336 *const libc::c_void,
337 ) -> libc::c_int,
338 >,
339 pub keyDestructor: Option::<
340 unsafe extern "C" fn(*mut dict, *mut libc::c_void) -> (),
341 >,
342 pub valDestructor: Option::<
343 unsafe extern "C" fn(*mut dict, *mut libc::c_void) -> (),
344 >,
345 pub expandAllowed: Option::<
346 unsafe extern "C" fn(size_t, libc::c_double) -> libc::c_int,
347 >,
348 pub dictEntryMetadataBytes: Option::<unsafe extern "C" fn(*mut dict) -> size_t>,
349}
350#[derive(Copy, Clone)]
351#[repr(C)]
352pub struct listNode {
353 pub prev: *mut listNode,
354 pub next: *mut listNode,
355 pub value: *mut libc::c_void,
356}
357#[derive(Copy, Clone)]
358#[repr(C)]
359pub struct list {
360 pub head: *mut listNode,
361 pub tail: *mut listNode,
362 pub dup: Option::<unsafe extern "C" fn(*mut libc::c_void) -> *mut libc::c_void>,
363 pub free: Option::<unsafe extern "C" fn(*mut libc::c_void) -> ()>,
364 pub match_0: Option::<
365 unsafe extern "C" fn(*mut libc::c_void, *mut libc::c_void) -> libc::c_int,
366 >,
367 pub len: libc::c_ulong,
368}
369#[derive(Copy, Clone,c2rust_bitfields:: BitfieldStruct)]
370#[repr(C)]
371pub struct raxNode {
372 #[bitfield(name = "iskey", ty = "uint32_t", bits = "0..=0")]
373 #[bitfield(name = "isnull", ty = "uint32_t", bits = "1..=1")]
374 #[bitfield(name = "iscompr", ty = "uint32_t", bits = "2..=2")]
375 #[bitfield(name = "size", ty = "uint32_t", bits = "3..=31")]
376 pub iskey_isnull_iscompr_size: [u8; 4],
377 pub data: [libc::c_uchar; 0],
378}
379#[derive(Copy, Clone)]
380#[repr(C)]
381pub struct rax {
382 pub head: *mut raxNode,
383 pub numele: uint64_t,
384 pub numnodes: uint64_t,
385}
386#[derive(Copy, Clone)]
387#[repr(C)]
388pub struct raxStack {
389 pub stack: *mut *mut libc::c_void,
390 pub items: size_t,
391 pub maxitems: size_t,
392 pub static_items: [*mut libc::c_void; 32],
393 pub oom: libc::c_int,
394}
395pub type raxNodeCallback = Option::<
396 unsafe extern "C" fn(*mut *mut raxNode) -> libc::c_int,
397>;
398#[derive(Copy, Clone)]
399#[repr(C)]
400pub struct raxIterator {
401 pub flags: libc::c_int,
402 pub rt: *mut rax,
403 pub key: *mut libc::c_uchar,
404 pub data: *mut libc::c_void,
405 pub key_len: size_t,
406 pub key_max: size_t,
407 pub key_static_string: [libc::c_uchar; 128],
408 pub node: *mut raxNode,
409 pub stack: raxStack,
410 pub node_cb: raxNodeCallback,
411}
412pub type pause_type = libc::c_uint;
413pub const CLIENT_PAUSE_ALL: pause_type = 2;
414pub const CLIENT_PAUSE_WRITE: pause_type = 1;
415pub const CLIENT_PAUSE_OFF: pause_type = 0;
416#[derive(Copy, Clone)]
417#[repr(C)]
418pub struct pause_event {
419 pub type_0: pause_type,
420 pub end: mstime_t,
421}
422pub type robj = redisObject;
423pub type RedisModuleUserChangedFunc = Option::<
424 unsafe extern "C" fn(uint64_t, *mut libc::c_void) -> (),
425>;
426#[derive(Copy, Clone)]
427#[repr(C)]
428pub struct clusterSlotToKeyMapping {
429 pub by_slot: [slotToKeys; 16384],
430}
431#[derive(Copy, Clone)]
432#[repr(C)]
433pub struct slotToKeys {
434 pub count: uint64_t,
435 pub head: *mut dictEntry,
436}
437#[derive(Copy, Clone)]
438#[repr(C)]
439pub struct redisDb {
440 pub dict: *mut dict,
441 pub expires: *mut dict,
442 pub blocking_keys: *mut dict,
443 pub ready_keys: *mut dict,
444 pub watched_keys: *mut dict,
445 pub id: libc::c_int,
446 pub avg_ttl: libc::c_longlong,
447 pub expires_cursor: libc::c_ulong,
448 pub defrag_later: *mut list,
449 pub slots_to_keys: *mut clusterSlotToKeyMapping,
450}
451#[derive(Copy, Clone)]
452#[repr(C)]
453pub struct multiCmd {
454 pub argv: *mut *mut robj,
455 pub argv_len: libc::c_int,
456 pub argc: libc::c_int,
457 pub cmd: *mut redisCommand,
458}
459#[derive(Copy, Clone)]
460#[repr(C)]
461pub struct redisCommand {
462 pub declared_name: *const libc::c_char,
463 pub summary: *const libc::c_char,
464 pub complexity: *const libc::c_char,
465 pub since: *const libc::c_char,
466 pub doc_flags: libc::c_int,
467 pub replaced_by: *const libc::c_char,
468 pub deprecated_since: *const libc::c_char,
469 pub group: redisCommandGroup,
470 pub history: *mut commandHistory,
471 pub tips: *mut *const libc::c_char,
472 pub proc_0: Option::<redisCommandProc>,
473 pub arity: libc::c_int,
474 pub flags: uint64_t,
475 pub acl_categories: uint64_t,
476 pub key_specs_static: [keySpec; 4],
477 pub getkeys_proc: Option::<redisGetKeysProc>,
478 pub subcommands: *mut redisCommand,
479 pub args: *mut redisCommandArg,
480 pub microseconds: libc::c_longlong,
481 pub calls: libc::c_longlong,
482 pub rejected_calls: libc::c_longlong,
483 pub failed_calls: libc::c_longlong,
484 pub id: libc::c_int,
485 pub fullname: sds,
486 pub latency_histogram: *mut hdr_histogram,
487 pub key_specs: *mut keySpec,
488 pub legacy_range_key_spec: keySpec,
489 pub num_args: libc::c_int,
490 pub num_history: libc::c_int,
491 pub num_tips: libc::c_int,
492 pub key_specs_num: libc::c_int,
493 pub key_specs_max: libc::c_int,
494 pub subcommands_dict: *mut dict,
495 pub parent: *mut redisCommand,
496 pub module_cmd: *mut RedisModuleCommand,
497}
498#[derive(Copy, Clone)]
499#[repr(C)]
500pub struct keySpec {
501 pub notes: *const libc::c_char,
502 pub flags: uint64_t,
503 pub begin_search_type: kspec_bs_type,
504 pub bs: C2RustUnnamed_3,
505 pub find_keys_type: kspec_fk_type,
506 pub fk: C2RustUnnamed_0,
507}
508#[derive(Copy, Clone)]
509#[repr(C)]
510pub union C2RustUnnamed_0 {
511 pub range: C2RustUnnamed_2,
512 pub keynum: C2RustUnnamed_1,
513}
514#[derive(Copy, Clone)]
515#[repr(C)]
516pub struct C2RustUnnamed_1 {
517 pub keynumidx: libc::c_int,
518 pub firstkey: libc::c_int,
519 pub keystep: libc::c_int,
520}
521#[derive(Copy, Clone)]
522#[repr(C)]
523pub struct C2RustUnnamed_2 {
524 pub lastkey: libc::c_int,
525 pub keystep: libc::c_int,
526 pub limit: libc::c_int,
527}
528pub type kspec_fk_type = libc::c_uint;
529pub const KSPEC_FK_KEYNUM: kspec_fk_type = 3;
530pub const KSPEC_FK_RANGE: kspec_fk_type = 2;
531pub const KSPEC_FK_UNKNOWN: kspec_fk_type = 1;
532pub const KSPEC_FK_INVALID: kspec_fk_type = 0;
533#[derive(Copy, Clone)]
534#[repr(C)]
535pub union C2RustUnnamed_3 {
536 pub index: C2RustUnnamed_5,
537 pub keyword: C2RustUnnamed_4,
538}
539#[derive(Copy, Clone)]
540#[repr(C)]
541pub struct C2RustUnnamed_4 {
542 pub keyword: *const libc::c_char,
543 pub startfrom: libc::c_int,
544}
545#[derive(Copy, Clone)]
546#[repr(C)]
547pub struct C2RustUnnamed_5 {
548 pub pos: libc::c_int,
549}
550pub type kspec_bs_type = libc::c_uint;
551pub const KSPEC_BS_KEYWORD: kspec_bs_type = 3;
552pub const KSPEC_BS_INDEX: kspec_bs_type = 2;
553pub const KSPEC_BS_UNKNOWN: kspec_bs_type = 1;
554pub const KSPEC_BS_INVALID: kspec_bs_type = 0;
555#[derive(Copy, Clone)]
556#[repr(C)]
557pub struct redisCommandArg {
558 pub name: *const libc::c_char,
559 pub type_0: redisCommandArgType,
560 pub key_spec_index: libc::c_int,
561 pub token: *const libc::c_char,
562 pub summary: *const libc::c_char,
563 pub since: *const libc::c_char,
564 pub flags: libc::c_int,
565 pub deprecated_since: *const libc::c_char,
566 pub subargs: *mut redisCommandArg,
567 pub num_args: libc::c_int,
568}
569pub type redisCommandArgType = libc::c_uint;
570pub const ARG_TYPE_BLOCK: redisCommandArgType = 8;
571pub const ARG_TYPE_ONEOF: redisCommandArgType = 7;
572pub const ARG_TYPE_PURE_TOKEN: redisCommandArgType = 6;
573pub const ARG_TYPE_UNIX_TIME: redisCommandArgType = 5;
574pub const ARG_TYPE_PATTERN: redisCommandArgType = 4;
575pub const ARG_TYPE_KEY: redisCommandArgType = 3;
576pub const ARG_TYPE_DOUBLE: redisCommandArgType = 2;
577pub const ARG_TYPE_INTEGER: redisCommandArgType = 1;
578pub const ARG_TYPE_STRING: redisCommandArgType = 0;
579pub type redisGetKeysProc = unsafe extern "C" fn(
580 *mut redisCommand,
581 *mut *mut robj,
582 libc::c_int,
583 *mut getKeysResult,
584) -> libc::c_int;
585#[derive(Copy, Clone)]
586#[repr(C)]
587pub struct getKeysResult {
588 pub keysbuf: [keyReference; 256],
589 pub keys: *mut keyReference,
590 pub numkeys: libc::c_int,
591 pub size: libc::c_int,
592}
593#[derive(Copy, Clone)]
594#[repr(C)]
595pub struct keyReference {
596 pub pos: libc::c_int,
597 pub flags: libc::c_int,
598}
599pub type redisCommandProc = unsafe extern "C" fn(*mut client) -> ();
600#[derive(Copy, Clone)]
601#[repr(C)]
602pub struct client {
603 pub id: uint64_t,
604 pub flags: uint64_t,
605 pub conn: *mut connection,
606 pub resp: libc::c_int,
607 pub db: *mut redisDb,
608 pub name: *mut robj,
609 pub querybuf: sds,
610 pub qb_pos: size_t,
611 pub querybuf_peak: size_t,
612 pub argc: libc::c_int,
613 pub argv: *mut *mut robj,
614 pub argv_len: libc::c_int,
615 pub original_argc: libc::c_int,
616 pub original_argv: *mut *mut robj,
617 pub argv_len_sum: size_t,
618 pub cmd: *mut redisCommand,
619 pub lastcmd: *mut redisCommand,
620 pub realcmd: *mut redisCommand,
621 pub user: *mut user,
622 pub reqtype: libc::c_int,
623 pub multibulklen: libc::c_int,
624 pub bulklen: libc::c_long,
625 pub reply: *mut list,
626 pub reply_bytes: libc::c_ulonglong,
627 pub deferred_reply_errors: *mut list,
628 pub sentlen: size_t,
629 pub ctime: time_t,
630 pub duration: libc::c_long,
631 pub slot: libc::c_int,
632 pub cur_script: *mut dictEntry,
633 pub lastinteraction: time_t,
634 pub obuf_soft_limit_reached_time: time_t,
635 pub authenticated: libc::c_int,
636 pub replstate: libc::c_int,
637 pub repl_start_cmd_stream_on_ack: libc::c_int,
638 pub repldbfd: libc::c_int,
639 pub repldboff: off_t,
640 pub repldbsize: off_t,
641 pub replpreamble: sds,
642 pub read_reploff: libc::c_longlong,
643 pub reploff: libc::c_longlong,
644 pub repl_applied: libc::c_longlong,
645 pub repl_ack_off: libc::c_longlong,
646 pub repl_ack_time: libc::c_longlong,
647 pub repl_last_partial_write: libc::c_longlong,
648 pub psync_initial_offset: libc::c_longlong,
649 pub replid: [libc::c_char; 41],
650 pub slave_listening_port: libc::c_int,
651 pub slave_addr: *mut libc::c_char,
652 pub slave_capa: libc::c_int,
653 pub slave_req: libc::c_int,
654 pub mstate: multiState,
655 pub btype: libc::c_int,
656 pub bpop: blockingState,
657 pub woff: libc::c_longlong,
658 pub watched_keys: *mut list,
659 pub pubsub_channels: *mut dict,
660 pub pubsub_patterns: *mut list,
661 pub pubsubshard_channels: *mut dict,
662 pub peerid: sds,
663 pub sockname: sds,
664 pub client_list_node: *mut listNode,
665 pub postponed_list_node: *mut listNode,
666 pub pending_read_list_node: *mut listNode,
667 pub auth_callback: RedisModuleUserChangedFunc,
668 pub auth_callback_privdata: *mut libc::c_void,
669 pub auth_module: *mut libc::c_void,
670 pub client_tracking_redirection: uint64_t,
671 pub client_tracking_prefixes: *mut rax,
672 pub last_memory_usage: size_t,
673 pub last_memory_type: libc::c_int,
674 pub mem_usage_bucket_node: *mut listNode,
675 pub mem_usage_bucket: *mut clientMemUsageBucket,
676 pub ref_repl_buf_node: *mut listNode,
677 pub ref_block_pos: size_t,
678 pub buf_peak: size_t,
679 pub buf_peak_last_reset_time: mstime_t,
680 pub bufpos: libc::c_int,
681 pub buf_usable_size: size_t,
682 pub buf: *mut libc::c_char,
683}
684#[derive(Copy, Clone)]
685#[repr(C)]
686pub struct clientMemUsageBucket {
687 pub clients: *mut list,
688 pub mem_usage_sum: size_t,
689}
690#[derive(Copy, Clone)]
691#[repr(C)]
692pub struct blockingState {
693 pub count: libc::c_long,
694 pub timeout: mstime_t,
695 pub keys: *mut dict,
696 pub target: *mut robj,
697 pub blockpos: blockPos,
698 pub xread_count: size_t,
699 pub xread_group: *mut robj,
700 pub xread_consumer: *mut robj,
701 pub xread_group_noack: libc::c_int,
702 pub numreplicas: libc::c_int,
703 pub reploffset: libc::c_longlong,
704 pub module_blocked_handle: *mut libc::c_void,
705}
706#[derive(Copy, Clone)]
707#[repr(C)]
708pub struct blockPos {
709 pub wherefrom: libc::c_int,
710 pub whereto: libc::c_int,
711}
712#[derive(Copy, Clone)]
713#[repr(C)]
714pub struct multiState {
715 pub commands: *mut multiCmd,
716 pub count: libc::c_int,
717 pub cmd_flags: libc::c_int,
718 pub cmd_inv_flags: libc::c_int,
719 pub argv_len_sums: size_t,
720 pub alloc_count: libc::c_int,
721}
722#[derive(Copy, Clone)]
723#[repr(C)]
724pub struct user {
725 pub name: sds,
726 pub flags: uint32_t,
727 pub passwords: *mut list,
728 pub selectors: *mut list,
729 pub acl_string: *mut robj,
730}
731#[derive(Copy, Clone)]
732#[repr(C)]
733pub struct commandHistory {
734 pub since: *const libc::c_char,
735 pub changes: *const libc::c_char,
736}
737pub type redisCommandGroup = libc::c_uint;
738pub const COMMAND_GROUP_MODULE: redisCommandGroup = 17;
739pub const COMMAND_GROUP_BITMAP: redisCommandGroup = 16;
740pub const COMMAND_GROUP_STREAM: redisCommandGroup = 15;
741pub const COMMAND_GROUP_GEO: redisCommandGroup = 14;
742pub const COMMAND_GROUP_SENTINEL: redisCommandGroup = 13;
743pub const COMMAND_GROUP_CLUSTER: redisCommandGroup = 12;
744pub const COMMAND_GROUP_HYPERLOGLOG: redisCommandGroup = 11;
745pub const COMMAND_GROUP_SCRIPTING: redisCommandGroup = 10;
746pub const COMMAND_GROUP_SERVER: redisCommandGroup = 9;
747pub const COMMAND_GROUP_CONNECTION: redisCommandGroup = 8;
748pub const COMMAND_GROUP_TRANSACTIONS: redisCommandGroup = 7;
749pub const COMMAND_GROUP_PUBSUB: redisCommandGroup = 6;
750pub const COMMAND_GROUP_HASH: redisCommandGroup = 5;
751pub const COMMAND_GROUP_SORTED_SET: redisCommandGroup = 4;
752pub const COMMAND_GROUP_SET: redisCommandGroup = 3;
753pub const COMMAND_GROUP_LIST: redisCommandGroup = 2;
754pub const COMMAND_GROUP_STRING: redisCommandGroup = 1;
755pub const COMMAND_GROUP_GENERIC: redisCommandGroup = 0;
756#[derive(Copy, Clone)]
757#[repr(C)]
758pub struct replBacklog {
759 pub ref_repl_buf_node: *mut listNode,
760 pub unindexed_count: size_t,
761 pub blocks_index: *mut rax,
762 pub histlen: libc::c_longlong,
763 pub offset: libc::c_longlong,
764}
765#[derive(Copy, Clone)]
766#[repr(C)]
767pub struct saveparam {
768 pub seconds: time_t,
769 pub changes: libc::c_int,
770}
771#[derive(Copy, Clone)]
772#[repr(C)]
773pub struct sentinelConfig {
774 pub pre_monitor_cfg: *mut list,
775 pub monitor_cfg: *mut list,
776 pub post_monitor_cfg: *mut list,
777}
778#[derive(Copy, Clone)]
779#[repr(C)]
780pub struct clientBufferLimitsConfig {
781 pub hard_limit_bytes: libc::c_ulonglong,
782 pub soft_limit_bytes: libc::c_ulonglong,
783 pub soft_limit_seconds: time_t,
784}
785#[derive(Copy, Clone)]
786#[repr(C)]
787pub struct redisOp {
788 pub argv: *mut *mut robj,
789 pub argc: libc::c_int,
790 pub dbid: libc::c_int,
791 pub target: libc::c_int,
792}
793#[derive(Copy, Clone)]
794#[repr(C)]
795pub struct redisOpArray {
796 pub ops: *mut redisOp,
797 pub numops: libc::c_int,
798 pub capacity: libc::c_int,
799}
800#[derive(Copy, Clone)]
801#[repr(C)]
802pub struct malloc_stats {
803 pub zmalloc_used: size_t,
804 pub process_rss: size_t,
805 pub allocator_allocated: size_t,
806 pub allocator_active: size_t,
807 pub allocator_resident: size_t,
808}
809#[derive(Copy, Clone)]
810#[repr(C)]
811pub struct socketFds {
812 pub fd: [libc::c_int; 16],
813 pub count: libc::c_int,
814}
815#[derive(Copy, Clone)]
816#[repr(C)]
817pub struct redisTLSContextConfig {
818 pub cert_file: *mut libc::c_char,
819 pub key_file: *mut libc::c_char,
820 pub key_file_pass: *mut libc::c_char,
821 pub client_cert_file: *mut libc::c_char,
822 pub client_key_file: *mut libc::c_char,
823 pub client_key_file_pass: *mut libc::c_char,
824 pub dh_params_file: *mut libc::c_char,
825 pub ca_cert_file: *mut libc::c_char,
826 pub ca_cert_dir: *mut libc::c_char,
827 pub protocols: *mut libc::c_char,
828 pub ciphers: *mut libc::c_char,
829 pub ciphersuites: *mut libc::c_char,
830 pub prefer_server_ciphers: libc::c_int,
831 pub session_caching: libc::c_int,
832 pub session_cache_size: libc::c_int,
833 pub session_cache_timeout: libc::c_int,
834}
835pub type aof_file_type = libc::c_uint;
836pub const AOF_FILE_TYPE_INCR: aof_file_type = 105;
837pub const AOF_FILE_TYPE_HIST: aof_file_type = 104;
838pub const AOF_FILE_TYPE_BASE: aof_file_type = 98;
839#[derive(Copy, Clone)]
840#[repr(C)]
841pub struct aofInfo {
842 pub file_name: sds,
843 pub file_seq: libc::c_longlong,
844 pub file_type: aof_file_type,
845}
846#[derive(Copy, Clone)]
847#[repr(C)]
848pub struct aofManifest {
849 pub base_aof_info: *mut aofInfo,
850 pub incr_aof_list: *mut list,
851 pub history_aof_list: *mut list,
852 pub curr_base_file_seq: libc::c_longlong,
853 pub curr_incr_file_seq: libc::c_longlong,
854 pub dirty: libc::c_int,
855}
856#[derive(Copy, Clone)]
857#[repr(C)]
858pub struct redisServer {
859 pub pid: pid_t,
860 pub main_thread_id: pthread_t,
861 pub configfile: *mut libc::c_char,
862 pub executable: *mut libc::c_char,
863 pub exec_argv: *mut *mut libc::c_char,
864 pub dynamic_hz: libc::c_int,
865 pub config_hz: libc::c_int,
866 pub umask: mode_t,
867 pub hz: libc::c_int,
868 pub in_fork_child: libc::c_int,
869 pub db: *mut redisDb,
870 pub commands: *mut dict,
871 pub orig_commands: *mut dict,
872 pub el: *mut aeEventLoop,
873 pub errors: *mut rax,
874 pub lruclock: atomic_uint,
875 pub shutdown_asap: sig_atomic_t,
876 pub shutdown_mstime: mstime_t,
877 pub last_sig_received: libc::c_int,
878 pub shutdown_flags: libc::c_int,
879 pub activerehashing: libc::c_int,
880 pub active_defrag_running: libc::c_int,
881 pub pidfile: *mut libc::c_char,
882 pub arch_bits: libc::c_int,
883 pub cronloops: libc::c_int,
884 pub runid: [libc::c_char; 41],
885 pub sentinel_mode: libc::c_int,
886 pub initial_memory_usage: size_t,
887 pub always_show_logo: libc::c_int,
888 pub in_exec: libc::c_int,
889 pub busy_module_yield_flags: libc::c_int,
890 pub busy_module_yield_reply: *const libc::c_char,
891 pub core_propagates: libc::c_int,
892 pub propagate_no_multi: libc::c_int,
893 pub module_ctx_nesting: libc::c_int,
894 pub ignore_warnings: *mut libc::c_char,
895 pub client_pause_in_transaction: libc::c_int,
896 pub thp_enabled: libc::c_int,
897 pub page_size: size_t,
898 pub moduleapi: *mut dict,
899 pub sharedapi: *mut dict,
900 pub module_configs_queue: *mut dict,
901 pub loadmodule_queue: *mut list,
902 pub module_pipe: [libc::c_int; 2],
903 pub child_pid: pid_t,
904 pub child_type: libc::c_int,
905 pub port: libc::c_int,
906 pub tls_port: libc::c_int,
907 pub tcp_backlog: libc::c_int,
908 pub bindaddr: [*mut libc::c_char; 16],
909 pub bindaddr_count: libc::c_int,
910 pub bind_source_addr: *mut libc::c_char,
911 pub unixsocket: *mut libc::c_char,
912 pub unixsocketperm: libc::c_uint,
913 pub ipfd: socketFds,
914 pub tlsfd: socketFds,
915 pub sofd: libc::c_int,
916 pub socket_mark_id: uint32_t,
917 pub cfd: socketFds,
918 pub clients: *mut list,
919 pub clients_to_close: *mut list,
920 pub clients_pending_write: *mut list,
921 pub clients_pending_read: *mut list,
922 pub slaves: *mut list,
923 pub monitors: *mut list,
924 pub current_client: *mut client,
925 pub client_mem_usage_buckets: *mut clientMemUsageBucket,
926 pub clients_timeout_table: *mut rax,
927 pub fixed_time_expire: libc::c_long,
928 pub in_nested_call: libc::c_int,
929 pub clients_index: *mut rax,
930 pub client_pause_type: pause_type,
931 pub postponed_clients: *mut list,
932 pub client_pause_end_time: mstime_t,
933 pub client_pause_per_purpose: [*mut pause_event; 3],
934 pub neterr: [libc::c_char; 256],
935 pub migrate_cached_sockets: *mut dict,
936 pub next_client_id: uint_least64_t,
937 pub protected_mode: libc::c_int,
938 pub io_threads_num: libc::c_int,
939 pub io_threads_do_reads: libc::c_int,
940 pub io_threads_active: libc::c_int,
941 pub events_processed_while_blocked: libc::c_longlong,
942 pub enable_protected_configs: libc::c_int,
943 pub enable_debug_cmd: libc::c_int,
944 pub enable_module_cmd: libc::c_int,
945 pub loading: sig_atomic_t,
946 pub async_loading: sig_atomic_t,
947 pub loading_total_bytes: off_t,
948 pub loading_rdb_used_mem: off_t,
949 pub loading_loaded_bytes: off_t,
950 pub loading_start_time: time_t,
951 pub loading_process_events_interval_bytes: off_t,
952 pub stat_starttime: time_t,
953 pub stat_numcommands: libc::c_longlong,
954 pub stat_numconnections: libc::c_longlong,
955 pub stat_expiredkeys: libc::c_longlong,
956 pub stat_expired_stale_perc: libc::c_double,
957 pub stat_expired_time_cap_reached_count: libc::c_longlong,
958 pub stat_expire_cycle_time_used: libc::c_longlong,
959 pub stat_evictedkeys: libc::c_longlong,
960 pub stat_evictedclients: libc::c_longlong,
961 pub stat_total_eviction_exceeded_time: libc::c_longlong,
962 pub stat_last_eviction_exceeded_time: monotime,
963 pub stat_keyspace_hits: libc::c_longlong,
964 pub stat_keyspace_misses: libc::c_longlong,
965 pub stat_active_defrag_hits: libc::c_longlong,
966 pub stat_active_defrag_misses: libc::c_longlong,
967 pub stat_active_defrag_key_hits: libc::c_longlong,
968 pub stat_active_defrag_key_misses: libc::c_longlong,
969 pub stat_active_defrag_scanned: libc::c_longlong,
970 pub stat_total_active_defrag_time: libc::c_longlong,
971 pub stat_last_active_defrag_time: monotime,
972 pub stat_peak_memory: size_t,
973 pub stat_aof_rewrites: libc::c_longlong,
974 pub stat_aofrw_consecutive_failures: libc::c_longlong,
975 pub stat_rdb_saves: libc::c_longlong,
976 pub stat_fork_time: libc::c_longlong,
977 pub stat_fork_rate: libc::c_double,
978 pub stat_total_forks: libc::c_longlong,
979 pub stat_rejected_conn: libc::c_longlong,
980 pub stat_sync_full: libc::c_longlong,
981 pub stat_sync_partial_ok: libc::c_longlong,
982 pub stat_sync_partial_err: libc::c_longlong,
983 pub slowlog: *mut list,
984 pub slowlog_entry_id: libc::c_longlong,
985 pub slowlog_log_slower_than: libc::c_longlong,
986 pub slowlog_max_len: libc::c_ulong,
987 pub cron_malloc_stats: malloc_stats,
988 pub stat_net_input_bytes: atomic_llong,
989 pub stat_net_output_bytes: atomic_llong,
990 pub stat_net_repl_input_bytes: atomic_llong,
991 pub stat_net_repl_output_bytes: atomic_llong,
992 pub stat_current_cow_peak: size_t,
993 pub stat_current_cow_bytes: size_t,
994 pub stat_current_cow_updated: monotime,
995 pub stat_current_save_keys_processed: size_t,
996 pub stat_current_save_keys_total: size_t,
997 pub stat_rdb_cow_bytes: size_t,
998 pub stat_aof_cow_bytes: size_t,
999 pub stat_module_cow_bytes: size_t,
1000 pub stat_module_progress: libc::c_double,
1001 pub stat_clients_type_memory: [size_t; 4],
1002 pub stat_cluster_links_memory: size_t,
1003 pub stat_unexpected_error_replies: libc::c_longlong,
1004 pub stat_total_error_replies: libc::c_longlong,
1005 pub stat_dump_payload_sanitizations: libc::c_longlong,
1006 pub stat_io_reads_processed: libc::c_longlong,
1007 pub stat_io_writes_processed: libc::c_longlong,
1008 pub stat_total_reads_processed: atomic_llong,
1009 pub stat_total_writes_processed: atomic_llong,
1010 pub inst_metric: [C2RustUnnamed_6; 5],
1011 pub stat_reply_buffer_shrinks: libc::c_longlong,
1012 pub stat_reply_buffer_expands: libc::c_longlong,
1013 pub verbosity: libc::c_int,
1014 pub maxidletime: libc::c_int,
1015 pub tcpkeepalive: libc::c_int,
1016 pub active_expire_enabled: libc::c_int,
1017 pub active_expire_effort: libc::c_int,
1018 pub active_defrag_enabled: libc::c_int,
1019 pub sanitize_dump_payload: libc::c_int,
1020 pub skip_checksum_validation: libc::c_int,
1021 pub jemalloc_bg_thread: libc::c_int,
1022 pub active_defrag_ignore_bytes: size_t,
1023 pub active_defrag_threshold_lower: libc::c_int,
1024 pub active_defrag_threshold_upper: libc::c_int,
1025 pub active_defrag_cycle_min: libc::c_int,
1026 pub active_defrag_cycle_max: libc::c_int,
1027 pub active_defrag_max_scan_fields: libc::c_ulong,
1028 pub client_max_querybuf_len: size_t,
1029 pub dbnum: libc::c_int,
1030 pub supervised: libc::c_int,
1031 pub supervised_mode: libc::c_int,
1032 pub daemonize: libc::c_int,
1033 pub set_proc_title: libc::c_int,
1034 pub proc_title_template: *mut libc::c_char,
1035 pub client_obuf_limits: [clientBufferLimitsConfig; 3],
1036 pub pause_cron: libc::c_int,
1037 pub latency_tracking_enabled: libc::c_int,
1038 pub latency_tracking_info_percentiles: *mut libc::c_double,
1039 pub latency_tracking_info_percentiles_len: libc::c_int,
1040 pub aof_enabled: libc::c_int,
1041 pub aof_state: libc::c_int,
1042 pub aof_fsync: libc::c_int,
1043 pub aof_filename: *mut libc::c_char,
1044 pub aof_dirname: *mut libc::c_char,
1045 pub aof_no_fsync_on_rewrite: libc::c_int,
1046 pub aof_rewrite_perc: libc::c_int,
1047 pub aof_rewrite_min_size: off_t,
1048 pub aof_rewrite_base_size: off_t,
1049 pub aof_current_size: off_t,
1050 pub aof_last_incr_size: off_t,
1051 pub aof_fsync_offset: off_t,
1052 pub aof_flush_sleep: libc::c_int,
1053 pub aof_rewrite_scheduled: libc::c_int,
1054 pub aof_buf: sds,
1055 pub aof_fd: libc::c_int,
1056 pub aof_selected_db: libc::c_int,
1057 pub aof_flush_postponed_start: time_t,
1058 pub aof_last_fsync: time_t,
1059 pub aof_rewrite_time_last: time_t,
1060 pub aof_rewrite_time_start: time_t,
1061 pub aof_cur_timestamp: time_t,
1062 pub aof_timestamp_enabled: libc::c_int,
1063 pub aof_lastbgrewrite_status: libc::c_int,
1064 pub aof_delayed_fsync: libc::c_ulong,
1065 pub aof_rewrite_incremental_fsync: libc::c_int,
1066 pub rdb_save_incremental_fsync: libc::c_int,
1067 pub aof_last_write_status: libc::c_int,
1068 pub aof_last_write_errno: libc::c_int,
1069 pub aof_load_truncated: libc::c_int,
1070 pub aof_use_rdb_preamble: libc::c_int,
1071 pub aof_bio_fsync_status: atomic_int,
1072 pub aof_bio_fsync_errno: atomic_int,
1073 pub aof_manifest: *mut aofManifest,
1074 pub aof_disable_auto_gc: libc::c_int,
1075 pub dirty: libc::c_longlong,
1076 pub dirty_before_bgsave: libc::c_longlong,
1077 pub rdb_last_load_keys_expired: libc::c_longlong,
1078 pub rdb_last_load_keys_loaded: libc::c_longlong,
1079 pub saveparams: *mut saveparam,
1080 pub saveparamslen: libc::c_int,
1081 pub rdb_filename: *mut libc::c_char,
1082 pub rdb_compression: libc::c_int,
1083 pub rdb_checksum: libc::c_int,
1084 pub rdb_del_sync_files: libc::c_int,
1085 pub lastsave: time_t,
1086 pub lastbgsave_try: time_t,
1087 pub rdb_save_time_last: time_t,
1088 pub rdb_save_time_start: time_t,
1089 pub rdb_bgsave_scheduled: libc::c_int,
1090 pub rdb_child_type: libc::c_int,
1091 pub lastbgsave_status: libc::c_int,
1092 pub stop_writes_on_bgsave_err: libc::c_int,
1093 pub rdb_pipe_read: libc::c_int,
1094 pub rdb_child_exit_pipe: libc::c_int,
1095 pub rdb_pipe_conns: *mut *mut connection,
1096 pub rdb_pipe_numconns: libc::c_int,
1097 pub rdb_pipe_numconns_writing: libc::c_int,
1098 pub rdb_pipe_buff: *mut libc::c_char,
1099 pub rdb_pipe_bufflen: libc::c_int,
1100 pub rdb_key_save_delay: libc::c_int,
1101 pub key_load_delay: libc::c_int,
1102 pub child_info_pipe: [libc::c_int; 2],
1103 pub child_info_nread: libc::c_int,
1104 pub also_propagate: redisOpArray,
1105 pub replication_allowed: libc::c_int,
1106 pub logfile: *mut libc::c_char,
1107 pub syslog_enabled: libc::c_int,
1108 pub syslog_ident: *mut libc::c_char,
1109 pub syslog_facility: libc::c_int,
1110 pub crashlog_enabled: libc::c_int,
1111 pub memcheck_enabled: libc::c_int,
1112 pub use_exit_on_panic: libc::c_int,
1113 pub shutdown_timeout: libc::c_int,
1114 pub shutdown_on_sigint: libc::c_int,
1115 pub shutdown_on_sigterm: libc::c_int,
1116 pub replid: [libc::c_char; 41],
1117 pub replid2: [libc::c_char; 41],
1118 pub master_repl_offset: libc::c_longlong,
1119 pub second_replid_offset: libc::c_longlong,
1120 pub slaveseldb: libc::c_int,
1121 pub repl_ping_slave_period: libc::c_int,
1122 pub repl_backlog: *mut replBacklog,
1123 pub repl_backlog_size: libc::c_longlong,
1124 pub repl_backlog_time_limit: time_t,
1125 pub repl_no_slaves_since: time_t,
1126 pub repl_min_slaves_to_write: libc::c_int,
1127 pub repl_min_slaves_max_lag: libc::c_int,
1128 pub repl_good_slaves_count: libc::c_int,
1129 pub repl_diskless_sync: libc::c_int,
1130 pub repl_diskless_load: libc::c_int,
1131 pub repl_diskless_sync_delay: libc::c_int,
1132 pub repl_diskless_sync_max_replicas: libc::c_int,
1133 pub repl_buffer_mem: size_t,
1134 pub repl_buffer_blocks: *mut list,
1135 pub masteruser: *mut libc::c_char,
1136 pub masterauth: sds,
1137 pub masterhost: *mut libc::c_char,
1138 pub masterport: libc::c_int,
1139 pub repl_timeout: libc::c_int,
1140 pub master: *mut client,
1141 pub cached_master: *mut client,
1142 pub repl_syncio_timeout: libc::c_int,
1143 pub repl_state: libc::c_int,
1144 pub repl_transfer_size: off_t,
1145 pub repl_transfer_read: off_t,
1146 pub repl_transfer_last_fsync_off: off_t,
1147 pub repl_transfer_s: *mut connection,
1148 pub repl_transfer_fd: libc::c_int,
1149 pub repl_transfer_tmpfile: *mut libc::c_char,
1150 pub repl_transfer_lastio: time_t,
1151 pub repl_serve_stale_data: libc::c_int,
1152 pub repl_slave_ro: libc::c_int,
1153 pub repl_slave_ignore_maxmemory: libc::c_int,
1154 pub repl_down_since: time_t,
1155 pub repl_disable_tcp_nodelay: libc::c_int,
1156 pub slave_priority: libc::c_int,
1157 pub replica_announced: libc::c_int,
1158 pub slave_announce_port: libc::c_int,
1159 pub slave_announce_ip: *mut libc::c_char,
1160 pub propagation_error_behavior: libc::c_int,
1161 pub repl_ignore_disk_write_error: libc::c_int,
1162 pub master_replid: [libc::c_char; 41],
1163 pub master_initial_offset: libc::c_longlong,
1164 pub repl_slave_lazy_flush: libc::c_int,
1165 pub clients_waiting_acks: *mut list,
1166 pub get_ack_from_slaves: libc::c_int,
1167 pub maxclients: libc::c_uint,
1168 pub maxmemory: libc::c_ulonglong,
1169 pub maxmemory_clients: ssize_t,
1170 pub maxmemory_policy: libc::c_int,
1171 pub maxmemory_samples: libc::c_int,
1172 pub maxmemory_eviction_tenacity: libc::c_int,
1173 pub lfu_log_factor: libc::c_int,
1174 pub lfu_decay_time: libc::c_int,
1175 pub proto_max_bulk_len: libc::c_longlong,
1176 pub oom_score_adj_values: [libc::c_int; 3],
1177 pub oom_score_adj: libc::c_int,
1178 pub disable_thp: libc::c_int,
1179 pub blocked_clients: libc::c_uint,
1180 pub blocked_clients_by_type: [libc::c_uint; 8],
1181 pub unblocked_clients: *mut list,
1182 pub ready_keys: *mut list,
1183 pub tracking_clients: libc::c_uint,
1184 pub tracking_table_max_keys: size_t,
1185 pub tracking_pending_keys: *mut list,
1186 pub sort_desc: libc::c_int,
1187 pub sort_alpha: libc::c_int,
1188 pub sort_bypattern: libc::c_int,
1189 pub sort_store: libc::c_int,
1190 pub hash_max_listpack_entries: size_t,
1191 pub hash_max_listpack_value: size_t,
1192 pub set_max_intset_entries: size_t,
1193 pub zset_max_listpack_entries: size_t,
1194 pub zset_max_listpack_value: size_t,
1195 pub hll_sparse_max_bytes: size_t,
1196 pub stream_node_max_bytes: size_t,
1197 pub stream_node_max_entries: libc::c_longlong,
1198 pub list_max_listpack_size: libc::c_int,
1199 pub list_compress_depth: libc::c_int,
1200 pub unixtime: atomic_int,
1201 pub timezone: time_t,
1202 pub daylight_active: libc::c_int,
1203 pub mstime: mstime_t,
1204 pub ustime: ustime_t,
1205 pub blocking_op_nesting: size_t,
1206 pub blocked_last_cron: libc::c_longlong,
1207 pub pubsub_channels: *mut dict,
1208 pub pubsub_patterns: *mut dict,
1209 pub notify_keyspace_events: libc::c_int,
1210 pub pubsubshard_channels: *mut dict,
1211 pub cluster_enabled: libc::c_int,
1212 pub cluster_port: libc::c_int,
1213 pub cluster_node_timeout: mstime_t,
1214 pub cluster_configfile: *mut libc::c_char,
1215 pub cluster: *mut clusterState,
1216 pub cluster_migration_barrier: libc::c_int,
1217 pub cluster_allow_replica_migration: libc::c_int,
1218 pub cluster_slave_validity_factor: libc::c_int,
1219 pub cluster_require_full_coverage: libc::c_int,
1220 pub cluster_slave_no_failover: libc::c_int,
1221 pub cluster_announce_ip: *mut libc::c_char,
1222 pub cluster_announce_hostname: *mut libc::c_char,
1223 pub cluster_preferred_endpoint_type: libc::c_int,
1224 pub cluster_announce_port: libc::c_int,
1225 pub cluster_announce_tls_port: libc::c_int,
1226 pub cluster_announce_bus_port: libc::c_int,
1227 pub cluster_module_flags: libc::c_int,
1228 pub cluster_allow_reads_when_down: libc::c_int,
1229 pub cluster_config_file_lock_fd: libc::c_int,
1230 pub cluster_link_sendbuf_limit_bytes: libc::c_ulonglong,
1231 pub cluster_drop_packet_filter: libc::c_int,
1232 pub script_caller: *mut client,
1233 pub busy_reply_threshold: mstime_t,
1234 pub pre_command_oom_state: libc::c_int,
1235 pub script_disable_deny_script: libc::c_int,
1236 pub lazyfree_lazy_eviction: libc::c_int,
1237 pub lazyfree_lazy_expire: libc::c_int,
1238 pub lazyfree_lazy_server_del: libc::c_int,
1239 pub lazyfree_lazy_user_del: libc::c_int,
1240 pub lazyfree_lazy_user_flush: libc::c_int,
1241 pub latency_monitor_threshold: libc::c_longlong,
1242 pub latency_events: *mut dict,
1243 pub acl_filename: *mut libc::c_char,
1244 pub acllog_max_len: libc::c_ulong,
1245 pub requirepass: sds,
1246 pub acl_pubsub_default: libc::c_int,
1247 pub watchdog_period: libc::c_int,
1248 pub system_memory_size: size_t,
1249 pub tls_cluster: libc::c_int,
1250 pub tls_replication: libc::c_int,
1251 pub tls_auth_clients: libc::c_int,
1252 pub tls_ctx_config: redisTLSContextConfig,
1253 pub server_cpulist: *mut libc::c_char,
1254 pub bio_cpulist: *mut libc::c_char,
1255 pub aof_rewrite_cpulist: *mut libc::c_char,
1256 pub bgsave_cpulist: *mut libc::c_char,
1257 pub sentinel_config: *mut sentinelConfig,
1258 pub failover_end_time: mstime_t,
1259 pub force_failover: libc::c_int,
1260 pub target_replica_host: *mut libc::c_char,
1261 pub target_replica_port: libc::c_int,
1262 pub failover_state: libc::c_int,
1263 pub cluster_allow_pubsubshard_when_down: libc::c_int,
1264 pub reply_buffer_peak_reset_time: libc::c_long,
1265 pub reply_buffer_resizing_enabled: libc::c_int,
1266}
1267#[derive(Copy, Clone)]
1268#[repr(C)]
1269pub struct clusterState {
1270 pub myself: *mut clusterNode,
1271 pub currentEpoch: uint64_t,
1272 pub state: libc::c_int,
1273 pub size: libc::c_int,
1274 pub nodes: *mut dict,
1275 pub nodes_black_list: *mut dict,
1276 pub migrating_slots_to: [*mut clusterNode; 16384],
1277 pub importing_slots_from: [*mut clusterNode; 16384],
1278 pub slots: [*mut clusterNode; 16384],
1279 pub slots_to_channels: *mut rax,
1280 pub failover_auth_time: mstime_t,
1281 pub failover_auth_count: libc::c_int,
1282 pub failover_auth_sent: libc::c_int,
1283 pub failover_auth_rank: libc::c_int,
1284 pub failover_auth_epoch: uint64_t,
1285 pub cant_failover_reason: libc::c_int,
1286 pub mf_end: mstime_t,
1287 pub mf_slave: *mut clusterNode,
1288 pub mf_master_offset: libc::c_longlong,
1289 pub mf_can_start: libc::c_int,
1290 pub lastVoteEpoch: uint64_t,
1291 pub todo_before_sleep: libc::c_int,
1292 pub stats_bus_messages_sent: [libc::c_longlong; 11],
1293 pub stats_bus_messages_received: [libc::c_longlong; 11],
1294 pub stats_pfail_nodes: libc::c_longlong,
1295 pub stat_cluster_links_buffer_limit_exceeded: libc::c_ulonglong,
1296}
1297#[derive(Copy, Clone)]
1298#[repr(C)]
1299pub struct clusterNode {
1300 pub ctime: mstime_t,
1301 pub name: [libc::c_char; 40],
1302 pub flags: libc::c_int,
1303 pub configEpoch: uint64_t,
1304 pub slots: [libc::c_uchar; 2048],
1305 pub slot_info_pairs: *mut uint16_t,
1306 pub slot_info_pairs_count: libc::c_int,
1307 pub numslots: libc::c_int,
1308 pub numslaves: libc::c_int,
1309 pub slaves: *mut *mut clusterNode,
1310 pub slaveof: *mut clusterNode,
1311 pub last_in_ping_gossip: libc::c_ulonglong,
1312 pub ping_sent: mstime_t,
1313 pub pong_received: mstime_t,
1314 pub data_received: mstime_t,
1315 pub fail_time: mstime_t,
1316 pub voted_time: mstime_t,
1317 pub repl_offset_time: mstime_t,
1318 pub orphaned_time: mstime_t,
1319 pub repl_offset: libc::c_longlong,
1320 pub ip: [libc::c_char; 46],
1321 pub hostname: sds,
1322 pub port: libc::c_int,
1323 pub pport: libc::c_int,
1324 pub cport: libc::c_int,
1325 pub link: *mut clusterLink,
1326 pub inbound_link: *mut clusterLink,
1327 pub fail_reports: *mut list,
1328}
1329#[derive(Copy, Clone)]
1330#[repr(C)]
1331pub struct clusterLink {
1332 pub ctime: mstime_t,
1333 pub conn: *mut connection,
1334 pub sndbuf: sds,
1335 pub rcvbuf: *mut libc::c_char,
1336 pub rcvbuf_len: size_t,
1337 pub rcvbuf_alloc: size_t,
1338 pub node: *mut clusterNode,
1339 pub inbound: libc::c_int,
1340}
1341#[derive(Copy, Clone)]
1342#[repr(C)]
1343pub struct C2RustUnnamed_6 {
1344 pub last_sample_time: libc::c_longlong,
1345 pub last_sample_count: libc::c_longlong,
1346 pub samples: [libc::c_longlong; 16],
1347 pub idx: libc::c_int,
1348}
1349#[no_mangle]
1350pub unsafe extern "C" fn checkBlockedClientTimeout(
1351 mut c: *mut client,
1352 mut now: mstime_t,
1353) -> libc::c_int {
1354 if (*c).flags & ((1 as libc::c_int) << 4 as libc::c_int) as libc::c_ulong != 0
1355 && (*c).bpop.timeout != 0 as libc::c_int as libc::c_longlong
1356 && (*c).bpop.timeout < now
1357 {
1358 replyToBlockedClientTimedOut(c);
1359 unblockClient(c);
1360 return 1 as libc::c_int;
1361 } else {
1362 return 0 as libc::c_int
1363 };
1364}
1365#[no_mangle]
1366pub unsafe extern "C" fn clientsCronHandleTimeout(
1367 mut c: *mut client,
1368 mut now_ms: mstime_t,
1369) -> libc::c_int {
1370 let mut now: time_t = (now_ms / 1000 as libc::c_int as libc::c_longlong) as time_t;
1371 if server.maxidletime != 0
1372 && (*c).flags & ((1 as libc::c_int) << 0 as libc::c_int) as libc::c_ulong == 0
1373 && mustObeyClient(c) == 0
1374 && (*c).flags & ((1 as libc::c_int) << 4 as libc::c_int) as libc::c_ulong == 0
1375 && (*c).flags & ((1 as libc::c_int) << 18 as libc::c_int) as libc::c_ulong == 0
1376 && now - (*c).lastinteraction > server.maxidletime as libc::c_long
1377 {
1378 if !((1 as libc::c_int & 0xff as libc::c_int) < server.verbosity) {
1379 _serverLog(
1380 1 as libc::c_int,
1381 b"Closing idle client\0" as *const u8 as *const libc::c_char,
1382 );
1383 }
1384 freeClient(c);
1385 return 1 as libc::c_int;
1386 } else {
1387 if (*c).flags & ((1 as libc::c_int) << 4 as libc::c_int) as libc::c_ulong != 0 {
1388 if server.cluster_enabled != 0 {
1389 if clusterRedirectBlockedClientIfNeeded(c) != 0 {
1390 unblockClient(c);
1391 }
1392 }
1393 }
1394 }
1395 return 0 as libc::c_int;
1396}
1397#[no_mangle]
1398pub unsafe extern "C" fn encodeTimeoutKey(
1399 mut buf: *mut libc::c_uchar,
1400 mut timeout: uint64_t,
1401 mut c: *mut client,
1402) {
1403 timeout = intrev64(timeout);
1404 memcpy(
1405 buf as *mut libc::c_void,
1406 &mut timeout as *mut uint64_t as *const libc::c_void,
1407 core::mem::size_of::<uint64_t>() as libc::c_ulong,
1408 );
1409 memcpy(
1410 buf.offset(8 as libc::c_int as isize) as *mut libc::c_void,
1411 &mut c as *mut *mut client as *const libc::c_void,
1412 core::mem::size_of::<*mut client>() as libc::c_ulong,
1413 );
1414 if core::mem::size_of::<*mut client>() as libc::c_ulong
1415 == 4 as libc::c_int as libc::c_ulong
1416 {
1417 memset(
1418 buf.offset(12 as libc::c_int as isize) as *mut libc::c_void,
1419 0 as libc::c_int,
1420 4 as libc::c_int as libc::c_ulong,
1421 );
1422 }
1423}
1424#[no_mangle]
1425pub unsafe extern "C" fn decodeTimeoutKey(
1426 mut buf: *mut libc::c_uchar,
1427 mut toptr: *mut uint64_t,
1428 mut cptr: *mut *mut client,
1429) {
1430 memcpy(
1431 toptr as *mut libc::c_void,
1432 buf as *const libc::c_void,
1433 core::mem::size_of::<uint64_t>() as libc::c_ulong,
1434 );
1435 *toptr = intrev64(*toptr);
1436 memcpy(
1437 cptr as *mut libc::c_void,
1438 buf.offset(8 as libc::c_int as isize) as *const libc::c_void,
1439 core::mem::size_of::<*mut client>() as libc::c_ulong,
1440 );
1441}
1442#[no_mangle]
1443pub unsafe extern "C" fn addClientToTimeoutTable(mut c: *mut client) {
1444 if (*c).bpop.timeout == 0 as libc::c_int as libc::c_longlong {
1445 return;
1446 }
1447 let mut timeout: uint64_t = (*c).bpop.timeout as uint64_t;
1448 let mut buf: [libc::c_uchar; 16] = [0; 16];
1449 encodeTimeoutKey(buf.as_mut_ptr(), timeout, c);
1450 if raxTryInsert(
1451 server.clients_timeout_table,
1452 buf.as_mut_ptr(),
1453 core::mem::size_of::<[libc::c_uchar; 16]>() as libc::c_ulong,
1454 0 as *mut libc::c_void,
1455 0 as *mut *mut libc::c_void,
1456 ) != 0
1457 {
1458 (*c)
1459 .flags = ((*c).flags as libc::c_ulonglong
1460 | (1 as libc::c_ulonglong) << 38 as libc::c_int) as uint64_t;
1461 }
1462}
1463#[no_mangle]
1464pub unsafe extern "C" fn removeClientFromTimeoutTable(mut c: *mut client) {
1465 if (*c).flags as libc::c_ulonglong & (1 as libc::c_ulonglong) << 38 as libc::c_int
1466 == 0
1467 {
1468 return;
1469 }
1470 (*c)
1471 .flags = ((*c).flags as libc::c_ulonglong
1472 & !((1 as libc::c_ulonglong) << 38 as libc::c_int)) as uint64_t;
1473 let mut timeout: uint64_t = (*c).bpop.timeout as uint64_t;
1474 let mut buf: [libc::c_uchar; 16] = [0; 16];
1475 encodeTimeoutKey(buf.as_mut_ptr(), timeout, c);
1476 raxRemove(
1477 server.clients_timeout_table,
1478 buf.as_mut_ptr(),
1479 core::mem::size_of::<[libc::c_uchar; 16]>() as libc::c_ulong,
1480 0 as *mut *mut libc::c_void,
1481 );
1482}
1483#[no_mangle]
1484pub unsafe extern "C" fn handleBlockedClientsTimeout() {
1485 if raxSize(server.clients_timeout_table) == 0 as libc::c_int as libc::c_ulong {
1486 return;
1487 }
1488 let mut now: uint64_t = mstime() as uint64_t;
1489 let mut ri: raxIterator = raxIterator {
1490 flags: 0,
1491 rt: 0 as *mut rax,
1492 key: 0 as *mut libc::c_uchar,
1493 data: 0 as *mut libc::c_void,
1494 key_len: 0,
1495 key_max: 0,
1496 key_static_string: [0; 128],
1497 node: 0 as *mut raxNode,
1498 stack: raxStack {
1499 stack: 0 as *mut *mut libc::c_void,
1500 items: 0,
1501 maxitems: 0,
1502 static_items: [0 as *mut libc::c_void; 32],
1503 oom: 0,
1504 },
1505 node_cb: None,
1506 };
1507 raxStart(&mut ri, server.clients_timeout_table);
1508 raxSeek(
1509 &mut ri,
1510 b"^\0" as *const u8 as *const libc::c_char,
1511 0 as *mut libc::c_uchar,
1512 0 as libc::c_int as size_t,
1513 );
1514 while raxNext(&mut ri) != 0 {
1515 let mut timeout: uint64_t = 0;
1516 let mut c: *mut client = 0 as *mut client;
1517 decodeTimeoutKey(ri.key, &mut timeout, &mut c);
1518 if timeout >= now {
1519 break;
1520 }
1521 (*c)
1522 .flags = ((*c).flags as libc::c_ulonglong
1523 & !((1 as libc::c_ulonglong) << 38 as libc::c_int)) as uint64_t;
1524 checkBlockedClientTimeout(c, now as mstime_t);
1525 raxRemove(
1526 server.clients_timeout_table,
1527 ri.key,
1528 ri.key_len,
1529 0 as *mut *mut libc::c_void,
1530 );
1531 raxSeek(
1532 &mut ri,
1533 b"^\0" as *const u8 as *const libc::c_char,
1534 0 as *mut libc::c_uchar,
1535 0 as libc::c_int as size_t,
1536 );
1537 }
1538 raxStop(&mut ri);
1539}
1540#[no_mangle]
1541pub unsafe extern "C" fn getTimeoutFromObjectOrReply(
1542 mut c: *mut client,
1543 mut object: *mut robj,
1544 mut timeout: *mut mstime_t,
1545 mut unit: libc::c_int,
1546) -> libc::c_int {
1547 let mut tval: libc::c_longlong = 0;
1548 let mut ftval: f64 = 0 as f64;
1549 if unit == 0 as libc::c_int {
1550 if getLongDoubleFromObjectOrReply(
1551 c,
1552 object,
1553 &mut ftval,
1554 b"timeout is not a float or out of range\0" as *const u8
1555 as *const libc::c_char,
1556 ) != 0 as libc::c_int
1557 {
1558 return -(1 as libc::c_int);
1559 }
1560 tval = ((ceill(ftval * (1000.0 as f64))) as i64);
1561 } else if getLongLongFromObjectOrReply(
1562 c,
1563 object,
1564 &mut tval,
1565 b"timeout is not an integer or out of range\0" as *const u8
1566 as *const libc::c_char,
1567 ) != 0 as libc::c_int
1568 {
1569 return -(1 as libc::c_int)
1570 }
1571 if tval < 0 as libc::c_int as libc::c_longlong {
1572 addReplyError(c, b"timeout is negative\0" as *const u8 as *const libc::c_char);
1573 return -(1 as libc::c_int);
1574 }
1575 if tval > 0 as libc::c_int as libc::c_longlong {
1576 tval += mstime();
1577 }
1578 *timeout = tval;
1579 return 0 as libc::c_int;
1580}