├── redis-4.0
├── deps
│ ├── jemalloc
│ │ ├── config.stamp.in
│ │ ├── .gitattributes
│ │ ├── test
│ │ │ ├── src
│ │ │ │ ├── math.c
│ │ │ │ ├── btalloc_0.c
│ │ │ │ ├── btalloc_1.c
│ │ │ │ ├── btalloc.c
│ │ │ │ ├── mq.c
│ │ │ │ ├── thd.c
│ │ │ │ ├── mtx.c
│ │ │ │ └── timer.c
│ │ │ ├── unit
│ │ │ │ ├── junk_free.c
│ │ │ │ ├── junk_alloc.c
│ │ │ │ ├── lg_chunk.c
│ │ │ │ ├── prof_idump.c
│ │ │ │ ├── mtx.c
│ │ │ │ ├── zero.c
│ │ │ │ ├── mq.c
│ │ │ │ ├── prof_accum.c
│ │ │ │ ├── prof_gdump.c
│ │ │ │ └── tsd.c
│ │ │ ├── include
│ │ │ │ └── test
│ │ │ │ │ ├── thd.h
│ │ │ │ │ ├── jemalloc_test_defs.h.in
│ │ │ │ │ ├── mtx.h
│ │ │ │ │ ├── timer.h
│ │ │ │ │ └── btalloc.h
│ │ │ ├── test.sh.in
│ │ │ └── integration
│ │ │ │ ├── sdallocx.c
│ │ │ │ ├── overflow.c
│ │ │ │ ├── MALLOCX_ARENA.c
│ │ │ │ └── thread_arena.c
│ │ ├── src
│ │ │ ├── mb.c
│ │ │ ├── hash.c
│ │ │ ├── atomic.c
│ │ │ ├── valgrind.c
│ │ │ ├── extent.c
│ │ │ ├── chunk_mmap.c
│ │ │ └── bitmap.c
│ │ ├── .autom4te.cfg
│ │ ├── include
│ │ │ ├── jemalloc
│ │ │ │ ├── internal
│ │ │ │ │ ├── private_unnamespace.sh
│ │ │ │ │ ├── private_namespace.sh
│ │ │ │ │ ├── public_unnamespace.sh
│ │ │ │ │ ├── public_namespace.sh
│ │ │ │ │ ├── chunk_mmap.h
│ │ │ │ │ ├── base.h
│ │ │ │ │ ├── pages.h
│ │ │ │ │ ├── chunk_dss.h
│ │ │ │ │ ├── huge.h
│ │ │ │ │ ├── jemalloc_internal_decls.h
│ │ │ │ │ ├── quarantine.h
│ │ │ │ │ ├── jemalloc_internal_macros.h
│ │ │ │ │ ├── prng.h
│ │ │ │ │ ├── qr.h
│ │ │ │ │ └── ql.h
│ │ │ │ ├── jemalloc_rename.sh
│ │ │ │ ├── jemalloc.sh
│ │ │ │ ├── jemalloc_defs.h.in
│ │ │ │ ├── jemalloc_mangle.sh
│ │ │ │ └── jemalloc_typedefs.h.in
│ │ │ └── msvc_compat
│ │ │ │ ├── C99
│ │ │ │ └── stdbool.h
│ │ │ │ ├── strings.h
│ │ │ │ └── windows_extra.h
│ │ ├── bin
│ │ │ ├── jemalloc.sh.in
│ │ │ └── jemalloc-config.in
│ │ ├── doc
│ │ │ ├── html.xsl.in
│ │ │ ├── manpages.xsl.in
│ │ │ └── stylesheet.xsl
│ │ ├── autogen.sh
│ │ ├── coverage.sh
│ │ ├── jemalloc.pc.in
│ │ ├── README
│ │ ├── COPYING
│ │ └── .gitignore
│ ├── linenoise
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ └── example.c
│ ├── lua
│ │ ├── etc
│ │ │ ├── lua.ico
│ │ │ ├── lua.hpp
│ │ │ ├── lua.pc
│ │ │ ├── all.c
│ │ │ ├── min.c
│ │ │ ├── Makefile
│ │ │ ├── strict.lua
│ │ │ ├── README
│ │ │ ├── luavs.bat
│ │ │ └── noparser.c
│ │ ├── doc
│ │ │ ├── cover.png
│ │ │ ├── logo.gif
│ │ │ ├── manual.css
│ │ │ ├── readme.html
│ │ │ └── lua.css
│ │ ├── test
│ │ │ ├── life.lua
│ │ │ ├── echo.lua
│ │ │ ├── hello.lua
│ │ │ ├── printf.lua
│ │ │ ├── env.lua
│ │ │ ├── luac.lua
│ │ │ ├── fibfor.lua
│ │ │ ├── readonly.lua
│ │ │ ├── table.lua
│ │ │ ├── cf.lua
│ │ │ ├── xd.lua
│ │ │ ├── globals.lua
│ │ │ ├── bisect.lua
│ │ │ ├── fib.lua
│ │ │ ├── factorial.lua
│ │ │ ├── sieve.lua
│ │ │ ├── trace-calls.lua
│ │ │ ├── trace-globals.lua
│ │ │ ├── README
│ │ │ └── sort.lua
│ │ ├── src
│ │ │ ├── lapi.h
│ │ │ ├── fpconv.h
│ │ │ ├── linit.c
│ │ │ ├── lstring.h
│ │ │ ├── lundump.h
│ │ │ ├── ldebug.h
│ │ │ ├── ltm.h
│ │ │ ├── lualib.h
│ │ │ ├── lfunc.h
│ │ │ ├── lvm.h
│ │ │ ├── ltable.h
│ │ │ ├── lmem.h
│ │ │ ├── lzio.h
│ │ │ ├── ltm.c
│ │ │ ├── lzio.c
│ │ │ ├── ldo.h
│ │ │ ├── llex.h
│ │ │ ├── lmem.c
│ │ │ └── lparser.h
│ │ ├── README
│ │ └── COPYRIGHT
│ ├── hiredis
│ │ ├── .gitignore
│ │ ├── fmacros.h
│ │ ├── examples
│ │ │ ├── example-qt.h
│ │ │ ├── example-qt.cpp
│ │ │ ├── example-libev.c
│ │ │ ├── example-ivykis.c
│ │ │ ├── example-libuv.c
│ │ │ ├── example-libevent.c
│ │ │ ├── example-ae.c
│ │ │ ├── example-macosx.c
│ │ │ ├── example-glib.c
│ │ │ └── example.c
│ │ ├── win32.h
│ │ ├── .travis.yml
│ │ ├── appveyor.yml
│ │ ├── COPYING
│ │ ├── sdsalloc.h
│ │ └── adapters
│ │ │ └── ivykis.h
│ └── update-jemalloc.sh
├── src
│ ├── modules
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ └── gendoc.rb
│ ├── version.h
│ ├── .gitignore
│ ├── crc64.h
│ ├── valgrind.sup
│ ├── geo.h
│ ├── mkreleasehdr.sh
│ ├── sha1.h
│ ├── rand.h
│ ├── pqsort.h
│ ├── sdsalloc.h
│ ├── rax_malloc.h
│ ├── bio.h
│ ├── release.c
│ ├── fmacros.h
│ ├── solarisfixes.h
│ ├── slowlog.h
│ ├── debugmacro.h
│ ├── intset.h
│ ├── sparkline.h
│ ├── redisassert.h
│ ├── util.h
│ └── testhelp.h
└── tests
│ └── lltostr.c
├── cmake-build-debug
└── CMakeFiles
│ └── clion-log.txt
├── .gitignore
├── README.md
└── LICENSE
/redis-4.0/deps/jemalloc/config.stamp.in:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/redis-4.0/src/modules/.gitignore:
--------------------------------------------------------------------------------
1 | *.so
2 | *.xo
3 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 |
--------------------------------------------------------------------------------
/redis-4.0/src/version.h:
--------------------------------------------------------------------------------
1 | #define REDIS_VERSION "999.999.999"
2 |
--------------------------------------------------------------------------------
/redis-4.0/deps/linenoise/.gitignore:
--------------------------------------------------------------------------------
1 | linenoise_example
2 | *.dSYM
3 | history.txt
4 |
--------------------------------------------------------------------------------
/redis-4.0/src/.gitignore:
--------------------------------------------------------------------------------
1 | *.gcda
2 | *.gcno
3 | *.gcov
4 | redis.info
5 | lcov-html
6 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/math.c:
--------------------------------------------------------------------------------
1 | #define MATH_C_
2 | #include "test/jemalloc_test.h"
3 |
--------------------------------------------------------------------------------
/cmake-build-debug/CMakeFiles/clion-log.txt:
--------------------------------------------------------------------------------
1 | CMakeLists.txt not found in E:\Project\read-redis-src
2 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/btalloc_0.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | btalloc_n_gen(0)
4 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/btalloc_1.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | btalloc_n_gen(1)
4 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/mb.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_MB_C_
2 | #include "jemalloc/internal/jemalloc_internal.h"
3 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/hash.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_HASH_C_
2 | #include "jemalloc/internal/jemalloc_internal.h"
3 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/lua.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoohack/read-redis-src/HEAD/redis-4.0/deps/lua/etc/lua.ico
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/atomic.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_ATOMIC_C_
2 | #include "jemalloc/internal/jemalloc_internal.h"
3 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/doc/cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoohack/read-redis-src/HEAD/redis-4.0/deps/lua/doc/cover.png
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/doc/logo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoohack/read-redis-src/HEAD/redis-4.0/deps/lua/doc/logo.gif
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/life.lua:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hoohack/read-redis-src/HEAD/redis-4.0/deps/lua/test/life.lua
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/.gitignore:
--------------------------------------------------------------------------------
1 | /hiredis-test
2 | /examples/hiredis-example*
3 | /*.o
4 | /*.so
5 | /*.dylib
6 | /*.a
7 | /*.pc
8 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/echo.lua:
--------------------------------------------------------------------------------
1 | -- echo command line arguments
2 |
3 | for i=0,table.getn(arg) do
4 | print(i,arg[i])
5 | end
6 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/hello.lua:
--------------------------------------------------------------------------------
1 | -- the first program in every language
2 |
3 | io.write("Hello world, from ",_VERSION,"!\n")
4 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/junk_free.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_TEST_JUNK_OPT "junk:free"
2 | #include "junk.c"
3 | #undef JEMALLOC_TEST_JUNK_OPT
4 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/junk_alloc.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_TEST_JUNK_OPT "junk:alloc"
2 | #include "junk.c"
3 | #undef JEMALLOC_TEST_JUNK_OPT
4 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/.autom4te.cfg:
--------------------------------------------------------------------------------
1 | begin-language: "Autoconf-without-aclocal-m4"
2 | args: --no-cache
3 | end-language: "Autoconf-without-aclocal-m4"
4 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/private_unnamespace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | for symbol in `cat $1` ; do
4 | echo "#undef ${symbol}"
5 | done
6 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/private_namespace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | for symbol in `cat $1` ; do
4 | echo "#define ${symbol} JEMALLOC_N(${symbol})"
5 | done
6 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/btalloc.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | void *
4 | btalloc(size_t size, unsigned bits)
5 | {
6 |
7 | return (btalloc_0(size, bits));
8 | }
9 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/public_unnamespace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | for nm in `cat $1` ; do
4 | n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'`
5 | echo "#undef je_${n}"
6 | done
7 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/public_namespace.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | for nm in `cat $1` ; do
4 | n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'`
5 | echo "#define je_${n} JEMALLOC_N(${n})"
6 | done
7 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/printf.lua:
--------------------------------------------------------------------------------
1 | -- an implementation of printf
2 |
3 | function printf(...)
4 | io.write(string.format(...))
5 | end
6 |
7 | printf("Hello %s from %s on %s\n",os.getenv"USER" or "there",_VERSION,os.date())
8 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/bin/jemalloc.sh.in:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | prefix=@prefix@
4 | exec_prefix=@exec_prefix@
5 | libdir=@libdir@
6 |
7 | @LD_PRELOAD_VAR@=${libdir}/libjemalloc.@SOREV@
8 | export @LD_PRELOAD_VAR@
9 | exec "$@"
10 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/env.lua:
--------------------------------------------------------------------------------
1 | -- read environment variables as if they were global variables
2 |
3 | local f=function (t,i) return os.getenv(i) end
4 | setmetatable(getfenv(),{__index=f})
5 |
6 | -- an example
7 | print(a,USER,PATH)
8 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/doc/html.xsl.in:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/doc/manpages.xsl.in:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/lua.hpp:
--------------------------------------------------------------------------------
1 | // lua.hpp
2 | // Lua header files for C++
3 | // <> not supplied automatically because Lua also compiles as C++
4 |
5 | extern "C" {
6 | #include "lua.h"
7 | #include "lualib.h"
8 | #include "lauxlib.h"
9 | }
10 |
--------------------------------------------------------------------------------
/redis-4.0/src/crc64.h:
--------------------------------------------------------------------------------
1 | #ifndef CRC64_H
2 | #define CRC64_H
3 |
4 | #include
5 |
6 | uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
7 |
8 | #ifdef REDIS_TEST
9 | int crc64Test(int argc, char *argv[]);
10 | #endif
11 |
12 | #endif
13 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/luac.lua:
--------------------------------------------------------------------------------
1 | -- bare-bones luac in Lua
2 | -- usage: lua luac.lua file.lua
3 |
4 | assert(arg[1]~=nil and arg[2]==nil,"usage: lua luac.lua file.lua")
5 | f=assert(io.open("luac.out","wb"))
6 | assert(f:write(string.dump(assert(loadfile(arg[1])))))
7 | assert(f:close())
8 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/include/test/thd.h:
--------------------------------------------------------------------------------
1 | /* Abstraction layer for threading in tests. */
2 | #ifdef _WIN32
3 | typedef HANDLE thd_t;
4 | #else
5 | typedef pthread_t thd_t;
6 | #endif
7 |
8 | void thd_create(thd_t *thd, void *(*proc)(void *), void *arg);
9 | void thd_join(thd_t thd, void **ret);
10 |
--------------------------------------------------------------------------------
/redis-4.0/src/valgrind.sup:
--------------------------------------------------------------------------------
1 | {
2 |
3 | Memcheck:Cond
4 | fun:lzf_compress
5 | }
6 |
7 | {
8 |
9 | Memcheck:Value4
10 | fun:lzf_compress
11 | }
12 |
13 | {
14 |
15 | Memcheck:Value8
16 | fun:lzf_compress
17 | }
18 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/fibfor.lua:
--------------------------------------------------------------------------------
1 | -- example of for with generator functions
2 |
3 | function generatefib (n)
4 | return coroutine.wrap(function ()
5 | local a,b = 1, 1
6 | while a <= n do
7 | coroutine.yield(a)
8 | a, b = b, a+b
9 | end
10 | end)
11 | end
12 |
13 | for i in generatefib(1000) do print(i) end
14 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/readonly.lua:
--------------------------------------------------------------------------------
1 | -- make global variables readonly
2 |
3 | local f=function (t,i) error("cannot redefine global variable `"..i.."'",2) end
4 | local g={}
5 | local G=getfenv()
6 | setmetatable(g,{__index=G,__newindex=f})
7 | setfenv(1,g)
8 |
9 | -- an example
10 | rawset(g,"x",3)
11 | x=2
12 | y=1 -- cannot redefine `y'
13 |
--------------------------------------------------------------------------------
/redis-4.0/deps/update-jemalloc.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | VER=$1
3 | URL="http://www.canonware.com/download/jemalloc/jemalloc-${VER}.tar.bz2"
4 | echo "Downloading $URL"
5 | curl $URL > /tmp/jemalloc.tar.bz2
6 | tar xvjf /tmp/jemalloc.tar.bz2
7 | rm -rf jemalloc
8 | mv jemalloc-${VER} jemalloc
9 | echo "Use git status, add all files and commit changes."
10 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/doc/stylesheet.xsl:
--------------------------------------------------------------------------------
1 |
2 | ansi
3 |
4 |
5 | ""
6 |
7 |
8 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lapi.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lapi.h,v 2.2.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Auxiliary functions from Lua API
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lapi_h
8 | #define lapi_h
9 |
10 |
11 | #include "lobject.h"
12 |
13 |
14 | LUAI_FUNC void luaA_pushobject (lua_State *L, const TValue *o);
15 |
16 | #endif
17 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/table.lua:
--------------------------------------------------------------------------------
1 | -- make table, grouping all data for the same item
2 | -- input is 2 columns (item, data)
3 |
4 | local A
5 | while 1 do
6 | local l=io.read()
7 | if l==nil then break end
8 | local _,_,a,b=string.find(l,'"?([_%w]+)"?%s*(.*)$')
9 | if a~=A then A=a io.write("\n",a,":") end
10 | io.write(" ",b)
11 | end
12 | io.write("\n")
13 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/autogen.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | for i in autoconf; do
4 | echo "$i"
5 | $i
6 | if [ $? -ne 0 ]; then
7 | echo "Error $? in $i"
8 | exit 1
9 | fi
10 | done
11 |
12 | echo "./configure --enable-autogen $@"
13 | ./configure --enable-autogen $@
14 | if [ $? -ne 0 ]; then
15 | echo "Error $? in ./configure"
16 | exit 1
17 | fi
18 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/include/test/jemalloc_test_defs.h.in:
--------------------------------------------------------------------------------
1 | #include "jemalloc/internal/jemalloc_internal_defs.h"
2 | #include "jemalloc/internal/jemalloc_internal_decls.h"
3 |
4 | /*
5 | * For use by SFMT. configure.ac doesn't actually define HAVE_SSE2 because its
6 | * dependencies are notoriously unportable in practice.
7 | */
8 | #undef HAVE_SSE2
9 | #undef HAVE_ALTIVEC
10 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/cf.lua:
--------------------------------------------------------------------------------
1 | -- temperature conversion table (celsius to farenheit)
2 |
3 | for c0=-20,50-1,10 do
4 | io.write("C ")
5 | for c=c0,c0+10-1 do
6 | io.write(string.format("%3.0f ",c))
7 | end
8 | io.write("\n")
9 |
10 | io.write("F ")
11 | for c=c0,c0+10-1 do
12 | f=(9/5)*c+32
13 | io.write(string.format("%3.0f ",f))
14 | end
15 | io.write("\n\n")
16 | end
17 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/coverage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -e
4 |
5 | objdir=$1
6 | suffix=$2
7 | shift 2
8 | objs=$@
9 |
10 | gcov -b -p -f -o "${objdir}" ${objs}
11 |
12 | # Move gcov outputs so that subsequent gcov invocations won't clobber results
13 | # for the same sources with different compilation flags.
14 | for f in `find . -maxdepth 1 -type f -name '*.gcov'` ; do
15 | mv "${f}" "${f}.${suffix}"
16 | done
17 |
--------------------------------------------------------------------------------
/redis-4.0/deps/linenoise/Makefile:
--------------------------------------------------------------------------------
1 | STD=
2 | WARN= -Wall
3 | OPT= -Os
4 |
5 | R_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS)
6 | R_LDFLAGS= $(LDFLAGS)
7 | DEBUG= -g
8 |
9 | R_CC=$(CC) $(R_CFLAGS)
10 | R_LD=$(CC) $(R_LDFLAGS)
11 |
12 | linenoise.o: linenoise.h linenoise.c
13 |
14 | linenoise_example: linenoise.o example.o
15 | $(R_LD) -o $@ $^
16 |
17 | .c.o:
18 | $(R_CC) -c $<
19 |
20 | clean:
21 | rm -f linenoise_example *.o
22 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/xd.lua:
--------------------------------------------------------------------------------
1 | -- hex dump
2 | -- usage: lua xd.lua < file
3 |
4 | local offset=0
5 | while true do
6 | local s=io.read(16)
7 | if s==nil then return end
8 | io.write(string.format("%08X ",offset))
9 | string.gsub(s,"(.)",
10 | function (c) io.write(string.format("%02X ",string.byte(c))) end)
11 | io.write(string.rep(" ",3*(16-string.len(s))))
12 | io.write(" ",string.gsub(s,"%c","."),"\n")
13 | offset=offset+16
14 | end
15 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/jemalloc.pc.in:
--------------------------------------------------------------------------------
1 | prefix=@prefix@
2 | exec_prefix=@exec_prefix@
3 | libdir=@libdir@
4 | includedir=@includedir@
5 | install_suffix=@install_suffix@
6 |
7 | Name: jemalloc
8 | Description: A general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support.
9 | URL: http://www.canonware.com/jemalloc
10 | Version: @jemalloc_version@
11 | Cflags: -I${includedir}
12 | Libs: -L${libdir} -ljemalloc${install_suffix}
13 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/doc/manual.css:
--------------------------------------------------------------------------------
1 | h3 code {
2 | font-family: inherit ;
3 | font-size: inherit ;
4 | }
5 |
6 | pre, code {
7 | font-size: 12pt ;
8 | }
9 |
10 | span.apii {
11 | float: right ;
12 | font-family: inherit ;
13 | font-style: normal ;
14 | font-size: small ;
15 | color: gray ;
16 | }
17 |
18 | p+h1, ul+h1 {
19 | padding-top: 0.4em ;
20 | padding-bottom: 0.4em ;
21 | padding-left: 30px ;
22 | margin-left: -30px ;
23 | background-color: #E0E0FF ;
24 | }
25 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/globals.lua:
--------------------------------------------------------------------------------
1 | -- reads luac listings and reports global variable usage
2 | -- lines where a global is written to are marked with "*"
3 | -- typical usage: luac -p -l file.lua | lua globals.lua | sort | lua table.lua
4 |
5 | while 1 do
6 | local s=io.read()
7 | if s==nil then break end
8 | local ok,_,l,op,g=string.find(s,"%[%-?(%d*)%]%s*([GS])ETGLOBAL.-;%s+(.*)$")
9 | if ok then
10 | if op=="S" then op="*" else op="" end
11 | io.write(g,"\t",l,op,"\n")
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/redis-4.0/src/geo.h:
--------------------------------------------------------------------------------
1 | #ifndef __GEO_H__
2 | #define __GEO_H__
3 |
4 | #include "server.h"
5 |
6 | /* Structures used inside geo.c in order to represent points and array of
7 | * points on the earth. */
8 | typedef struct geoPoint {
9 | double longitude;
10 | double latitude;
11 | double dist;
12 | double score;
13 | char *member;
14 | } geoPoint;
15 |
16 | typedef struct geoArray {
17 | struct geoPoint *array;
18 | size_t buckets;
19 | size_t used;
20 | } geoArray;
21 |
22 | #endif
23 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/fmacros.h:
--------------------------------------------------------------------------------
1 | #ifndef __HIREDIS_FMACRO_H
2 | #define __HIREDIS_FMACRO_H
3 |
4 | #if defined(__linux__)
5 | #define _BSD_SOURCE
6 | #define _DEFAULT_SOURCE
7 | #endif
8 |
9 | #if defined(__CYGWIN__)
10 | #include
11 | #endif
12 |
13 | #if defined(__sun__)
14 | #define _POSIX_C_SOURCE 200112L
15 | #else
16 | #if !(defined(__APPLE__) && defined(__MACH__))
17 | #define _XOPEN_SOURCE 600
18 | #endif
19 | #endif
20 |
21 | #if defined(__APPLE__) && defined(__MACH__)
22 | #define _OSX
23 | #endif
24 |
25 | #endif
26 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/msvc_compat/C99/stdbool.h:
--------------------------------------------------------------------------------
1 | #ifndef stdbool_h
2 | #define stdbool_h
3 |
4 | #include
5 |
6 | /* MSVC doesn't define _Bool or bool in C, but does have BOOL */
7 | /* Note this doesn't pass autoconf's test because (bool) 0.5 != true */
8 | /* Clang-cl uses MSVC headers, so needs msvc_compat, but has _Bool as
9 | * a built-in type. */
10 | #ifndef __clang__
11 | typedef BOOL _Bool;
12 | #endif
13 |
14 | #define bool _Bool
15 | #define true 1
16 | #define false 0
17 |
18 | #define __bool_true_false_are_defined 1
19 |
20 | #endif /* stdbool_h */
21 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/jemalloc_rename.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | public_symbols_txt=$1
4 |
5 | cat < /dev/null || echo 00000000) | head -n1`
3 | GIT_DIRTY=`git diff --no-ext-diff 2> /dev/null | wc -l`
4 | BUILD_ID=`uname -n`"-"`date +%s`
5 | test -f release.h || touch release.h
6 | (cat release.h | grep SHA1 | grep $GIT_SHA1) && \
7 | (cat release.h | grep DIRTY | grep $GIT_DIRTY) && exit 0 # Already up-to-date
8 | echo "#define REDIS_GIT_SHA1 \"$GIT_SHA1\"" > release.h
9 | echo "#define REDIS_GIT_DIRTY \"$GIT_DIRTY\"" >> release.h
10 | echo "#define REDIS_BUILD_ID \"$BUILD_ID\"" >> release.h
11 | touch release.c # Force recompile of release.c
12 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/fpconv.h:
--------------------------------------------------------------------------------
1 | /* Lua CJSON floating point conversion routines */
2 |
3 | /* Buffer required to store the largest string representation of a double.
4 | *
5 | * Longest double printed with %.14g is 21 characters long:
6 | * -1.7976931348623e+308 */
7 | # define FPCONV_G_FMT_BUFSIZE 32
8 |
9 | #ifdef USE_INTERNAL_FPCONV
10 | static inline void fpconv_init()
11 | {
12 | /* Do nothing - not required */
13 | }
14 | #else
15 | extern void fpconv_init();
16 | #endif
17 |
18 | extern int fpconv_g_fmt(char*, double, int);
19 | extern double fpconv_strtod(const char*, char**);
20 |
21 | /* vi:ai et sw=4 ts=4:
22 | */
23 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/include/test/mtx.h:
--------------------------------------------------------------------------------
1 | /*
2 | * mtx is a slightly simplified version of malloc_mutex. This code duplication
3 | * is unfortunate, but there are allocator bootstrapping considerations that
4 | * would leak into the test infrastructure if malloc_mutex were used directly
5 | * in tests.
6 | */
7 |
8 | typedef struct {
9 | #ifdef _WIN32
10 | CRITICAL_SECTION lock;
11 | #elif (defined(JEMALLOC_OSSPIN))
12 | OSSpinLock lock;
13 | #else
14 | pthread_mutex_t lock;
15 | #endif
16 | } mtx_t;
17 |
18 | bool mtx_init(mtx_t *mtx);
19 | void mtx_fini(mtx_t *mtx);
20 | void mtx_lock(mtx_t *mtx);
21 | void mtx_unlock(mtx_t *mtx);
22 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/lg_chunk.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | /*
4 | * Make sure that opt.lg_chunk clamping is sufficient. In practice, this test
5 | * program will fail a debug assertion during initialization and abort (rather
6 | * than the test soft-failing) if clamping is insufficient.
7 | */
8 | const char *malloc_conf = "lg_chunk:0";
9 |
10 | TEST_BEGIN(test_lg_chunk_clamp)
11 | {
12 | void *p;
13 |
14 | p = mallocx(1, 0);
15 | assert_ptr_not_null(p, "Unexpected mallocx() failure");
16 | dallocx(p, 0);
17 | }
18 | TEST_END
19 |
20 | int
21 | main(void)
22 | {
23 |
24 | return (test(
25 | test_lg_chunk_clamp));
26 | }
27 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/jemalloc.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | objroot=$1
4 |
5 | cat <
8 | # pragma intrinsic(_BitScanForward)
9 | static __forceinline int ffsl(long x)
10 | {
11 | unsigned long i;
12 |
13 | if (_BitScanForward(&i, x))
14 | return (i + 1);
15 | return (0);
16 | }
17 |
18 | static __forceinline int ffs(int x)
19 | {
20 |
21 | return (ffsl(x));
22 | }
23 |
24 | #else
25 | # define ffsl(x) __builtin_ffsl(x)
26 | # define ffs(x) __builtin_ffs(x)
27 | #endif
28 |
29 | #endif /* strings_h */
30 |
--------------------------------------------------------------------------------
/redis-4.0/src/sha1.h:
--------------------------------------------------------------------------------
1 | #ifndef SHA1_H
2 | #define SHA1_H
3 | /* ================ sha1.h ================ */
4 | /*
5 | SHA-1 in C
6 | By Steve Reid
7 | 100% Public Domain
8 | */
9 |
10 | typedef struct {
11 | uint32_t state[5];
12 | uint32_t count[2];
13 | unsigned char buffer[64];
14 | } SHA1_CTX;
15 |
16 | void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]);
17 | void SHA1Init(SHA1_CTX* context);
18 | void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len);
19 | void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
20 |
21 | #ifdef REDIS_TEST
22 | int sha1Test(int argc, char **argv);
23 | #endif
24 | #endif
25 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/msvc_compat/windows_extra.h:
--------------------------------------------------------------------------------
1 | #ifndef MSVC_COMPAT_WINDOWS_EXTRA_H
2 | #define MSVC_COMPAT_WINDOWS_EXTRA_H
3 |
4 | #ifndef ENOENT
5 | # define ENOENT ERROR_PATH_NOT_FOUND
6 | #endif
7 | #ifndef EINVAL
8 | # define EINVAL ERROR_BAD_ARGUMENTS
9 | #endif
10 | #ifndef EAGAIN
11 | # define EAGAIN ERROR_OUTOFMEMORY
12 | #endif
13 | #ifndef EPERM
14 | # define EPERM ERROR_WRITE_FAULT
15 | #endif
16 | #ifndef EFAULT
17 | # define EFAULT ERROR_INVALID_ADDRESS
18 | #endif
19 | #ifndef ENOMEM
20 | # define ENOMEM ERROR_NOT_ENOUGH_MEMORY
21 | #endif
22 | #ifndef ERANGE
23 | # define ERANGE ERROR_INVALID_DATA
24 | #endif
25 |
26 | #endif /* MSVC_COMPAT_WINDOWS_EXTRA_H */
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Prerequisites
2 | *.d
3 |
4 | # Object files
5 | *.o
6 | *.ko
7 | *.obj
8 | *.elf
9 |
10 | # Linker output
11 | *.ilk
12 | *.map
13 | *.exp
14 |
15 | # Precompiled Headers
16 | *.gch
17 | *.pch
18 |
19 | # Libraries
20 | *.lib
21 | *.a
22 | *.la
23 | *.lo
24 |
25 | # Shared objects (inc. Windows DLLs)
26 | *.dll
27 | *.so
28 | *.so.*
29 | *.dylib
30 |
31 | # Executables
32 | *.exe
33 | *.out
34 | *.app
35 | *.i*86
36 | *.x86_64
37 | *.hex
38 |
39 | # Debug files
40 | *.dSYM/
41 | *.su
42 | *.idb
43 | *.pdb
44 |
45 | # Kernel Module Compile Results
46 | *.mod*
47 | *.cmd
48 | .tmp_versions/
49 | modules.order
50 | Module.symvers
51 | Mkfile.old
52 | dkms.conf
53 |
54 | .tags
55 | tags
56 | .idea
57 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/valgrind.c:
--------------------------------------------------------------------------------
1 | #include "jemalloc/internal/jemalloc_internal.h"
2 | #ifndef JEMALLOC_VALGRIND
3 | # error "This source file is for Valgrind integration."
4 | #endif
5 |
6 | #include
7 |
8 | void
9 | valgrind_make_mem_noaccess(void *ptr, size_t usize)
10 | {
11 |
12 | VALGRIND_MAKE_MEM_NOACCESS(ptr, usize);
13 | }
14 |
15 | void
16 | valgrind_make_mem_undefined(void *ptr, size_t usize)
17 | {
18 |
19 | VALGRIND_MAKE_MEM_UNDEFINED(ptr, usize);
20 | }
21 |
22 | void
23 | valgrind_make_mem_defined(void *ptr, size_t usize)
24 | {
25 |
26 | VALGRIND_MAKE_MEM_DEFINED(ptr, usize);
27 | }
28 |
29 | void
30 | valgrind_freelike_block(void *ptr, size_t usize)
31 | {
32 |
33 | VALGRIND_FREELIKE_BLOCK(ptr, usize);
34 | }
35 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/include/test/timer.h:
--------------------------------------------------------------------------------
1 | /* Simple timer, for use in benchmark reporting. */
2 |
3 | #include
4 | #include
5 |
6 | #define JEMALLOC_CLOCK_GETTIME defined(_POSIX_MONOTONIC_CLOCK) \
7 | && _POSIX_MONOTONIC_CLOCK >= 0
8 |
9 | typedef struct {
10 | #ifdef _WIN32
11 | FILETIME ft0;
12 | FILETIME ft1;
13 | #elif JEMALLOC_CLOCK_GETTIME
14 | struct timespec ts0;
15 | struct timespec ts1;
16 | int clock_id;
17 | #else
18 | struct timeval tv0;
19 | struct timeval tv1;
20 | #endif
21 | } timedelta_t;
22 |
23 | void timer_start(timedelta_t *timer);
24 | void timer_stop(timedelta_t *timer);
25 | uint64_t timer_usec(const timedelta_t *timer);
26 | void timer_ratio(timedelta_t *a, timedelta_t *b, char *buf, size_t buflen);
27 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/bisect.lua:
--------------------------------------------------------------------------------
1 | -- bisection method for solving non-linear equations
2 |
3 | delta=1e-6 -- tolerance
4 |
5 | function bisect(f,a,b,fa,fb)
6 | local c=(a+b)/2
7 | io.write(n," c=",c," a=",a," b=",b,"\n")
8 | if c==a or c==b or math.abs(a-b)
5 |
6 | class ExampleQt : public QObject {
7 |
8 | Q_OBJECT
9 |
10 | public:
11 | ExampleQt(const char * value, QObject * parent = 0)
12 | : QObject(parent), m_value(value) {}
13 |
14 | signals:
15 | void finished();
16 |
17 | public slots:
18 | void run();
19 |
20 | private:
21 | void finish() { emit finished(); }
22 |
23 | private:
24 | const char * m_value;
25 | redisAsyncContext * m_ctx;
26 | RedisQtAdapter m_adapter;
27 |
28 | friend
29 | void getCallback(redisAsyncContext *, void *, void *);
30 | };
31 |
32 | #endif /* !__HIREDIS_EXAMPLE_QT_H */
33 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/fib.lua:
--------------------------------------------------------------------------------
1 | -- fibonacci function with cache
2 |
3 | -- very inefficient fibonacci function
4 | function fib(n)
5 | N=N+1
6 | if n<2 then
7 | return n
8 | else
9 | return fib(n-1)+fib(n-2)
10 | end
11 | end
12 |
13 | -- a general-purpose value cache
14 | function cache(f)
15 | local c={}
16 | return function (x)
17 | local y=c[x]
18 | if not y then
19 | y=f(x)
20 | c[x]=y
21 | end
22 | return y
23 | end
24 | end
25 |
26 | -- run and time it
27 | function test(s,f)
28 | N=0
29 | local c=os.clock()
30 | local v=f(n)
31 | local t=os.clock()-c
32 | print(s,n,v,t,N)
33 | end
34 |
35 | n=arg[1] or 24 -- for other values, do lua fib.lua XX
36 | n=tonumber(n)
37 | print("","n","value","time","evals")
38 | test("plain",fib)
39 | fib=cache(fib)
40 | test("cached",fib)
41 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/lua.pc:
--------------------------------------------------------------------------------
1 | # lua.pc -- pkg-config data for Lua
2 |
3 | # vars from install Makefile
4 |
5 | # grep '^V=' ../Makefile
6 | V= 5.1
7 | # grep '^R=' ../Makefile
8 | R= 5.1.5
9 |
10 | # grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/'
11 | prefix= /usr/local
12 | INSTALL_BIN= ${prefix}/bin
13 | INSTALL_INC= ${prefix}/include
14 | INSTALL_LIB= ${prefix}/lib
15 | INSTALL_MAN= ${prefix}/man/man1
16 | INSTALL_LMOD= ${prefix}/share/lua/${V}
17 | INSTALL_CMOD= ${prefix}/lib/lua/${V}
18 |
19 | # canonical vars
20 | exec_prefix=${prefix}
21 | libdir=${exec_prefix}/lib
22 | includedir=${prefix}/include
23 |
24 | Name: Lua
25 | Description: An Extensible Extension Language
26 | Version: ${R}
27 | Requires:
28 | Libs: -L${libdir} -llua -lm
29 | Cflags: -I${includedir}
30 |
31 | # (end of lua.pc)
32 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/all.c:
--------------------------------------------------------------------------------
1 | /*
2 | * all.c -- Lua core, libraries and interpreter in a single file
3 | */
4 |
5 | #define luaall_c
6 |
7 | #include "lapi.c"
8 | #include "lcode.c"
9 | #include "ldebug.c"
10 | #include "ldo.c"
11 | #include "ldump.c"
12 | #include "lfunc.c"
13 | #include "lgc.c"
14 | #include "llex.c"
15 | #include "lmem.c"
16 | #include "lobject.c"
17 | #include "lopcodes.c"
18 | #include "lparser.c"
19 | #include "lstate.c"
20 | #include "lstring.c"
21 | #include "ltable.c"
22 | #include "ltm.c"
23 | #include "lundump.c"
24 | #include "lvm.c"
25 | #include "lzio.c"
26 |
27 | #include "lauxlib.c"
28 | #include "lbaselib.c"
29 | #include "ldblib.c"
30 | #include "liolib.c"
31 | #include "linit.c"
32 | #include "lmathlib.c"
33 | #include "loadlib.c"
34 | #include "loslib.c"
35 | #include "lstrlib.c"
36 | #include "ltablib.c"
37 |
38 | #include "lua.c"
39 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/factorial.lua:
--------------------------------------------------------------------------------
1 | -- function closures are powerful
2 |
3 | -- traditional fixed-point operator from functional programming
4 | Y = function (g)
5 | local a = function (f) return f(f) end
6 | return a(function (f)
7 | return g(function (x)
8 | local c=f(f)
9 | return c(x)
10 | end)
11 | end)
12 | end
13 |
14 |
15 | -- factorial without recursion
16 | F = function (f)
17 | return function (n)
18 | if n == 0 then return 1
19 | else return n*f(n-1) end
20 | end
21 | end
22 |
23 | factorial = Y(F) -- factorial is the fixed point of F
24 |
25 | -- now test it
26 | function test(x)
27 | io.write(x,"! = ",factorial(x),"\n")
28 | end
29 |
30 | for n=0,16 do
31 | test(n)
32 | end
33 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/chunk_mmap.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************/
2 | #ifdef JEMALLOC_H_TYPES
3 |
4 | #endif /* JEMALLOC_H_TYPES */
5 | /******************************************************************************/
6 | #ifdef JEMALLOC_H_STRUCTS
7 |
8 | #endif /* JEMALLOC_H_STRUCTS */
9 | /******************************************************************************/
10 | #ifdef JEMALLOC_H_EXTERNS
11 |
12 | void *chunk_alloc_mmap(size_t size, size_t alignment, bool *zero,
13 | bool *commit);
14 | bool chunk_dalloc_mmap(void *chunk, size_t size);
15 |
16 | #endif /* JEMALLOC_H_EXTERNS */
17 | /******************************************************************************/
18 | #ifdef JEMALLOC_H_INLINES
19 |
20 | #endif /* JEMALLOC_H_INLINES */
21 | /******************************************************************************/
22 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/sieve.lua:
--------------------------------------------------------------------------------
1 | -- the sieve of of Eratosthenes programmed with coroutines
2 | -- typical usage: lua -e N=1000 sieve.lua | column
3 |
4 | -- generate all the numbers from 2 to n
5 | function gen (n)
6 | return coroutine.wrap(function ()
7 | for i=2,n do coroutine.yield(i) end
8 | end)
9 | end
10 |
11 | -- filter the numbers generated by `g', removing multiples of `p'
12 | function filter (p, g)
13 | return coroutine.wrap(function ()
14 | while 1 do
15 | local n = g()
16 | if n == nil then return end
17 | if math.mod(n, p) ~= 0 then coroutine.yield(n) end
18 | end
19 | end)
20 | end
21 |
22 | N=N or 1000 -- from command line
23 | x = gen(N) -- generate primes up to N
24 | while 1 do
25 | local n = x() -- pick a number until done
26 | if n == nil then break end
27 | print(n) -- must be a prime number
28 | x = filter(n, x) -- now remove its multiples
29 | end
30 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/trace-calls.lua:
--------------------------------------------------------------------------------
1 | -- trace calls
2 | -- example: lua -ltrace-calls bisect.lua
3 |
4 | local level=0
5 |
6 | local function hook(event)
7 | local t=debug.getinfo(3)
8 | io.write(level," >>> ",string.rep(" ",level))
9 | if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end
10 | t=debug.getinfo(2)
11 | if event=="call" then
12 | level=level+1
13 | else
14 | level=level-1 if level<0 then level=0 end
15 | end
16 | if t.what=="main" then
17 | if event=="call" then
18 | io.write("begin ",t.short_src)
19 | else
20 | io.write("end ",t.short_src)
21 | end
22 | elseif t.what=="Lua" then
23 | -- table.foreach(t,print)
24 | io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">")
25 | else
26 | io.write(event," ",t.name or "(C)"," [",t.what,"] ")
27 | end
28 | io.write("\n")
29 | end
30 |
31 | debug.sethook(hook,"cr")
32 | level=0
33 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/trace-globals.lua:
--------------------------------------------------------------------------------
1 | -- trace assigments to global variables
2 |
3 | do
4 | -- a tostring that quotes strings. note the use of the original tostring.
5 | local _tostring=tostring
6 | local tostring=function(a)
7 | if type(a)=="string" then
8 | return string.format("%q",a)
9 | else
10 | return _tostring(a)
11 | end
12 | end
13 |
14 | local log=function (name,old,new)
15 | local t=debug.getinfo(3,"Sl")
16 | local line=t.currentline
17 | io.write(t.short_src)
18 | if line>=0 then io.write(":",line) end
19 | io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n")
20 | end
21 |
22 | local g={}
23 | local set=function (t,name,value)
24 | log(name,g[name],value)
25 | g[name]=value
26 | end
27 | setmetatable(getfenv(),{__index=g,__newindex=set})
28 | end
29 |
30 | -- an example
31 |
32 | a=1
33 | b=2
34 | a=10
35 | b=20
36 | b=nil
37 | b=200
38 | print(a,b,c)
39 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/win32.h:
--------------------------------------------------------------------------------
1 | #ifndef _WIN32_HELPER_INCLUDE
2 | #define _WIN32_HELPER_INCLUDE
3 | #ifdef _MSC_VER
4 |
5 | #ifndef inline
6 | #define inline __inline
7 | #endif
8 |
9 | #ifndef va_copy
10 | #define va_copy(d,s) ((d) = (s))
11 | #endif
12 |
13 | #ifndef snprintf
14 | #define snprintf c99_snprintf
15 |
16 | __inline int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap)
17 | {
18 | int count = -1;
19 |
20 | if (size != 0)
21 | count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
22 | if (count == -1)
23 | count = _vscprintf(format, ap);
24 |
25 | return count;
26 | }
27 |
28 | __inline int c99_snprintf(char* str, size_t size, const char* format, ...)
29 | {
30 | int count;
31 | va_list ap;
32 |
33 | va_start(ap, format);
34 | count = c99_vsnprintf(str, size, format, ap);
35 | va_end(ap);
36 |
37 | return count;
38 | }
39 | #endif
40 |
41 | #endif
42 | #endif
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/thd.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #ifdef _WIN32
4 | void
5 | thd_create(thd_t *thd, void *(*proc)(void *), void *arg)
6 | {
7 | LPTHREAD_START_ROUTINE routine = (LPTHREAD_START_ROUTINE)proc;
8 | *thd = CreateThread(NULL, 0, routine, arg, 0, NULL);
9 | if (*thd == NULL)
10 | test_fail("Error in CreateThread()\n");
11 | }
12 |
13 | void
14 | thd_join(thd_t thd, void **ret)
15 | {
16 |
17 | if (WaitForSingleObject(thd, INFINITE) == WAIT_OBJECT_0 && ret) {
18 | DWORD exit_code;
19 | GetExitCodeThread(thd, (LPDWORD) &exit_code);
20 | *ret = (void *)(uintptr_t)exit_code;
21 | }
22 | }
23 |
24 | #else
25 | void
26 | thd_create(thd_t *thd, void *(*proc)(void *), void *arg)
27 | {
28 |
29 | if (pthread_create(thd, NULL, proc, arg) != 0)
30 | test_fail("Error in pthread_create()\n");
31 | }
32 |
33 | void
34 | thd_join(thd_t thd, void **ret)
35 | {
36 |
37 | pthread_join(thd, ret);
38 | }
39 | #endif
40 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/linit.c:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: linit.c,v 1.14.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Initialization of libraries for lua.c
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 |
8 | #define linit_c
9 | #define LUA_LIB
10 |
11 | #include "lua.h"
12 |
13 | #include "lualib.h"
14 | #include "lauxlib.h"
15 |
16 |
17 | static const luaL_Reg lualibs[] = {
18 | {"", luaopen_base},
19 | {LUA_LOADLIBNAME, luaopen_package},
20 | {LUA_TABLIBNAME, luaopen_table},
21 | {LUA_IOLIBNAME, luaopen_io},
22 | {LUA_OSLIBNAME, luaopen_os},
23 | {LUA_STRLIBNAME, luaopen_string},
24 | {LUA_MATHLIBNAME, luaopen_math},
25 | {LUA_DBLIBNAME, luaopen_debug},
26 | {NULL, NULL}
27 | };
28 |
29 |
30 | LUALIB_API void luaL_openlibs (lua_State *L) {
31 | const luaL_Reg *lib = lualibs;
32 | for (; lib->func; lib++) {
33 | lua_pushcfunction(L, lib->func);
34 | lua_pushstring(L, lib->name);
35 | lua_call(L, 1, 0);
36 | }
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lstring.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lstring.h,v 1.43.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** String table (keep all strings handled by Lua)
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lstring_h
8 | #define lstring_h
9 |
10 |
11 | #include "lgc.h"
12 | #include "lobject.h"
13 | #include "lstate.h"
14 |
15 |
16 | #define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char))
17 |
18 | #define sizeudata(u) (sizeof(union Udata)+(u)->len)
19 |
20 | #define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s)))
21 | #define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \
22 | (sizeof(s)/sizeof(char))-1))
23 |
24 | #define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT)
25 |
26 | LUAI_FUNC void luaS_resize (lua_State *L, int newsize);
27 | LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e);
28 | LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l);
29 |
30 |
31 | #endif
32 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/min.c:
--------------------------------------------------------------------------------
1 | /*
2 | * min.c -- a minimal Lua interpreter
3 | * loads stdin only with minimal error handling.
4 | * no interaction, and no standard library, only a "print" function.
5 | */
6 |
7 | #include
8 |
9 | #include "lua.h"
10 | #include "lauxlib.h"
11 |
12 | static int print(lua_State *L)
13 | {
14 | int n=lua_gettop(L);
15 | int i;
16 | for (i=1; i<=n; i++)
17 | {
18 | if (i>1) printf("\t");
19 | if (lua_isstring(L,i))
20 | printf("%s",lua_tostring(L,i));
21 | else if (lua_isnil(L,i))
22 | printf("%s","nil");
23 | else if (lua_isboolean(L,i))
24 | printf("%s",lua_toboolean(L,i) ? "true" : "false");
25 | else
26 | printf("%s:%p",luaL_typename(L,i),lua_topointer(L,i));
27 | }
28 | printf("\n");
29 | return 0;
30 | }
31 |
32 | int main(void)
33 | {
34 | lua_State *L=lua_open();
35 | lua_register(L,"print",print);
36 | if (luaL_dofile(L,NULL)!=0) fprintf(stderr,"%s\n",lua_tostring(L,-1));
37 | lua_close(L);
38 | return 0;
39 | }
40 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/base.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************/
2 | #ifdef JEMALLOC_H_TYPES
3 |
4 | #endif /* JEMALLOC_H_TYPES */
5 | /******************************************************************************/
6 | #ifdef JEMALLOC_H_STRUCTS
7 |
8 | #endif /* JEMALLOC_H_STRUCTS */
9 | /******************************************************************************/
10 | #ifdef JEMALLOC_H_EXTERNS
11 |
12 | void *base_alloc(size_t size);
13 | void base_stats_get(size_t *allocated, size_t *resident, size_t *mapped);
14 | bool base_boot(void);
15 | void base_prefork(void);
16 | void base_postfork_parent(void);
17 | void base_postfork_child(void);
18 |
19 | #endif /* JEMALLOC_H_EXTERNS */
20 | /******************************************************************************/
21 | #ifdef JEMALLOC_H_INLINES
22 |
23 | #endif /* JEMALLOC_H_INLINES */
24 | /******************************************************************************/
25 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/include/test/btalloc.h:
--------------------------------------------------------------------------------
1 | /* btalloc() provides a mechanism for allocating via permuted backtraces. */
2 | void *btalloc(size_t size, unsigned bits);
3 |
4 | #define btalloc_n_proto(n) \
5 | void *btalloc_##n(size_t size, unsigned bits);
6 | btalloc_n_proto(0)
7 | btalloc_n_proto(1)
8 |
9 | #define btalloc_n_gen(n) \
10 | void * \
11 | btalloc_##n(size_t size, unsigned bits) \
12 | { \
13 | void *p; \
14 | \
15 | if (bits == 0) \
16 | p = mallocx(size, 0); \
17 | else { \
18 | switch (bits & 0x1U) { \
19 | case 0: \
20 | p = (btalloc_0(size, bits >> 1)); \
21 | break; \
22 | case 1: \
23 | p = (btalloc_1(size, bits >> 1)); \
24 | break; \
25 | default: not_reached(); \
26 | } \
27 | } \
28 | /* Intentionally sabotage tail call optimization. */ \
29 | assert_ptr_not_null(p, "Unexpected mallocx() failure"); \
30 | return (p); \
31 | }
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # read-redis-src
2 | 阅读redis源码
3 |
4 | ## 总结文章
5 | [[Redis源码阅读]sds字符串实现](http://www.hoohack.me/2017/11/13/read-redis-src-sds)
6 |
7 | [[Redis源码阅读]dict字典的实现](http://www.hoohack.me/2018/01/07/read-redis-src-dict)
8 |
9 | [[Redis源码阅读]redis对象](http://www.hoohack.me/2018/03/21/read-redis-src-object)
10 |
11 | [[Redis源码阅读]redis持久化](http://www.hoohack.me/2018/04/04/deep-learning-redis-durability)
12 |
13 | [[Redis源码阅读]当你启动Redis的时候,Redis做了什么](http://www.hoohack.me/2018/05/26/read-redis-src-how-server-start)
14 |
15 | [[Redis源码阅读]当你输入get/set命令的时候,redis做了什么](http://www.hoohack.me/2018/06/21/implement-redis-command-nonzerodecr)
16 |
17 | [[Redis源码阅读]实现一个redis命令--nonzerodecr](http://www.hoohack.me/2018/06/21/implement-redis-command-nonzerodecr)
18 |
19 | [[深入理解Redis]读取RDB文件](https://www.hoohack.me/2018/08/27/rdb-tools-read-binary-file)
20 |
21 | [理解Redis的内存回收机制](https://www.hoohack.me/2019/06/24/redis-expire-strategy)
22 |
23 | [你附近的人都有谁,这个功能是怎么实现的?](https://www.hoohack.me/2020/09/19/using-redis-geo-find-nearby)
24 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/doc/readme.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Lua documentation
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Documentation
13 |
14 |
15 | This is the documentation included in the source distribution of Lua 5.1.5.
16 |
17 |
25 |
26 | Lua's
27 | official web site
28 | contains updated documentation,
29 | especially the
30 | reference manual.
31 |
32 |
33 |
34 |
35 | Last update:
36 | Fri Feb 3 09:44:42 BRST 2012
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lundump.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lundump.h,v 1.37.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** load precompiled Lua chunks
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lundump_h
8 | #define lundump_h
9 |
10 | #include "lobject.h"
11 | #include "lzio.h"
12 |
13 | /* load one chunk; from lundump.c */
14 | LUAI_FUNC Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name);
15 |
16 | /* make header; from lundump.c */
17 | LUAI_FUNC void luaU_header (char* h);
18 |
19 | /* dump one chunk; from ldump.c */
20 | LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip);
21 |
22 | #ifdef luac_c
23 | /* print one chunk; from print.c */
24 | LUAI_FUNC void luaU_print (const Proto* f, int full);
25 | #endif
26 |
27 | /* for header of binary files -- this is Lua 5.1 */
28 | #define LUAC_VERSION 0x51
29 |
30 | /* for header of binary files -- this is the official format */
31 | #define LUAC_FORMAT 0
32 |
33 | /* size of header of binary files */
34 | #define LUAC_HEADERSIZE 12
35 |
36 | #endif
37 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/.travis.yml:
--------------------------------------------------------------------------------
1 | language: c
2 | sudo: false
3 | compiler:
4 | - gcc
5 | - clang
6 |
7 | os:
8 | - linux
9 | - osx
10 |
11 | before_script:
12 | - if [ "$TRAVIS_OS_NAME" == "osx" ] ; then brew update; brew install redis; fi
13 |
14 | addons:
15 | apt:
16 | packages:
17 | - libc6-dbg
18 | - libc6-dev
19 | - libc6:i386
20 | - libc6-dev-i386
21 | - libc6-dbg:i386
22 | - gcc-multilib
23 | - valgrind
24 |
25 | env:
26 | - CFLAGS="-Werror"
27 | - PRE="valgrind --track-origins=yes --leak-check=full"
28 | - TARGET="32bit" TARGET_VARS="32bit-vars" CFLAGS="-Werror"
29 | - TARGET="32bit" TARGET_VARS="32bit-vars" PRE="valgrind --track-origins=yes --leak-check=full"
30 |
31 | matrix:
32 | exclude:
33 | - os: osx
34 | env: PRE="valgrind --track-origins=yes --leak-check=full"
35 |
36 | - os: osx
37 | env: TARGET="32bit" TARGET_VARS="32bit-vars" PRE="valgrind --track-origins=yes --leak-check=full"
38 |
39 | script: make $TARGET CFLAGS="$CFLAGS" && make check PRE="$PRE" && make $TARGET_VARS hiredis-example
40 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/pages.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************/
2 | #ifdef JEMALLOC_H_TYPES
3 |
4 | #endif /* JEMALLOC_H_TYPES */
5 | /******************************************************************************/
6 | #ifdef JEMALLOC_H_STRUCTS
7 |
8 | #endif /* JEMALLOC_H_STRUCTS */
9 | /******************************************************************************/
10 | #ifdef JEMALLOC_H_EXTERNS
11 |
12 | void *pages_map(void *addr, size_t size);
13 | void pages_unmap(void *addr, size_t size);
14 | void *pages_trim(void *addr, size_t alloc_size, size_t leadsize,
15 | size_t size);
16 | bool pages_commit(void *addr, size_t size);
17 | bool pages_decommit(void *addr, size_t size);
18 | bool pages_purge(void *addr, size_t size);
19 |
20 | #endif /* JEMALLOC_H_EXTERNS */
21 | /******************************************************************************/
22 | #ifdef JEMALLOC_H_INLINES
23 |
24 | #endif /* JEMALLOC_H_INLINES */
25 | /******************************************************************************/
26 |
27 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/Makefile:
--------------------------------------------------------------------------------
1 | # makefile for Lua etc
2 |
3 | TOP= ..
4 | LIB= $(TOP)/src
5 | INC= $(TOP)/src
6 | BIN= $(TOP)/src
7 | SRC= $(TOP)/src
8 | TST= $(TOP)/test
9 |
10 | CC= gcc
11 | CFLAGS= -O2 -Wall -I$(INC) $(MYCFLAGS)
12 | MYCFLAGS=
13 | MYLDFLAGS= -Wl,-E
14 | MYLIBS= -lm
15 | #MYLIBS= -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
16 | RM= rm -f
17 |
18 | default:
19 | @echo 'Please choose a target: min noparser one strict clean'
20 |
21 | min: min.c
22 | $(CC) $(CFLAGS) $@.c -L$(LIB) -llua $(MYLIBS)
23 | echo 'print"Hello there!"' | ./a.out
24 |
25 | noparser: noparser.o
26 | $(CC) noparser.o $(SRC)/lua.o -L$(LIB) -llua $(MYLIBS)
27 | $(BIN)/luac $(TST)/hello.lua
28 | -./a.out luac.out
29 | -./a.out -e'a=1'
30 |
31 | one:
32 | $(CC) $(CFLAGS) all.c $(MYLIBS)
33 | ./a.out $(TST)/hello.lua
34 |
35 | strict:
36 | -$(BIN)/lua -e 'print(a);b=2'
37 | -$(BIN)/lua -lstrict -e 'print(a)'
38 | -$(BIN)/lua -e 'function f() b=2 end f()'
39 | -$(BIN)/lua -lstrict -e 'function f() b=2 end f()'
40 |
41 | clean:
42 | $(RM) a.out core core.* *.o luac.out
43 |
44 | .PHONY: default min noparser one strict clean
45 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/strict.lua:
--------------------------------------------------------------------------------
1 | --
2 | -- strict.lua
3 | -- checks uses of undeclared global variables
4 | -- All global variables must be 'declared' through a regular assignment
5 | -- (even assigning nil will do) in a main chunk before being used
6 | -- anywhere or assigned to inside a function.
7 | --
8 |
9 | local getinfo, error, rawset, rawget = debug.getinfo, error, rawset, rawget
10 |
11 | local mt = getmetatable(_G)
12 | if mt == nil then
13 | mt = {}
14 | setmetatable(_G, mt)
15 | end
16 |
17 | mt.__declared = {}
18 |
19 | local function what ()
20 | local d = getinfo(3, "S")
21 | return d and d.what or "C"
22 | end
23 |
24 | mt.__newindex = function (t, n, v)
25 | if not mt.__declared[n] then
26 | local w = what()
27 | if w ~= "main" and w ~= "C" then
28 | error("assign to undeclared variable '"..n.."'", 2)
29 | end
30 | mt.__declared[n] = true
31 | end
32 | rawset(t, n, v)
33 | end
34 |
35 | mt.__index = function (t, n)
36 | if not mt.__declared[n] and what() ~= "C" then
37 | error("variable '"..n.."' is not declared", 2)
38 | end
39 | return rawget(t, n)
40 | end
41 |
42 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 hoohack
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/README:
--------------------------------------------------------------------------------
1 | This directory contains some useful files and code.
2 | Unlike the code in ../src, everything here is in the public domain.
3 |
4 | If any of the makes fail, you're probably not using the same libraries
5 | used to build Lua. Set MYLIBS in Makefile accordingly.
6 |
7 | all.c
8 | Full Lua interpreter in a single file.
9 | Do "make one" for a demo.
10 |
11 | lua.hpp
12 | Lua header files for C++ using 'extern "C"'.
13 |
14 | lua.ico
15 | A Lua icon for Windows (and web sites: save as favicon.ico).
16 | Drawn by hand by Markus Gritsch .
17 |
18 | lua.pc
19 | pkg-config data for Lua
20 |
21 | luavs.bat
22 | Script to build Lua under "Visual Studio .NET Command Prompt".
23 | Run it from the toplevel as etc\luavs.bat.
24 |
25 | min.c
26 | A minimal Lua interpreter.
27 | Good for learning and for starting your own.
28 | Do "make min" for a demo.
29 |
30 | noparser.c
31 | Linking with noparser.o avoids loading the parsing modules in lualib.a.
32 | Do "make noparser" for a demo.
33 |
34 | strict.lua
35 | Traps uses of undeclared global variables.
36 | Do "make strict" for a demo.
37 |
38 |
--------------------------------------------------------------------------------
/redis-4.0/src/modules/Makefile:
--------------------------------------------------------------------------------
1 |
2 | # find the OS
3 | uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
4 |
5 | # Compile flags for linux / osx
6 | ifeq ($(uname_S),Linux)
7 | SHOBJ_CFLAGS ?= -W -Wall -fno-common -g -ggdb -std=c99 -O2
8 | SHOBJ_LDFLAGS ?= -shared
9 | else
10 | SHOBJ_CFLAGS ?= -W -Wall -dynamic -fno-common -g -ggdb -std=c99 -O2
11 | SHOBJ_LDFLAGS ?= -bundle -undefined dynamic_lookup
12 | endif
13 |
14 | .SUFFIXES: .c .so .xo .o
15 |
16 | all: helloworld.so hellotype.so helloblock.so testmodule.so
17 |
18 | .c.xo:
19 | $(CC) -I. $(CFLAGS) $(SHOBJ_CFLAGS) -fPIC -c $< -o $@
20 |
21 | helloworld.xo: ../redismodule.h
22 |
23 | helloworld.so: helloworld.xo
24 | $(LD) -o $@ $< $(SHOBJ_LDFLAGS) $(LIBS) -lc
25 |
26 | hellotype.xo: ../redismodule.h
27 |
28 | hellotype.so: hellotype.xo
29 | $(LD) -o $@ $< $(SHOBJ_LDFLAGS) $(LIBS) -lc
30 |
31 | helloblock.xo: ../redismodule.h
32 |
33 | helloblock.so: helloblock.xo
34 | $(LD) -o $@ $< $(SHOBJ_LDFLAGS) $(LIBS) -lpthread -lc
35 |
36 | testmodule.xo: ../redismodule.h
37 |
38 | testmodule.so: testmodule.xo
39 | $(LD) -o $@ $< $(SHOBJ_LDFLAGS) $(LIBS) -lc
40 |
41 | clean:
42 | rm -rf *.xo *.so
43 |
--------------------------------------------------------------------------------
/redis-4.0/tests/lltostr.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | int sdsll2str(char *s, long long value) {
4 | char *p, aux;
5 | unsigned long long v;
6 | size_t l;
7 |
8 | /* Generate the string representation, this method produces
9 | * * an reversed string. */
10 | /* 通过取余数得到原字符串的逆转形式 */
11 | v = (value < 0) ? -value : value;
12 | p = s;
13 | do {
14 | *p++ = '0'+(v%10);
15 | v /= 10;
16 | } while(v);
17 | if (value < 0) *p++ = '-';
18 |
19 | /* Compute length and add null term. */
20 | l = p-s;
21 | *p = '\0';
22 |
23 | /* Reverse the string. */
24 | /* 反转字符串 */
25 | p--;
26 | while(s < p) {
27 | aux = *s;
28 | *s = *p;
29 | *p = aux;
30 | s++;
31 | p--;
32 | }
33 | return l;
34 | }
35 |
36 | int main()
37 | {
38 | int num = 1234567890;
39 | char str[21];
40 |
41 | // 整数
42 | int len = sdsll2str(str, num);
43 | printf("len: %d string %s\n", len, str);
44 |
45 | // 负数
46 | num = -1234567890;
47 | len = sdsll2str(str, num);
48 | printf("len: %d string %s\n", len, str);
49 |
50 | // 超出21,会溢出
51 | num = 1234567890123456789011;
52 | len = sdsll2str(str, num);
53 | printf("len: %d string %s\n", len, str);
54 |
55 | return 0;
56 | }
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/README:
--------------------------------------------------------------------------------
1 | jemalloc is a general purpose malloc(3) implementation that emphasizes
2 | fragmentation avoidance and scalable concurrency support. jemalloc first came
3 | into use as the FreeBSD libc allocator in 2005, and since then it has found its
4 | way into numerous applications that rely on its predictable behavior. In 2010
5 | jemalloc development efforts broadened to include developer support features
6 | such as heap profiling, Valgrind integration, and extensive monitoring/tuning
7 | hooks. Modern jemalloc releases continue to be integrated back into FreeBSD,
8 | and therefore versatility remains critical. Ongoing development efforts trend
9 | toward making jemalloc among the best allocators for a broad range of demanding
10 | applications, and eliminating/mitigating weaknesses that have practical
11 | repercussions for real world applications.
12 |
13 | The COPYING file contains copyright and licensing information.
14 |
15 | The INSTALL file contains information on how to configure, build, and install
16 | jemalloc.
17 |
18 | The ChangeLog file contains a brief summary of changes for each release.
19 |
20 | URL: http://www.canonware.com/jemalloc/
21 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/luavs.bat:
--------------------------------------------------------------------------------
1 | @rem Script to build Lua under "Visual Studio .NET Command Prompt".
2 | @rem Do not run from this directory; run it from the toplevel: etc\luavs.bat .
3 | @rem It creates lua51.dll, lua51.lib, lua.exe, and luac.exe in src.
4 | @rem (contributed by David Manura and Mike Pall)
5 |
6 | @setlocal
7 | @set MYCOMPILE=cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE
8 | @set MYLINK=link /nologo
9 | @set MYMT=mt /nologo
10 |
11 | cd src
12 | %MYCOMPILE% /DLUA_BUILD_AS_DLL l*.c
13 | del lua.obj luac.obj
14 | %MYLINK% /DLL /out:lua51.dll l*.obj
15 | if exist lua51.dll.manifest^
16 | %MYMT% -manifest lua51.dll.manifest -outputresource:lua51.dll;2
17 | %MYCOMPILE% /DLUA_BUILD_AS_DLL lua.c
18 | %MYLINK% /out:lua.exe lua.obj lua51.lib
19 | if exist lua.exe.manifest^
20 | %MYMT% -manifest lua.exe.manifest -outputresource:lua.exe
21 | %MYCOMPILE% l*.c print.c
22 | del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathlib.obj^
23 | loslib.obj ltablib.obj lstrlib.obj loadlib.obj
24 | %MYLINK% /out:luac.exe *.obj
25 | if exist luac.exe.manifest^
26 | %MYMT% -manifest luac.exe.manifest -outputresource:luac.exe
27 | del *.obj *.manifest
28 | cd ..
29 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/ldebug.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: ldebug.h,v 2.3.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Auxiliary functions from Debug Interface module
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef ldebug_h
8 | #define ldebug_h
9 |
10 |
11 | #include "lstate.h"
12 |
13 |
14 | #define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1)
15 |
16 | #define getline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0)
17 |
18 | #define resethookcount(L) (L->hookcount = L->basehookcount)
19 |
20 |
21 | LUAI_FUNC void luaG_typeerror (lua_State *L, const TValue *o,
22 | const char *opname);
23 | LUAI_FUNC void luaG_concaterror (lua_State *L, StkId p1, StkId p2);
24 | LUAI_FUNC void luaG_aritherror (lua_State *L, const TValue *p1,
25 | const TValue *p2);
26 | LUAI_FUNC int luaG_ordererror (lua_State *L, const TValue *p1,
27 | const TValue *p2);
28 | LUAI_FUNC void luaG_runerror (lua_State *L, const char *fmt, ...);
29 | LUAI_FUNC void luaG_errormsg (lua_State *L);
30 | LUAI_FUNC int luaG_checkcode (const Proto *pt);
31 | LUAI_FUNC int luaG_checkopenop (Instruction i);
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/jemalloc_defs.h.in:
--------------------------------------------------------------------------------
1 | /* Defined if __attribute__((...)) syntax is supported. */
2 | #undef JEMALLOC_HAVE_ATTR
3 |
4 | /* Defined if alloc_size attribute is supported. */
5 | #undef JEMALLOC_HAVE_ATTR_ALLOC_SIZE
6 |
7 | /* Defined if format(gnu_printf, ...) attribute is supported. */
8 | #undef JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF
9 |
10 | /* Defined if format(printf, ...) attribute is supported. */
11 | #undef JEMALLOC_HAVE_ATTR_FORMAT_PRINTF
12 |
13 | /*
14 | * Define overrides for non-standard allocator-related functions if they are
15 | * present on the system.
16 | */
17 | #undef JEMALLOC_OVERRIDE_MEMALIGN
18 | #undef JEMALLOC_OVERRIDE_VALLOC
19 |
20 | /*
21 | * At least Linux omits the "const" in:
22 | *
23 | * size_t malloc_usable_size(const void *ptr);
24 | *
25 | * Match the operating system's prototype.
26 | */
27 | #undef JEMALLOC_USABLE_SIZE_CONST
28 |
29 | /*
30 | * If defined, specify throw() for the public function prototypes when compiling
31 | * with C++. The only justification for this is to match the prototypes that
32 | * glibc defines.
33 | */
34 | #undef JEMALLOC_USE_CXX_THROW
35 |
36 | /* sizeof(void *) == 2^LG_SIZEOF_PTR. */
37 | #undef LG_SIZEOF_PTR
38 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/prof_idump.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #ifdef JEMALLOC_PROF
4 | const char *malloc_conf =
5 | "prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0,"
6 | "lg_prof_interval:0";
7 | #endif
8 |
9 | static bool did_prof_dump_open;
10 |
11 | static int
12 | prof_dump_open_intercept(bool propagate_err, const char *filename)
13 | {
14 | int fd;
15 |
16 | did_prof_dump_open = true;
17 |
18 | fd = open("/dev/null", O_WRONLY);
19 | assert_d_ne(fd, -1, "Unexpected open() failure");
20 |
21 | return (fd);
22 | }
23 |
24 | TEST_BEGIN(test_idump)
25 | {
26 | bool active;
27 | void *p;
28 |
29 | test_skip_if(!config_prof);
30 |
31 | active = true;
32 | assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
33 | 0, "Unexpected mallctl failure while activating profiling");
34 |
35 | prof_dump_open = prof_dump_open_intercept;
36 |
37 | did_prof_dump_open = false;
38 | p = mallocx(1, 0);
39 | assert_ptr_not_null(p, "Unexpected mallocx() failure");
40 | dallocx(p, 0);
41 | assert_true(did_prof_dump_open, "Expected a profile dump");
42 | }
43 | TEST_END
44 |
45 | int
46 | main(void)
47 | {
48 |
49 | return (test(
50 | test_idump));
51 | }
52 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/test.sh.in:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | case @abi@ in
4 | macho)
5 | export DYLD_FALLBACK_LIBRARY_PATH="@objroot@lib"
6 | ;;
7 | pecoff)
8 | export PATH="${PATH}:@objroot@lib"
9 | ;;
10 | *)
11 | ;;
12 | esac
13 |
14 | # Corresponds to test_status_t.
15 | pass_code=0
16 | skip_code=1
17 | fail_code=2
18 |
19 | pass_count=0
20 | skip_count=0
21 | fail_count=0
22 | for t in $@; do
23 | if [ $pass_count -ne 0 -o $skip_count -ne 0 -o $fail_count != 0 ] ; then
24 | echo
25 | fi
26 | echo "=== ${t} ==="
27 | ${t}@exe@ @abs_srcroot@ @abs_objroot@
28 | result_code=$?
29 | case ${result_code} in
30 | ${pass_code})
31 | pass_count=$((pass_count+1))
32 | ;;
33 | ${skip_code})
34 | skip_count=$((skip_count+1))
35 | ;;
36 | ${fail_code})
37 | fail_count=$((fail_count+1))
38 | ;;
39 | *)
40 | echo "Test harness error" 1>&2
41 | exit 1
42 | esac
43 | done
44 |
45 | total_count=`expr ${pass_count} + ${skip_count} + ${fail_count}`
46 | echo
47 | echo "Test suite summary: pass: ${pass_count}/${total_count}, skip: ${skip_count}/${total_count}, fail: ${fail_count}/${total_count}"
48 |
49 | if [ ${fail_count} -eq 0 ] ; then
50 | exit 0
51 | else
52 | exit 1
53 | fi
54 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/ltm.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: ltm.h,v 2.6.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Tag methods
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef ltm_h
8 | #define ltm_h
9 |
10 |
11 | #include "lobject.h"
12 |
13 |
14 | /*
15 | * WARNING: if you change the order of this enumeration,
16 | * grep "ORDER TM"
17 | */
18 | typedef enum {
19 | TM_INDEX,
20 | TM_NEWINDEX,
21 | TM_GC,
22 | TM_MODE,
23 | TM_EQ, /* last tag method with `fast' access */
24 | TM_ADD,
25 | TM_SUB,
26 | TM_MUL,
27 | TM_DIV,
28 | TM_MOD,
29 | TM_POW,
30 | TM_UNM,
31 | TM_LEN,
32 | TM_LT,
33 | TM_LE,
34 | TM_CONCAT,
35 | TM_CALL,
36 | TM_N /* number of elements in the enum */
37 | } TMS;
38 |
39 |
40 |
41 | #define gfasttm(g,et,e) ((et) == NULL ? NULL : \
42 | ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e]))
43 |
44 | #define fasttm(l,et,e) gfasttm(G(l), et, e)
45 |
46 | LUAI_DATA const char *const luaT_typenames[];
47 |
48 |
49 | LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename);
50 | LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o,
51 | TMS event);
52 | LUAI_FUNC void luaT_init (lua_State *L);
53 |
54 | #endif
55 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lualib.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lualib.h,v 1.36.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Lua standard libraries
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 |
8 | #ifndef lualib_h
9 | #define lualib_h
10 |
11 | #include "lua.h"
12 |
13 |
14 | /* Key to file-handle type */
15 | #define LUA_FILEHANDLE "FILE*"
16 |
17 |
18 | #define LUA_COLIBNAME "coroutine"
19 | LUALIB_API int (luaopen_base) (lua_State *L);
20 |
21 | #define LUA_TABLIBNAME "table"
22 | LUALIB_API int (luaopen_table) (lua_State *L);
23 |
24 | #define LUA_IOLIBNAME "io"
25 | LUALIB_API int (luaopen_io) (lua_State *L);
26 |
27 | #define LUA_OSLIBNAME "os"
28 | LUALIB_API int (luaopen_os) (lua_State *L);
29 |
30 | #define LUA_STRLIBNAME "string"
31 | LUALIB_API int (luaopen_string) (lua_State *L);
32 |
33 | #define LUA_MATHLIBNAME "math"
34 | LUALIB_API int (luaopen_math) (lua_State *L);
35 |
36 | #define LUA_DBLIBNAME "debug"
37 | LUALIB_API int (luaopen_debug) (lua_State *L);
38 |
39 | #define LUA_LOADLIBNAME "package"
40 | LUALIB_API int (luaopen_package) (lua_State *L);
41 |
42 |
43 | /* open all previous libraries */
44 | LUALIB_API void (luaL_openlibs) (lua_State *L);
45 |
46 |
47 |
48 | #ifndef lua_assert
49 | #define lua_assert(x) ((void)0)
50 | #endif
51 |
52 |
53 | #endif
54 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-qt.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | using namespace std;
3 |
4 | #include
5 | #include
6 |
7 | #include "example-qt.h"
8 |
9 | void getCallback(redisAsyncContext *, void * r, void * privdata) {
10 |
11 | redisReply * reply = static_cast(r);
12 | ExampleQt * ex = static_cast(privdata);
13 | if (reply == nullptr || ex == nullptr) return;
14 |
15 | cout << "key: " << reply->str << endl;
16 |
17 | ex->finish();
18 | }
19 |
20 | void ExampleQt::run() {
21 |
22 | m_ctx = redisAsyncConnect("localhost", 6379);
23 |
24 | if (m_ctx->err) {
25 | cerr << "Error: " << m_ctx->errstr << endl;
26 | redisAsyncFree(m_ctx);
27 | emit finished();
28 | }
29 |
30 | m_adapter.setContext(m_ctx);
31 |
32 | redisAsyncCommand(m_ctx, NULL, NULL, "SET key %s", m_value);
33 | redisAsyncCommand(m_ctx, getCallback, this, "GET key");
34 | }
35 |
36 | int main (int argc, char **argv) {
37 |
38 | QCoreApplication app(argc, argv);
39 |
40 | ExampleQt example(argv[argc-1]);
41 |
42 | QObject::connect(&example, SIGNAL(finished()), &app, SLOT(quit()));
43 | QTimer::singleShot(0, &example, SLOT(run()));
44 |
45 | return app.exec();
46 | }
47 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lfunc.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lfunc.h,v 2.4.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Auxiliary functions to manipulate prototypes and closures
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lfunc_h
8 | #define lfunc_h
9 |
10 |
11 | #include "lobject.h"
12 |
13 |
14 | #define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \
15 | cast(int, sizeof(TValue)*((n)-1)))
16 |
17 | #define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \
18 | cast(int, sizeof(TValue *)*((n)-1)))
19 |
20 |
21 | LUAI_FUNC Proto *luaF_newproto (lua_State *L);
22 | LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e);
23 | LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e);
24 | LUAI_FUNC UpVal *luaF_newupval (lua_State *L);
25 | LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level);
26 | LUAI_FUNC void luaF_close (lua_State *L, StkId level);
27 | LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f);
28 | LUAI_FUNC void luaF_freeclosure (lua_State *L, Closure *c);
29 | LUAI_FUNC void luaF_freeupval (lua_State *L, UpVal *uv);
30 | LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number,
31 | int pc);
32 |
33 |
34 | #endif
35 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/README:
--------------------------------------------------------------------------------
1 | These are simple tests for Lua. Some of them contain useful code.
2 | They are meant to be run to make sure Lua is built correctly and also
3 | to be read, to see how Lua programs look.
4 |
5 | Here is a one-line summary of each program:
6 |
7 | bisect.lua bisection method for solving non-linear equations
8 | cf.lua temperature conversion table (celsius to farenheit)
9 | echo.lua echo command line arguments
10 | env.lua environment variables as automatic global variables
11 | factorial.lua factorial without recursion
12 | fib.lua fibonacci function with cache
13 | fibfor.lua fibonacci numbers with coroutines and generators
14 | globals.lua report global variable usage
15 | hello.lua the first program in every language
16 | life.lua Conway's Game of Life
17 | luac.lua bare-bones luac
18 | printf.lua an implementation of printf
19 | readonly.lua make global variables readonly
20 | sieve.lua the sieve of of Eratosthenes programmed with coroutines
21 | sort.lua two implementations of a sort function
22 | table.lua make table, grouping all data for the same item
23 | trace-calls.lua trace calls
24 | trace-globals.lua trace assigments to global variables
25 | xd.lua hex dump
26 |
27 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/mtx.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define NTHREADS 2
4 | #define NINCRS 2000000
5 |
6 | TEST_BEGIN(test_mtx_basic)
7 | {
8 | mtx_t mtx;
9 |
10 | assert_false(mtx_init(&mtx), "Unexpected mtx_init() failure");
11 | mtx_lock(&mtx);
12 | mtx_unlock(&mtx);
13 | mtx_fini(&mtx);
14 | }
15 | TEST_END
16 |
17 | typedef struct {
18 | mtx_t mtx;
19 | unsigned x;
20 | } thd_start_arg_t;
21 |
22 | static void *
23 | thd_start(void *varg)
24 | {
25 | thd_start_arg_t *arg = (thd_start_arg_t *)varg;
26 | unsigned i;
27 |
28 | for (i = 0; i < NINCRS; i++) {
29 | mtx_lock(&arg->mtx);
30 | arg->x++;
31 | mtx_unlock(&arg->mtx);
32 | }
33 | return (NULL);
34 | }
35 |
36 | TEST_BEGIN(test_mtx_race)
37 | {
38 | thd_start_arg_t arg;
39 | thd_t thds[NTHREADS];
40 | unsigned i;
41 |
42 | assert_false(mtx_init(&arg.mtx), "Unexpected mtx_init() failure");
43 | arg.x = 0;
44 | for (i = 0; i < NTHREADS; i++)
45 | thd_create(&thds[i], thd_start, (void *)&arg);
46 | for (i = 0; i < NTHREADS; i++)
47 | thd_join(thds[i], NULL);
48 | assert_u_eq(arg.x, NTHREADS * NINCRS,
49 | "Race-related counter corruption");
50 | }
51 | TEST_END
52 |
53 | int
54 | main(void)
55 | {
56 |
57 | return (test(
58 | test_mtx_basic,
59 | test_mtx_race));
60 | }
61 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/integration/sdallocx.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define MAXALIGN (((size_t)1) << 25)
4 | #define NITER 4
5 |
6 | TEST_BEGIN(test_basic)
7 | {
8 | void *ptr = mallocx(64, 0);
9 | sdallocx(ptr, 64, 0);
10 | }
11 | TEST_END
12 |
13 | TEST_BEGIN(test_alignment_and_size)
14 | {
15 | size_t nsz, sz, alignment, total;
16 | unsigned i;
17 | void *ps[NITER];
18 |
19 | for (i = 0; i < NITER; i++)
20 | ps[i] = NULL;
21 |
22 | for (alignment = 8;
23 | alignment <= MAXALIGN;
24 | alignment <<= 1) {
25 | total = 0;
26 | for (sz = 1;
27 | sz < 3 * alignment && sz < (1U << 31);
28 | sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) {
29 | for (i = 0; i < NITER; i++) {
30 | nsz = nallocx(sz, MALLOCX_ALIGN(alignment) |
31 | MALLOCX_ZERO);
32 | ps[i] = mallocx(sz, MALLOCX_ALIGN(alignment) |
33 | MALLOCX_ZERO);
34 | total += nsz;
35 | if (total >= (MAXALIGN << 1))
36 | break;
37 | }
38 | for (i = 0; i < NITER; i++) {
39 | if (ps[i] != NULL) {
40 | sdallocx(ps[i], sz,
41 | MALLOCX_ALIGN(alignment));
42 | ps[i] = NULL;
43 | }
44 | }
45 | }
46 | }
47 | }
48 | TEST_END
49 |
50 | int
51 | main(void)
52 | {
53 |
54 | return (test(
55 | test_basic,
56 | test_alignment_and_size));
57 | }
58 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lvm.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lvm.h,v 2.5.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Lua virtual machine
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lvm_h
8 | #define lvm_h
9 |
10 |
11 | #include "ldo.h"
12 | #include "lobject.h"
13 | #include "ltm.h"
14 |
15 |
16 | #define tostring(L,o) ((ttype(o) == LUA_TSTRING) || (luaV_tostring(L, o)))
17 |
18 | #define tonumber(o,n) (ttype(o) == LUA_TNUMBER || \
19 | (((o) = luaV_tonumber(o,n)) != NULL))
20 |
21 | #define equalobj(L,o1,o2) \
22 | (ttype(o1) == ttype(o2) && luaV_equalval(L, o1, o2))
23 |
24 |
25 | LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r);
26 | LUAI_FUNC int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2);
27 | LUAI_FUNC const TValue *luaV_tonumber (const TValue *obj, TValue *n);
28 | LUAI_FUNC int luaV_tostring (lua_State *L, StkId obj);
29 | LUAI_FUNC void luaV_gettable (lua_State *L, const TValue *t, TValue *key,
30 | StkId val);
31 | LUAI_FUNC void luaV_settable (lua_State *L, const TValue *t, TValue *key,
32 | StkId val);
33 | LUAI_FUNC void luaV_execute (lua_State *L, int nexeccalls);
34 | LUAI_FUNC void luaV_concat (lua_State *L, int total, int last);
35 |
36 | #endif
37 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/ltable.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: ltable.h,v 2.10.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Lua tables (hash)
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef ltable_h
8 | #define ltable_h
9 |
10 | #include "lobject.h"
11 |
12 |
13 | #define gnode(t,i) (&(t)->node[i])
14 | #define gkey(n) (&(n)->i_key.nk)
15 | #define gval(n) (&(n)->i_val)
16 | #define gnext(n) ((n)->i_key.nk.next)
17 |
18 | #define key2tval(n) (&(n)->i_key.tvk)
19 |
20 |
21 | LUAI_FUNC const TValue *luaH_getnum (Table *t, int key);
22 | LUAI_FUNC TValue *luaH_setnum (lua_State *L, Table *t, int key);
23 | LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key);
24 | LUAI_FUNC TValue *luaH_setstr (lua_State *L, Table *t, TString *key);
25 | LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key);
26 | LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key);
27 | LUAI_FUNC Table *luaH_new (lua_State *L, int narray, int lnhash);
28 | LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, int nasize);
29 | LUAI_FUNC void luaH_free (lua_State *L, Table *t);
30 | LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key);
31 | LUAI_FUNC int luaH_getn (Table *t);
32 |
33 |
34 | #if defined(LUA_DEBUG)
35 | LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key);
36 | LUAI_FUNC int luaH_isdummy (Node *n);
37 | #endif
38 |
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/mtx.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #ifndef _CRT_SPINCOUNT
4 | #define _CRT_SPINCOUNT 4000
5 | #endif
6 |
7 | bool
8 | mtx_init(mtx_t *mtx)
9 | {
10 |
11 | #ifdef _WIN32
12 | if (!InitializeCriticalSectionAndSpinCount(&mtx->lock, _CRT_SPINCOUNT))
13 | return (true);
14 | #elif (defined(JEMALLOC_OSSPIN))
15 | mtx->lock = 0;
16 | #else
17 | pthread_mutexattr_t attr;
18 |
19 | if (pthread_mutexattr_init(&attr) != 0)
20 | return (true);
21 | pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT);
22 | if (pthread_mutex_init(&mtx->lock, &attr) != 0) {
23 | pthread_mutexattr_destroy(&attr);
24 | return (true);
25 | }
26 | pthread_mutexattr_destroy(&attr);
27 | #endif
28 | return (false);
29 | }
30 |
31 | void
32 | mtx_fini(mtx_t *mtx)
33 | {
34 |
35 | #ifdef _WIN32
36 | #elif (defined(JEMALLOC_OSSPIN))
37 | #else
38 | pthread_mutex_destroy(&mtx->lock);
39 | #endif
40 | }
41 |
42 | void
43 | mtx_lock(mtx_t *mtx)
44 | {
45 |
46 | #ifdef _WIN32
47 | EnterCriticalSection(&mtx->lock);
48 | #elif (defined(JEMALLOC_OSSPIN))
49 | OSSpinLockLock(&mtx->lock);
50 | #else
51 | pthread_mutex_lock(&mtx->lock);
52 | #endif
53 | }
54 |
55 | void
56 | mtx_unlock(mtx_t *mtx)
57 | {
58 |
59 | #ifdef _WIN32
60 | LeaveCriticalSection(&mtx->lock);
61 | #elif (defined(JEMALLOC_OSSPIN))
62 | OSSpinLockUnlock(&mtx->lock);
63 | #else
64 | pthread_mutex_unlock(&mtx->lock);
65 | #endif
66 | }
67 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/chunk_dss.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************/
2 | #ifdef JEMALLOC_H_TYPES
3 |
4 | typedef enum {
5 | dss_prec_disabled = 0,
6 | dss_prec_primary = 1,
7 | dss_prec_secondary = 2,
8 |
9 | dss_prec_limit = 3
10 | } dss_prec_t;
11 | #define DSS_PREC_DEFAULT dss_prec_secondary
12 | #define DSS_DEFAULT "secondary"
13 |
14 | #endif /* JEMALLOC_H_TYPES */
15 | /******************************************************************************/
16 | #ifdef JEMALLOC_H_STRUCTS
17 |
18 | extern const char *dss_prec_names[];
19 |
20 | #endif /* JEMALLOC_H_STRUCTS */
21 | /******************************************************************************/
22 | #ifdef JEMALLOC_H_EXTERNS
23 |
24 | dss_prec_t chunk_dss_prec_get(void);
25 | bool chunk_dss_prec_set(dss_prec_t dss_prec);
26 | void *chunk_alloc_dss(arena_t *arena, void *new_addr, size_t size,
27 | size_t alignment, bool *zero, bool *commit);
28 | bool chunk_in_dss(void *chunk);
29 | bool chunk_dss_boot(void);
30 | void chunk_dss_prefork(void);
31 | void chunk_dss_postfork_parent(void);
32 | void chunk_dss_postfork_child(void);
33 |
34 | #endif /* JEMALLOC_H_EXTERNS */
35 | /******************************************************************************/
36 | #ifdef JEMALLOC_H_INLINES
37 |
38 | #endif /* JEMALLOC_H_INLINES */
39 | /******************************************************************************/
40 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/etc/noparser.c:
--------------------------------------------------------------------------------
1 | /*
2 | * The code below can be used to make a Lua core that does not contain the
3 | * parsing modules (lcode, llex, lparser), which represent 35% of the total core.
4 | * You'll only be able to load binary files and strings, precompiled with luac.
5 | * (Of course, you'll have to build luac with the original parsing modules!)
6 | *
7 | * To use this module, simply compile it ("make noparser" does that) and list
8 | * its object file before the Lua libraries. The linker should then not load
9 | * the parsing modules. To try it, do "make luab".
10 | *
11 | * If you also want to avoid the dump module (ldump.o), define NODUMP.
12 | * #define NODUMP
13 | */
14 |
15 | #define LUA_CORE
16 |
17 | #include "llex.h"
18 | #include "lparser.h"
19 | #include "lzio.h"
20 |
21 | LUAI_FUNC void luaX_init (lua_State *L) {
22 | UNUSED(L);
23 | }
24 |
25 | LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) {
26 | UNUSED(z);
27 | UNUSED(buff);
28 | UNUSED(name);
29 | lua_pushliteral(L,"parser not loaded");
30 | lua_error(L);
31 | return NULL;
32 | }
33 |
34 | #ifdef NODUMP
35 | #include "lundump.h"
36 |
37 | LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) {
38 | UNUSED(f);
39 | UNUSED(w);
40 | UNUSED(data);
41 | UNUSED(strip);
42 | #if 1
43 | UNUSED(L);
44 | return 0;
45 | #else
46 | lua_pushliteral(L,"dumper not loaded");
47 | lua_error(L);
48 | #endif
49 | }
50 | #endif
51 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/jemalloc_mangle.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | public_symbols_txt=$1
4 | symbol_prefix=$2
5 |
6 | cat <
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
11 | redisReply *reply = r;
12 | if (reply == NULL) return;
13 | printf("argv[%s]: %s\n", (char*)privdata, reply->str);
14 |
15 | /* Disconnect after receiving the reply to GET */
16 | redisAsyncDisconnect(c);
17 | }
18 |
19 | void connectCallback(const redisAsyncContext *c, int status) {
20 | if (status != REDIS_OK) {
21 | printf("Error: %s\n", c->errstr);
22 | return;
23 | }
24 | printf("Connected...\n");
25 | }
26 |
27 | void disconnectCallback(const redisAsyncContext *c, int status) {
28 | if (status != REDIS_OK) {
29 | printf("Error: %s\n", c->errstr);
30 | return;
31 | }
32 | printf("Disconnected...\n");
33 | }
34 |
35 | int main (int argc, char **argv) {
36 | signal(SIGPIPE, SIG_IGN);
37 |
38 | redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
39 | if (c->err) {
40 | /* Let *c leak for now... */
41 | printf("Error: %s\n", c->errstr);
42 | return 1;
43 | }
44 |
45 | redisLibevAttach(EV_DEFAULT_ c);
46 | redisAsyncSetConnectCallback(c,connectCallback);
47 | redisAsyncSetDisconnectCallback(c,disconnectCallback);
48 | redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));
49 | redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
50 | ev_loop(EV_DEFAULT_ 0);
51 | return 0;
52 | }
53 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/COPYRIGHT:
--------------------------------------------------------------------------------
1 | Lua License
2 | -----------
3 |
4 | Lua is licensed under the terms of the MIT license reproduced below.
5 | This means that Lua is free software and can be used for both academic
6 | and commercial purposes at absolutely no cost.
7 |
8 | For details and rationale, see http://www.lua.org/license.html .
9 |
10 | ===============================================================================
11 |
12 | Copyright (C) 1994-2012 Lua.org, PUC-Rio.
13 |
14 | Permission is hereby granted, free of charge, to any person obtaining a copy
15 | of this software and associated documentation files (the "Software"), to deal
16 | in the Software without restriction, including without limitation the rights
17 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18 | copies of the Software, and to permit persons to whom the Software is
19 | furnished to do so, subject to the following conditions:
20 |
21 | The above copyright notice and this permission notice shall be included in
22 | all copies or substantial portions of the Software.
23 |
24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
30 | THE SOFTWARE.
31 |
32 | ===============================================================================
33 |
34 | (end of COPYRIGHT)
35 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/appveyor.yml:
--------------------------------------------------------------------------------
1 | # Appveyor configuration file for CI build of hiredis on Windows (under Cygwin)
2 | environment:
3 | matrix:
4 | - CYG_ROOT: C:\cygwin64
5 | CYG_SETUP: setup-x86_64.exe
6 | CYG_MIRROR: http://cygwin.mirror.constant.com
7 | CYG_CACHE: C:\cygwin64\var\cache\setup
8 | CYG_BASH: C:\cygwin64\bin\bash
9 | CC: gcc
10 | - CYG_ROOT: C:\cygwin
11 | CYG_SETUP: setup-x86.exe
12 | CYG_MIRROR: http://cygwin.mirror.constant.com
13 | CYG_CACHE: C:\cygwin\var\cache\setup
14 | CYG_BASH: C:\cygwin\bin\bash
15 | CC: gcc
16 | TARGET: 32bit
17 | TARGET_VARS: 32bit-vars
18 |
19 | # Cache Cygwin files to speed up build
20 | cache:
21 | - '%CYG_CACHE%'
22 | clone_depth: 1
23 |
24 | # Attempt to ensure we don't try to convert line endings to Win32 CRLF as this will cause build to fail
25 | init:
26 | - git config --global core.autocrlf input
27 |
28 | # Install needed build dependencies
29 | install:
30 | - ps: 'Start-FileDownload "http://cygwin.com/$env:CYG_SETUP" -FileName "$env:CYG_SETUP"'
31 | - '%CYG_SETUP% --quiet-mode --no-shortcuts --only-site --root "%CYG_ROOT%" --site "%CYG_MIRROR%" --local-package-dir "%CYG_CACHE%" --packages automake,bison,gcc-core,libtool,make,gettext-devel,gettext,intltool,pkg-config,clang,llvm > NUL 2>&1'
32 | - '%CYG_BASH% -lc "cygcheck -dc cygwin"'
33 |
34 | build_script:
35 | - 'echo building...'
36 | - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0
5 | #ifdef _WIN32
6 | # include
7 | # include "msvc_compat/windows_extra.h"
8 |
9 | #else
10 | # include
11 | # include
12 | # if !defined(__pnacl__) && !defined(__native_client__)
13 | # include
14 | # if !defined(SYS_write) && defined(__NR_write)
15 | # define SYS_write __NR_write
16 | # endif
17 | # include
18 | # endif
19 | # include
20 | # include
21 | #endif
22 | #include
23 |
24 | #include
25 | #ifndef SIZE_T_MAX
26 | # define SIZE_T_MAX SIZE_MAX
27 | #endif
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include
33 | #include
34 | #ifndef offsetof
35 | # define offsetof(type, member) ((size_t)&(((type *)NULL)->member))
36 | #endif
37 | #include
38 | #include
39 | #include
40 | #ifdef _MSC_VER
41 | # include
42 | typedef intptr_t ssize_t;
43 | # define PATH_MAX 1024
44 | # define STDERR_FILENO 2
45 | # define __func__ __FUNCTION__
46 | # ifdef JEMALLOC_HAS_RESTRICT
47 | # define restrict __restrict
48 | # endif
49 | /* Disable warnings about deprecated system functions. */
50 | # pragma warning(disable: 4996)
51 | #if _MSC_VER < 1800
52 | static int
53 | isblank(int c)
54 | {
55 |
56 | return (c == '\t' || c == ' ');
57 | }
58 | #endif
59 | #else
60 | # include
61 | #endif
62 | #include
63 |
64 | #endif /* JEMALLOC_INTERNAL_H */
65 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/doc/lua.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: #000000 ;
3 | background-color: #FFFFFF ;
4 | font-family: Helvetica, Arial, sans-serif ;
5 | text-align: justify ;
6 | margin-right: 30px ;
7 | margin-left: 30px ;
8 | }
9 |
10 | h1, h2, h3, h4 {
11 | font-family: Verdana, Geneva, sans-serif ;
12 | font-weight: normal ;
13 | font-style: italic ;
14 | }
15 |
16 | h2 {
17 | padding-top: 0.4em ;
18 | padding-bottom: 0.4em ;
19 | padding-left: 30px ;
20 | padding-right: 30px ;
21 | margin-left: -30px ;
22 | background-color: #E0E0FF ;
23 | }
24 |
25 | h3 {
26 | padding-left: 0.5em ;
27 | border-left: solid #E0E0FF 1em ;
28 | }
29 |
30 | table h3 {
31 | padding-left: 0px ;
32 | border-left: none ;
33 | }
34 |
35 | a:link {
36 | color: #000080 ;
37 | background-color: inherit ;
38 | text-decoration: none ;
39 | }
40 |
41 | a:visited {
42 | background-color: inherit ;
43 | text-decoration: none ;
44 | }
45 |
46 | a:link:hover, a:visited:hover {
47 | color: #000080 ;
48 | background-color: #E0E0FF ;
49 | }
50 |
51 | a:link:active, a:visited:active {
52 | color: #FF0000 ;
53 | }
54 |
55 | hr {
56 | border: 0 ;
57 | height: 1px ;
58 | color: #a0a0a0 ;
59 | background-color: #a0a0a0 ;
60 | }
61 |
62 | :target {
63 | background-color: #F8F8F8 ;
64 | padding: 8px ;
65 | border: solid #a0a0a0 2px ;
66 | }
67 |
68 | .footer {
69 | color: gray ;
70 | font-size: small ;
71 | }
72 |
73 | input[type=text] {
74 | border: solid #a0a0a0 2px ;
75 | border-radius: 2em ;
76 | -moz-border-radius: 2em ;
77 | background-image: url('images/search.png') ;
78 | background-repeat: no-repeat;
79 | background-position: 4px center ;
80 | padding-left: 20px ;
81 | height: 2em ;
82 | }
83 |
84 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-ivykis.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
11 | redisReply *reply = r;
12 | if (reply == NULL) return;
13 | printf("argv[%s]: %s\n", (char*)privdata, reply->str);
14 |
15 | /* Disconnect after receiving the reply to GET */
16 | redisAsyncDisconnect(c);
17 | }
18 |
19 | void connectCallback(const redisAsyncContext *c, int status) {
20 | if (status != REDIS_OK) {
21 | printf("Error: %s\n", c->errstr);
22 | return;
23 | }
24 | printf("Connected...\n");
25 | }
26 |
27 | void disconnectCallback(const redisAsyncContext *c, int status) {
28 | if (status != REDIS_OK) {
29 | printf("Error: %s\n", c->errstr);
30 | return;
31 | }
32 | printf("Disconnected...\n");
33 | }
34 |
35 | int main (int argc, char **argv) {
36 | signal(SIGPIPE, SIG_IGN);
37 |
38 | iv_init();
39 |
40 | redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
41 | if (c->err) {
42 | /* Let *c leak for now... */
43 | printf("Error: %s\n", c->errstr);
44 | return 1;
45 | }
46 |
47 | redisIvykisAttach(c);
48 | redisAsyncSetConnectCallback(c,connectCallback);
49 | redisAsyncSetDisconnectCallback(c,disconnectCallback);
50 | redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));
51 | redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
52 |
53 | iv_main();
54 |
55 | iv_deinit();
56 |
57 | return 0;
58 | }
59 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-libuv.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
11 | redisReply *reply = r;
12 | if (reply == NULL) return;
13 | printf("argv[%s]: %s\n", (char*)privdata, reply->str);
14 |
15 | /* Disconnect after receiving the reply to GET */
16 | redisAsyncDisconnect(c);
17 | }
18 |
19 | void connectCallback(const redisAsyncContext *c, int status) {
20 | if (status != REDIS_OK) {
21 | printf("Error: %s\n", c->errstr);
22 | return;
23 | }
24 | printf("Connected...\n");
25 | }
26 |
27 | void disconnectCallback(const redisAsyncContext *c, int status) {
28 | if (status != REDIS_OK) {
29 | printf("Error: %s\n", c->errstr);
30 | return;
31 | }
32 | printf("Disconnected...\n");
33 | }
34 |
35 | int main (int argc, char **argv) {
36 | signal(SIGPIPE, SIG_IGN);
37 | uv_loop_t* loop = uv_default_loop();
38 |
39 | redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
40 | if (c->err) {
41 | /* Let *c leak for now... */
42 | printf("Error: %s\n", c->errstr);
43 | return 1;
44 | }
45 |
46 | redisLibuvAttach(c,loop);
47 | redisAsyncSetConnectCallback(c,connectCallback);
48 | redisAsyncSetDisconnectCallback(c,disconnectCallback);
49 | redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));
50 | redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
51 | uv_run(loop, UV_RUN_DEFAULT);
52 | return 0;
53 | }
54 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/extent.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_EXTENT_C_
2 | #include "jemalloc/internal/jemalloc_internal.h"
3 |
4 | /******************************************************************************/
5 |
6 | JEMALLOC_INLINE_C size_t
7 | extent_quantize(size_t size)
8 | {
9 |
10 | /*
11 | * Round down to the nearest chunk size that can actually be requested
12 | * during normal huge allocation.
13 | */
14 | return (index2size(size2index(size + 1) - 1));
15 | }
16 |
17 | JEMALLOC_INLINE_C int
18 | extent_szad_comp(extent_node_t *a, extent_node_t *b)
19 | {
20 | int ret;
21 | size_t a_qsize = extent_quantize(extent_node_size_get(a));
22 | size_t b_qsize = extent_quantize(extent_node_size_get(b));
23 |
24 | /*
25 | * Compare based on quantized size rather than size, in order to sort
26 | * equally useful extents only by address.
27 | */
28 | ret = (a_qsize > b_qsize) - (a_qsize < b_qsize);
29 | if (ret == 0) {
30 | uintptr_t a_addr = (uintptr_t)extent_node_addr_get(a);
31 | uintptr_t b_addr = (uintptr_t)extent_node_addr_get(b);
32 |
33 | ret = (a_addr > b_addr) - (a_addr < b_addr);
34 | }
35 |
36 | return (ret);
37 | }
38 |
39 | /* Generate red-black tree functions. */
40 | rb_gen(, extent_tree_szad_, extent_tree_t, extent_node_t, szad_link,
41 | extent_szad_comp)
42 |
43 | JEMALLOC_INLINE_C int
44 | extent_ad_comp(extent_node_t *a, extent_node_t *b)
45 | {
46 | uintptr_t a_addr = (uintptr_t)extent_node_addr_get(a);
47 | uintptr_t b_addr = (uintptr_t)extent_node_addr_get(b);
48 |
49 | return ((a_addr > b_addr) - (a_addr < b_addr));
50 | }
51 |
52 | /* Generate red-black tree functions. */
53 | rb_gen(, extent_tree_ad_, extent_tree_t, extent_node_t, ad_link, extent_ad_comp)
54 |
--------------------------------------------------------------------------------
/redis-4.0/src/modules/gendoc.rb:
--------------------------------------------------------------------------------
1 | # gendoc.rb -- Converts the top-comments inside module.c to modules API
2 | # reference documentaiton in markdown format.
3 |
4 | # Convert the C comment to markdown
5 | def markdown(s)
6 | s = s.gsub(/\*\/$/,"")
7 | s = s.gsub(/^ \* {0,1}/,"")
8 | s = s.gsub(/^\/\* /,"")
9 | s.chop! while s[-1] == "\n" || s[-1] == " "
10 | lines = s.split("\n")
11 | newlines = []
12 | lines.each{|l|
13 | if l[0] != ' '
14 | l = l.gsub(/RM_[A-z()]+/){|x| "`#{x}`"}
15 | l = l.gsub(/RedisModule_[A-z()]+/){|x| "`#{x}`"}
16 | l = l.gsub(/REDISMODULE_[A-z]+/){|x| "`#{x}`"}
17 | end
18 | newlines << l
19 | }
20 | return newlines.join("\n")
21 | end
22 |
23 | # Given the source code array and the index at which an exported symbol was
24 | # detected, extracts and outputs the documentation.
25 | def docufy(src,i)
26 | m = /RM_[A-z0-9]+/.match(src[i])
27 | name = m[0]
28 | name = name.sub("RM_","RedisModule_")
29 | proto = src[i].sub("{","").strip+";\n"
30 | proto = proto.sub("RM_","RedisModule_")
31 | puts "## `#{name}`\n\n"
32 | puts " #{proto}\n"
33 | comment = ""
34 | while true
35 | i = i-1
36 | comment = src[i]+comment
37 | break if src[i] =~ /\/\*/
38 | end
39 | comment = markdown(comment)
40 | puts comment+"\n\n"
41 | end
42 |
43 | puts "# Modules API reference\n\n"
44 | src = File.open("../module.c").to_a
45 | src.each_with_index{|line,i|
46 | if line =~ /RM_/ && line[0] != ' ' && line[0] != '#' && line[0] != '/'
47 | if src[i-1] =~ /\*\//
48 | docufy(src,i)
49 | end
50 | end
51 | }
52 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/COPYING:
--------------------------------------------------------------------------------
1 | Copyright (c) 2009-2011, Salvatore Sanfilippo
2 | Copyright (c) 2010-2011, Pieter Noordhuis
3 |
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice,
10 | this list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | * Neither the name of Redis nor the names of its contributors may be used
17 | to endorse or promote products derived from this software without specific
18 | prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
24 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
27 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-libevent.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
11 | redisReply *reply = r;
12 | if (reply == NULL) return;
13 | printf("argv[%s]: %s\n", (char*)privdata, reply->str);
14 |
15 | /* Disconnect after receiving the reply to GET */
16 | redisAsyncDisconnect(c);
17 | }
18 |
19 | void connectCallback(const redisAsyncContext *c, int status) {
20 | if (status != REDIS_OK) {
21 | printf("Error: %s\n", c->errstr);
22 | return;
23 | }
24 | printf("Connected...\n");
25 | }
26 |
27 | void disconnectCallback(const redisAsyncContext *c, int status) {
28 | if (status != REDIS_OK) {
29 | printf("Error: %s\n", c->errstr);
30 | return;
31 | }
32 | printf("Disconnected...\n");
33 | }
34 |
35 | int main (int argc, char **argv) {
36 | signal(SIGPIPE, SIG_IGN);
37 | struct event_base *base = event_base_new();
38 |
39 | redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
40 | if (c->err) {
41 | /* Let *c leak for now... */
42 | printf("Error: %s\n", c->errstr);
43 | return 1;
44 | }
45 |
46 | redisLibeventAttach(c,base);
47 | redisAsyncSetConnectCallback(c,connectCallback);
48 | redisAsyncSetDisconnectCallback(c,disconnectCallback);
49 | redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));
50 | redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
51 | event_base_dispatch(base);
52 | return 0;
53 | }
54 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lmem.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lmem.h,v 1.31.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Interface to Memory Manager
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lmem_h
8 | #define lmem_h
9 |
10 |
11 | #include
12 |
13 | #include "llimits.h"
14 | #include "lua.h"
15 |
16 | #define MEMERRMSG "not enough memory"
17 |
18 |
19 | #define luaM_reallocv(L,b,on,n,e) \
20 | ((cast(size_t, (n)+1) <= MAX_SIZET/(e)) ? /* +1 to avoid warnings */ \
21 | luaM_realloc_(L, (b), (on)*(e), (n)*(e)) : \
22 | luaM_toobig(L))
23 |
24 | #define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0)
25 | #define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0)
26 | #define luaM_freearray(L, b, n, t) luaM_reallocv(L, (b), n, 0, sizeof(t))
27 |
28 | #define luaM_malloc(L,t) luaM_realloc_(L, NULL, 0, (t))
29 | #define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t)))
30 | #define luaM_newvector(L,n,t) \
31 | cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t)))
32 |
33 | #define luaM_growvector(L,v,nelems,size,t,limit,e) \
34 | if ((nelems)+1 > (size)) \
35 | ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e)))
36 |
37 | #define luaM_reallocvector(L, v,oldn,n,t) \
38 | ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t))))
39 |
40 |
41 | LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize,
42 | size_t size);
43 | LUAI_FUNC void *luaM_toobig (lua_State *L);
44 | LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size,
45 | size_t size_elem, int limit,
46 | const char *errormsg);
47 |
48 | #endif
49 |
50 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/integration/MALLOCX_ARENA.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define NTHREADS 10
4 |
5 | static bool have_dss =
6 | #ifdef JEMALLOC_DSS
7 | true
8 | #else
9 | false
10 | #endif
11 | ;
12 |
13 | void *
14 | thd_start(void *arg)
15 | {
16 | unsigned thread_ind = (unsigned)(uintptr_t)arg;
17 | unsigned arena_ind;
18 | void *p;
19 | size_t sz;
20 |
21 | sz = sizeof(arena_ind);
22 | assert_d_eq(mallctl("arenas.extend", &arena_ind, &sz, NULL, 0), 0,
23 | "Error in arenas.extend");
24 |
25 | if (thread_ind % 4 != 3) {
26 | size_t mib[3];
27 | size_t miblen = sizeof(mib) / sizeof(size_t);
28 | const char *dss_precs[] = {"disabled", "primary", "secondary"};
29 | unsigned prec_ind = thread_ind %
30 | (sizeof(dss_precs)/sizeof(char*));
31 | const char *dss = dss_precs[prec_ind];
32 | int expected_err = (have_dss || prec_ind == 0) ? 0 : EFAULT;
33 | assert_d_eq(mallctlnametomib("arena.0.dss", mib, &miblen), 0,
34 | "Error in mallctlnametomib()");
35 | mib[1] = arena_ind;
36 | assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, (void *)&dss,
37 | sizeof(const char *)), expected_err,
38 | "Error in mallctlbymib()");
39 | }
40 |
41 | p = mallocx(1, MALLOCX_ARENA(arena_ind));
42 | assert_ptr_not_null(p, "Unexpected mallocx() error");
43 | dallocx(p, 0);
44 |
45 | return (NULL);
46 | }
47 |
48 | TEST_BEGIN(test_MALLOCX_ARENA)
49 | {
50 | thd_t thds[NTHREADS];
51 | unsigned i;
52 |
53 | for (i = 0; i < NTHREADS; i++) {
54 | thd_create(&thds[i], thd_start,
55 | (void *)(uintptr_t)i);
56 | }
57 |
58 | for (i = 0; i < NTHREADS; i++)
59 | thd_join(thds[i], NULL);
60 | }
61 | TEST_END
62 |
63 | int
64 | main(void)
65 | {
66 |
67 | return (test(
68 | test_MALLOCX_ARENA));
69 | }
70 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/test/sort.lua:
--------------------------------------------------------------------------------
1 | -- two implementations of a sort function
2 | -- this is an example only. Lua has now a built-in function "sort"
3 |
4 | -- extracted from Programming Pearls, page 110
5 | function qsort(x,l,u,f)
6 | if ly end)
58 | show("after reverse selection sort",x)
59 | qsort(x,1,n,function (x,y) return x.
5 | All rights reserved.
6 | Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
7 | Copyright (C) 2009-2015 Facebook, Inc. All rights reserved.
8 |
9 | Redistribution and use in source and binary forms, with or without
10 | modification, are permitted provided that the following conditions are met:
11 | 1. Redistributions of source code must retain the above copyright notice(s),
12 | this list of conditions and the following disclaimer.
13 | 2. Redistributions in binary form must reproduce the above copyright notice(s),
14 | this list of conditions and the following disclaimer in the documentation
15 | and/or other materials provided with the distribution.
16 |
17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
18 | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
20 | EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
21 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 | OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 | --------------------------------------------------------------------------------
28 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/zero.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #ifdef JEMALLOC_FILL
4 | const char *malloc_conf =
5 | "abort:false,junk:false,zero:true,redzone:false,quarantine:0";
6 | #endif
7 |
8 | static void
9 | test_zero(size_t sz_min, size_t sz_max)
10 | {
11 | char *s;
12 | size_t sz_prev, sz, i;
13 |
14 | sz_prev = 0;
15 | s = (char *)mallocx(sz_min, 0);
16 | assert_ptr_not_null((void *)s, "Unexpected mallocx() failure");
17 |
18 | for (sz = sallocx(s, 0); sz <= sz_max;
19 | sz_prev = sz, sz = sallocx(s, 0)) {
20 | if (sz_prev > 0) {
21 | assert_c_eq(s[0], 'a',
22 | "Previously allocated byte %zu/%zu is corrupted",
23 | ZU(0), sz_prev);
24 | assert_c_eq(s[sz_prev-1], 'a',
25 | "Previously allocated byte %zu/%zu is corrupted",
26 | sz_prev-1, sz_prev);
27 | }
28 |
29 | for (i = sz_prev; i < sz; i++) {
30 | assert_c_eq(s[i], 0x0,
31 | "Newly allocated byte %zu/%zu isn't zero-filled",
32 | i, sz);
33 | s[i] = 'a';
34 | }
35 |
36 | if (xallocx(s, sz+1, 0, 0) == sz) {
37 | s = (char *)rallocx(s, sz+1, 0);
38 | assert_ptr_not_null((void *)s,
39 | "Unexpected rallocx() failure");
40 | }
41 | }
42 |
43 | dallocx(s, 0);
44 | }
45 |
46 | TEST_BEGIN(test_zero_small)
47 | {
48 |
49 | test_skip_if(!config_fill);
50 | test_zero(1, SMALL_MAXCLASS-1);
51 | }
52 | TEST_END
53 |
54 | TEST_BEGIN(test_zero_large)
55 | {
56 |
57 | test_skip_if(!config_fill);
58 | test_zero(SMALL_MAXCLASS+1, large_maxclass);
59 | }
60 | TEST_END
61 |
62 | TEST_BEGIN(test_zero_huge)
63 | {
64 |
65 | test_skip_if(!config_fill);
66 | test_zero(large_maxclass+1, chunksize*2);
67 | }
68 | TEST_END
69 |
70 | int
71 | main(void)
72 | {
73 |
74 | return (test(
75 | test_zero_small,
76 | test_zero_large,
77 | test_zero_huge));
78 | }
79 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lzio.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lzio.h,v 1.21.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Buffered streams
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 |
8 | #ifndef lzio_h
9 | #define lzio_h
10 |
11 | #include "lua.h"
12 |
13 | #include "lmem.h"
14 |
15 |
16 | #define EOZ (-1) /* end of stream */
17 |
18 | typedef struct Zio ZIO;
19 |
20 | #define char2int(c) cast(int, cast(unsigned char, (c)))
21 |
22 | #define zgetc(z) (((z)->n--)>0 ? char2int(*(z)->p++) : luaZ_fill(z))
23 |
24 | typedef struct Mbuffer {
25 | char *buffer;
26 | size_t n;
27 | size_t buffsize;
28 | } Mbuffer;
29 |
30 | #define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0)
31 |
32 | #define luaZ_buffer(buff) ((buff)->buffer)
33 | #define luaZ_sizebuffer(buff) ((buff)->buffsize)
34 | #define luaZ_bufflen(buff) ((buff)->n)
35 |
36 | #define luaZ_resetbuffer(buff) ((buff)->n = 0)
37 |
38 |
39 | #define luaZ_resizebuffer(L, buff, size) \
40 | (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \
41 | (buff)->buffsize = size)
42 |
43 | #define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0)
44 |
45 |
46 | LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n);
47 | LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader,
48 | void *data);
49 | LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */
50 | LUAI_FUNC int luaZ_lookahead (ZIO *z);
51 |
52 |
53 |
54 | /* --------- Private Part ------------------ */
55 |
56 | struct Zio {
57 | size_t n; /* bytes still unread */
58 | const char *p; /* current position in buffer */
59 | lua_Reader reader;
60 | void* data; /* additional data */
61 | lua_State *L; /* Lua state (for reader) */
62 | };
63 |
64 |
65 | LUAI_FUNC int luaZ_fill (ZIO *z);
66 |
67 | #endif
68 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/jemalloc_typedefs.h.in:
--------------------------------------------------------------------------------
1 | /*
2 | * void *
3 | * chunk_alloc(void *new_addr, size_t size, size_t alignment, bool *zero,
4 | * bool *commit, unsigned arena_ind);
5 | */
6 | typedef void *(chunk_alloc_t)(void *, size_t, size_t, bool *, bool *, unsigned);
7 |
8 | /*
9 | * bool
10 | * chunk_dalloc(void *chunk, size_t size, bool committed, unsigned arena_ind);
11 | */
12 | typedef bool (chunk_dalloc_t)(void *, size_t, bool, unsigned);
13 |
14 | /*
15 | * bool
16 | * chunk_commit(void *chunk, size_t size, size_t offset, size_t length,
17 | * unsigned arena_ind);
18 | */
19 | typedef bool (chunk_commit_t)(void *, size_t, size_t, size_t, unsigned);
20 |
21 | /*
22 | * bool
23 | * chunk_decommit(void *chunk, size_t size, size_t offset, size_t length,
24 | * unsigned arena_ind);
25 | */
26 | typedef bool (chunk_decommit_t)(void *, size_t, size_t, size_t, unsigned);
27 |
28 | /*
29 | * bool
30 | * chunk_purge(void *chunk, size_t size, size_t offset, size_t length,
31 | * unsigned arena_ind);
32 | */
33 | typedef bool (chunk_purge_t)(void *, size_t, size_t, size_t, unsigned);
34 |
35 | /*
36 | * bool
37 | * chunk_split(void *chunk, size_t size, size_t size_a, size_t size_b,
38 | * bool committed, unsigned arena_ind);
39 | */
40 | typedef bool (chunk_split_t)(void *, size_t, size_t, size_t, bool, unsigned);
41 |
42 | /*
43 | * bool
44 | * chunk_merge(void *chunk_a, size_t size_a, void *chunk_b, size_t size_b,
45 | * bool committed, unsigned arena_ind);
46 | */
47 | typedef bool (chunk_merge_t)(void *, size_t, void *, size_t, bool, unsigned);
48 |
49 | typedef struct {
50 | chunk_alloc_t *alloc;
51 | chunk_dalloc_t *dalloc;
52 | chunk_commit_t *commit;
53 | chunk_decommit_t *decommit;
54 | chunk_purge_t *purge;
55 | chunk_split_t *split;
56 | chunk_merge_t *merge;
57 | } chunk_hooks_t;
58 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-ae.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | /* Put event loop in the global scope, so it can be explicitly stopped */
11 | static aeEventLoop *loop;
12 |
13 | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
14 | redisReply *reply = r;
15 | if (reply == NULL) return;
16 | printf("argv[%s]: %s\n", (char*)privdata, reply->str);
17 |
18 | /* Disconnect after receiving the reply to GET */
19 | redisAsyncDisconnect(c);
20 | }
21 |
22 | void connectCallback(const redisAsyncContext *c, int status) {
23 | if (status != REDIS_OK) {
24 | printf("Error: %s\n", c->errstr);
25 | aeStop(loop);
26 | return;
27 | }
28 |
29 | printf("Connected...\n");
30 | }
31 |
32 | void disconnectCallback(const redisAsyncContext *c, int status) {
33 | if (status != REDIS_OK) {
34 | printf("Error: %s\n", c->errstr);
35 | aeStop(loop);
36 | return;
37 | }
38 |
39 | printf("Disconnected...\n");
40 | aeStop(loop);
41 | }
42 |
43 | int main (int argc, char **argv) {
44 | signal(SIGPIPE, SIG_IGN);
45 |
46 | redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
47 | if (c->err) {
48 | /* Let *c leak for now... */
49 | printf("Error: %s\n", c->errstr);
50 | return 1;
51 | }
52 |
53 | loop = aeCreateEventLoop(64);
54 | redisAeAttach(loop, c);
55 | redisAsyncSetConnectCallback(c,connectCallback);
56 | redisAsyncSetDisconnectCallback(c,disconnectCallback);
57 | redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));
58 | redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
59 | aeMain(loop);
60 | return 0;
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/.gitignore:
--------------------------------------------------------------------------------
1 | /*.gcov.*
2 |
3 | /bin/jemalloc-config
4 | /bin/jemalloc.sh
5 | /bin/jeprof
6 |
7 | /config.stamp
8 | /config.log
9 | /config.status
10 | /configure
11 |
12 | /doc/html.xsl
13 | /doc/manpages.xsl
14 | /doc/jemalloc.xml
15 | /doc/jemalloc.html
16 | /doc/jemalloc.3
17 |
18 | /jemalloc.pc
19 |
20 | /lib/
21 |
22 | /Makefile
23 |
24 | /include/jemalloc/internal/jemalloc_internal.h
25 | /include/jemalloc/internal/jemalloc_internal_defs.h
26 | /include/jemalloc/internal/private_namespace.h
27 | /include/jemalloc/internal/private_unnamespace.h
28 | /include/jemalloc/internal/public_namespace.h
29 | /include/jemalloc/internal/public_symbols.txt
30 | /include/jemalloc/internal/public_unnamespace.h
31 | /include/jemalloc/internal/size_classes.h
32 | /include/jemalloc/jemalloc.h
33 | /include/jemalloc/jemalloc_defs.h
34 | /include/jemalloc/jemalloc_macros.h
35 | /include/jemalloc/jemalloc_mangle.h
36 | /include/jemalloc/jemalloc_mangle_jet.h
37 | /include/jemalloc/jemalloc_protos.h
38 | /include/jemalloc/jemalloc_protos_jet.h
39 | /include/jemalloc/jemalloc_rename.h
40 | /include/jemalloc/jemalloc_typedefs.h
41 |
42 | /src/*.[od]
43 | /src/*.gcda
44 | /src/*.gcno
45 |
46 | /test/test.sh
47 | test/include/test/jemalloc_test.h
48 | test/include/test/jemalloc_test_defs.h
49 |
50 | /test/integration/[A-Za-z]*
51 | !/test/integration/[A-Za-z]*.*
52 | /test/integration/*.[od]
53 | /test/integration/*.gcda
54 | /test/integration/*.gcno
55 | /test/integration/*.out
56 |
57 | /test/src/*.[od]
58 | /test/src/*.gcda
59 | /test/src/*.gcno
60 |
61 | /test/stress/[A-Za-z]*
62 | !/test/stress/[A-Za-z]*.*
63 | /test/stress/*.[od]
64 | /test/stress/*.gcda
65 | /test/stress/*.gcno
66 | /test/stress/*.out
67 |
68 | /test/unit/[A-Za-z]*
69 | !/test/unit/[A-Za-z]*.*
70 | /test/unit/*.[od]
71 | /test/unit/*.gcda
72 | /test/unit/*.gcno
73 | /test/unit/*.out
74 |
75 | /VERSION
76 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/bin/jemalloc-config.in:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | usage() {
4 | cat <
7 | Options:
8 | --help | -h : Print usage.
9 | --version : Print jemalloc version.
10 | --revision : Print shared library revision number.
11 | --config : Print configure options used to build jemalloc.
12 | --prefix : Print installation directory prefix.
13 | --bindir : Print binary installation directory.
14 | --datadir : Print data installation directory.
15 | --includedir : Print include installation directory.
16 | --libdir : Print library installation directory.
17 | --mandir : Print manual page installation directory.
18 | --cc : Print compiler used to build jemalloc.
19 | --cflags : Print compiler flags used to build jemalloc.
20 | --cppflags : Print preprocessor flags used to build jemalloc.
21 | --ldflags : Print library flags used to build jemalloc.
22 | --libs : Print libraries jemalloc was linked against.
23 | EOF
24 | }
25 |
26 | prefix="@prefix@"
27 | exec_prefix="@exec_prefix@"
28 |
29 | case "$1" in
30 | --help | -h)
31 | usage
32 | exit 0
33 | ;;
34 | --version)
35 | echo "@jemalloc_version@"
36 | ;;
37 | --revision)
38 | echo "@rev@"
39 | ;;
40 | --config)
41 | echo "@CONFIG@"
42 | ;;
43 | --prefix)
44 | echo "@PREFIX@"
45 | ;;
46 | --bindir)
47 | echo "@BINDIR@"
48 | ;;
49 | --datadir)
50 | echo "@DATADIR@"
51 | ;;
52 | --includedir)
53 | echo "@INCLUDEDIR@"
54 | ;;
55 | --libdir)
56 | echo "@LIBDIR@"
57 | ;;
58 | --mandir)
59 | echo "@MANDIR@"
60 | ;;
61 | --cc)
62 | echo "@CC@"
63 | ;;
64 | --cflags)
65 | echo "@CFLAGS@"
66 | ;;
67 | --cppflags)
68 | echo "@CPPFLAGS@"
69 | ;;
70 | --ldflags)
71 | echo "@LDFLAGS@ @EXTRA_LDFLAGS@"
72 | ;;
73 | --libs)
74 | echo "@LIBS@"
75 | ;;
76 | *)
77 | usage
78 | exit 1
79 | esac
80 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/quarantine.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************/
2 | #ifdef JEMALLOC_H_TYPES
3 |
4 | typedef struct quarantine_obj_s quarantine_obj_t;
5 | typedef struct quarantine_s quarantine_t;
6 |
7 | /* Default per thread quarantine size if valgrind is enabled. */
8 | #define JEMALLOC_VALGRIND_QUARANTINE_DEFAULT (ZU(1) << 24)
9 |
10 | #endif /* JEMALLOC_H_TYPES */
11 | /******************************************************************************/
12 | #ifdef JEMALLOC_H_STRUCTS
13 |
14 | struct quarantine_obj_s {
15 | void *ptr;
16 | size_t usize;
17 | };
18 |
19 | struct quarantine_s {
20 | size_t curbytes;
21 | size_t curobjs;
22 | size_t first;
23 | #define LG_MAXOBJS_INIT 10
24 | size_t lg_maxobjs;
25 | quarantine_obj_t objs[1]; /* Dynamically sized ring buffer. */
26 | };
27 |
28 | #endif /* JEMALLOC_H_STRUCTS */
29 | /******************************************************************************/
30 | #ifdef JEMALLOC_H_EXTERNS
31 |
32 | void quarantine_alloc_hook_work(tsd_t *tsd);
33 | void quarantine(tsd_t *tsd, void *ptr);
34 | void quarantine_cleanup(tsd_t *tsd);
35 |
36 | #endif /* JEMALLOC_H_EXTERNS */
37 | /******************************************************************************/
38 | #ifdef JEMALLOC_H_INLINES
39 |
40 | #ifndef JEMALLOC_ENABLE_INLINE
41 | void quarantine_alloc_hook(void);
42 | #endif
43 |
44 | #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_QUARANTINE_C_))
45 | JEMALLOC_ALWAYS_INLINE void
46 | quarantine_alloc_hook(void)
47 | {
48 | tsd_t *tsd;
49 |
50 | assert(config_fill && opt_quarantine);
51 |
52 | tsd = tsd_fetch();
53 | if (tsd_quarantine_get(tsd) == NULL)
54 | quarantine_alloc_hook_work(tsd);
55 | }
56 | #endif
57 |
58 | #endif /* JEMALLOC_H_INLINES */
59 | /******************************************************************************/
60 |
61 |
--------------------------------------------------------------------------------
/redis-4.0/src/rand.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | *
8 | * * Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | * * Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | * * Neither the name of Redis nor the names of its contributors may be used
14 | * to endorse or promote products derived from this software without
15 | * specific prior written permission.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | #ifndef REDIS_RANDOM_H
31 | #define REDIS_RANDOM_H
32 |
33 | int32_t redisLrand48();
34 | void redisSrand48(int32_t seedval);
35 |
36 | #define REDIS_LRAND48_MAX INT32_MAX
37 |
38 | #endif
39 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/integration/thread_arena.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define NTHREADS 10
4 |
5 | void *
6 | thd_start(void *arg)
7 | {
8 | unsigned main_arena_ind = *(unsigned *)arg;
9 | void *p;
10 | unsigned arena_ind;
11 | size_t size;
12 | int err;
13 |
14 | p = malloc(1);
15 | assert_ptr_not_null(p, "Error in malloc()");
16 | free(p);
17 |
18 | size = sizeof(arena_ind);
19 | if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind,
20 | sizeof(main_arena_ind)))) {
21 | char buf[BUFERROR_BUF];
22 |
23 | buferror(err, buf, sizeof(buf));
24 | test_fail("Error in mallctl(): %s", buf);
25 | }
26 |
27 | size = sizeof(arena_ind);
28 | if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
29 | char buf[BUFERROR_BUF];
30 |
31 | buferror(err, buf, sizeof(buf));
32 | test_fail("Error in mallctl(): %s", buf);
33 | }
34 | assert_u_eq(arena_ind, main_arena_ind,
35 | "Arena index should be same as for main thread");
36 |
37 | return (NULL);
38 | }
39 |
40 | TEST_BEGIN(test_thread_arena)
41 | {
42 | void *p;
43 | unsigned arena_ind;
44 | size_t size;
45 | int err;
46 | thd_t thds[NTHREADS];
47 | unsigned i;
48 |
49 | p = malloc(1);
50 | assert_ptr_not_null(p, "Error in malloc()");
51 |
52 | size = sizeof(arena_ind);
53 | if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
54 | char buf[BUFERROR_BUF];
55 |
56 | buferror(err, buf, sizeof(buf));
57 | test_fail("Error in mallctl(): %s", buf);
58 | }
59 |
60 | for (i = 0; i < NTHREADS; i++) {
61 | thd_create(&thds[i], thd_start,
62 | (void *)&arena_ind);
63 | }
64 |
65 | for (i = 0; i < NTHREADS; i++) {
66 | intptr_t join_ret;
67 | thd_join(thds[i], (void *)&join_ret);
68 | assert_zd_eq(join_ret, 0, "Unexpected thread join error");
69 | }
70 | }
71 | TEST_END
72 |
73 | int
74 | main(void)
75 | {
76 |
77 | return (test(
78 | test_thread_arena));
79 | }
80 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-macosx.c:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Дмитрий Бахвалов on 13.07.15.
3 | // Copyright (c) 2015 Dmitry Bakhvalov. All rights reserved.
4 | //
5 |
6 | #include
7 |
8 | #include
9 | #include
10 | #include
11 |
12 | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
13 | redisReply *reply = r;
14 | if (reply == NULL) return;
15 | printf("argv[%s]: %s\n", (char*)privdata, reply->str);
16 |
17 | /* Disconnect after receiving the reply to GET */
18 | redisAsyncDisconnect(c);
19 | }
20 |
21 | void connectCallback(const redisAsyncContext *c, int status) {
22 | if (status != REDIS_OK) {
23 | printf("Error: %s\n", c->errstr);
24 | return;
25 | }
26 | printf("Connected...\n");
27 | }
28 |
29 | void disconnectCallback(const redisAsyncContext *c, int status) {
30 | if (status != REDIS_OK) {
31 | printf("Error: %s\n", c->errstr);
32 | return;
33 | }
34 | CFRunLoopStop(CFRunLoopGetCurrent());
35 | printf("Disconnected...\n");
36 | }
37 |
38 | int main (int argc, char **argv) {
39 | signal(SIGPIPE, SIG_IGN);
40 |
41 | CFRunLoopRef loop = CFRunLoopGetCurrent();
42 | if( !loop ) {
43 | printf("Error: Cannot get current run loop\n");
44 | return 1;
45 | }
46 |
47 | redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
48 | if (c->err) {
49 | /* Let *c leak for now... */
50 | printf("Error: %s\n", c->errstr);
51 | return 1;
52 | }
53 |
54 | redisMacOSAttach(c, loop);
55 |
56 | redisAsyncSetConnectCallback(c,connectCallback);
57 | redisAsyncSetDisconnectCallback(c,disconnectCallback);
58 |
59 | redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));
60 | redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
61 |
62 | CFRunLoopRun();
63 |
64 | return 0;
65 | }
66 |
67 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/jemalloc_internal_macros.h:
--------------------------------------------------------------------------------
1 | /*
2 | * JEMALLOC_ALWAYS_INLINE and JEMALLOC_INLINE are used within header files for
3 | * functions that are static inline functions if inlining is enabled, and
4 | * single-definition library-private functions if inlining is disabled.
5 | *
6 | * JEMALLOC_ALWAYS_INLINE_C and JEMALLOC_INLINE_C are for use in .c files, in
7 | * which case the denoted functions are always static, regardless of whether
8 | * inlining is enabled.
9 | */
10 | #if defined(JEMALLOC_DEBUG) || defined(JEMALLOC_CODE_COVERAGE)
11 | /* Disable inlining to make debugging/profiling easier. */
12 | # define JEMALLOC_ALWAYS_INLINE
13 | # define JEMALLOC_ALWAYS_INLINE_C static
14 | # define JEMALLOC_INLINE
15 | # define JEMALLOC_INLINE_C static
16 | # define inline
17 | #else
18 | # define JEMALLOC_ENABLE_INLINE
19 | # ifdef JEMALLOC_HAVE_ATTR
20 | # define JEMALLOC_ALWAYS_INLINE \
21 | static inline JEMALLOC_ATTR(unused) JEMALLOC_ATTR(always_inline)
22 | # define JEMALLOC_ALWAYS_INLINE_C \
23 | static inline JEMALLOC_ATTR(always_inline)
24 | # else
25 | # define JEMALLOC_ALWAYS_INLINE static inline
26 | # define JEMALLOC_ALWAYS_INLINE_C static inline
27 | # endif
28 | # define JEMALLOC_INLINE static inline
29 | # define JEMALLOC_INLINE_C static inline
30 | # ifdef _MSC_VER
31 | # define inline _inline
32 | # endif
33 | #endif
34 |
35 | #ifdef JEMALLOC_CC_SILENCE
36 | # define UNUSED JEMALLOC_ATTR(unused)
37 | #else
38 | # define UNUSED
39 | #endif
40 |
41 | #define ZU(z) ((size_t)z)
42 | #define ZI(z) ((ssize_t)z)
43 | #define QU(q) ((uint64_t)q)
44 | #define QI(q) ((int64_t)q)
45 |
46 | #define KZU(z) ZU(z##ULL)
47 | #define KZI(z) ZI(z##LL)
48 | #define KQU(q) QU(q##ULL)
49 | #define KQI(q) QI(q##LL)
50 |
51 | #ifndef __DECONST
52 | # define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var))
53 | #endif
54 |
55 | #ifndef JEMALLOC_HAS_RESTRICT
56 | # define restrict
57 | #endif
58 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example-glib.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #include
4 | #include
5 | #include
6 |
7 | static GMainLoop *mainloop;
8 |
9 | static void
10 | connect_cb (const redisAsyncContext *ac G_GNUC_UNUSED,
11 | int status)
12 | {
13 | if (status != REDIS_OK) {
14 | g_printerr("Failed to connect: %s\n", ac->errstr);
15 | g_main_loop_quit(mainloop);
16 | } else {
17 | g_printerr("Connected...\n");
18 | }
19 | }
20 |
21 | static void
22 | disconnect_cb (const redisAsyncContext *ac G_GNUC_UNUSED,
23 | int status)
24 | {
25 | if (status != REDIS_OK) {
26 | g_error("Failed to disconnect: %s", ac->errstr);
27 | } else {
28 | g_printerr("Disconnected...\n");
29 | g_main_loop_quit(mainloop);
30 | }
31 | }
32 |
33 | static void
34 | command_cb(redisAsyncContext *ac,
35 | gpointer r,
36 | gpointer user_data G_GNUC_UNUSED)
37 | {
38 | redisReply *reply = r;
39 |
40 | if (reply) {
41 | g_print("REPLY: %s\n", reply->str);
42 | }
43 |
44 | redisAsyncDisconnect(ac);
45 | }
46 |
47 | gint
48 | main (gint argc G_GNUC_UNUSED,
49 | gchar *argv[] G_GNUC_UNUSED)
50 | {
51 | redisAsyncContext *ac;
52 | GMainContext *context = NULL;
53 | GSource *source;
54 |
55 | ac = redisAsyncConnect("127.0.0.1", 6379);
56 | if (ac->err) {
57 | g_printerr("%s\n", ac->errstr);
58 | exit(EXIT_FAILURE);
59 | }
60 |
61 | source = redis_source_new(ac);
62 | mainloop = g_main_loop_new(context, FALSE);
63 | g_source_attach(source, context);
64 |
65 | redisAsyncSetConnectCallback(ac, connect_cb);
66 | redisAsyncSetDisconnectCallback(ac, disconnect_cb);
67 | redisAsyncCommand(ac, command_cb, NULL, "SET key 1234");
68 | redisAsyncCommand(ac, command_cb, NULL, "GET key");
69 |
70 | g_main_loop_run(mainloop);
71 |
72 | return EXIT_SUCCESS;
73 | }
74 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/ltm.c:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: ltm.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Tag methods
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 |
8 | #include
9 |
10 | #define ltm_c
11 | #define LUA_CORE
12 |
13 | #include "lua.h"
14 |
15 | #include "lobject.h"
16 | #include "lstate.h"
17 | #include "lstring.h"
18 | #include "ltable.h"
19 | #include "ltm.h"
20 |
21 |
22 |
23 | const char *const luaT_typenames[] = {
24 | "nil", "boolean", "userdata", "number",
25 | "string", "table", "function", "userdata", "thread",
26 | "proto", "upval"
27 | };
28 |
29 |
30 | void luaT_init (lua_State *L) {
31 | static const char *const luaT_eventname[] = { /* ORDER TM */
32 | "__index", "__newindex",
33 | "__gc", "__mode", "__eq",
34 | "__add", "__sub", "__mul", "__div", "__mod",
35 | "__pow", "__unm", "__len", "__lt", "__le",
36 | "__concat", "__call"
37 | };
38 | int i;
39 | for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]);
41 | luaS_fix(G(L)->tmname[i]); /* never collect these names */
42 | }
43 | }
44 |
45 |
46 | /*
47 | ** function to be used with macro "fasttm": optimized for absence of
48 | ** tag methods
49 | */
50 | const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
51 | const TValue *tm = luaH_getstr(events, ename);
52 | lua_assert(event <= TM_EQ);
53 | if (ttisnil(tm)) { /* no tag method? */
54 | events->flags |= cast_byte(1u<metatable;
66 | break;
67 | case LUA_TUSERDATA:
68 | mt = uvalue(o)->metatable;
69 | break;
70 | default:
71 | mt = G(L)->mt[ttype(o)];
72 | }
73 | return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
74 | }
75 |
76 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lzio.c:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lzio.c,v 1.31.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** a generic input stream interface
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 |
8 | #include
9 |
10 | #define lzio_c
11 | #define LUA_CORE
12 |
13 | #include "lua.h"
14 |
15 | #include "llimits.h"
16 | #include "lmem.h"
17 | #include "lstate.h"
18 | #include "lzio.h"
19 |
20 |
21 | int luaZ_fill (ZIO *z) {
22 | size_t size;
23 | lua_State *L = z->L;
24 | const char *buff;
25 | lua_unlock(L);
26 | buff = z->reader(L, z->data, &size);
27 | lua_lock(L);
28 | if (buff == NULL || size == 0) return EOZ;
29 | z->n = size - 1;
30 | z->p = buff;
31 | return char2int(*(z->p++));
32 | }
33 |
34 |
35 | int luaZ_lookahead (ZIO *z) {
36 | if (z->n == 0) {
37 | if (luaZ_fill(z) == EOZ)
38 | return EOZ;
39 | else {
40 | z->n++; /* luaZ_fill removed first byte; put back it */
41 | z->p--;
42 | }
43 | }
44 | return char2int(*z->p);
45 | }
46 |
47 |
48 | void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) {
49 | z->L = L;
50 | z->reader = reader;
51 | z->data = data;
52 | z->n = 0;
53 | z->p = NULL;
54 | }
55 |
56 |
57 | /* --------------------------------------------------------------- read --- */
58 | size_t luaZ_read (ZIO *z, void *b, size_t n) {
59 | while (n) {
60 | size_t m;
61 | if (luaZ_lookahead(z) == EOZ)
62 | return n; /* return number of missing bytes */
63 | m = (n <= z->n) ? n : z->n; /* min. between n and z->n */
64 | memcpy(b, z->p, m);
65 | z->n -= m;
66 | z->p += m;
67 | b = (char *)b + m;
68 | n -= m;
69 | }
70 | return 0;
71 | }
72 |
73 | /* ------------------------------------------------------------------------ */
74 | char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) {
75 | if (n > buff->buffsize) {
76 | if (n < LUA_MINBUFFER) n = LUA_MINBUFFER;
77 | luaZ_resizebuffer(L, buff, n);
78 | }
79 | return buff->buffer;
80 | }
81 |
82 |
83 |
--------------------------------------------------------------------------------
/redis-4.0/src/pqsort.h:
--------------------------------------------------------------------------------
1 | /* The following is the NetBSD libc qsort implementation modified in order to
2 | * support partial sorting of ranges for Redis.
3 | *
4 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
5 | * All rights reserved.
6 | *
7 | * Redistribution and use in source and binary forms, with or without
8 | * modification, are permitted provided that the following conditions are met:
9 | *
10 | * * Redistributions of source code must retain the above copyright notice,
11 | * this list of conditions and the following disclaimer.
12 | * * Redistributions in binary form must reproduce the above copyright
13 | * notice, this list of conditions and the following disclaimer in the
14 | * documentation and/or other materials provided with the distribution.
15 | * * Neither the name of Redis nor the names of its contributors may be used
16 | * to endorse or promote products derived from this software without
17 | * specific prior written permission.
18 | *
19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 | * POSSIBILITY OF SUCH DAMAGE.
30 | *
31 | * See the pqsort.c file for the original copyright notice. */
32 |
33 | #ifndef __PQSORT_H
34 | #define __PQSORT_H
35 |
36 | void
37 | pqsort(void *a, size_t n, size_t es,
38 | int (*cmp) (const void *, const void *), size_t lrange, size_t rrange);
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/ldo.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: ldo.h,v 2.7.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Stack and Call structure of Lua
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef ldo_h
8 | #define ldo_h
9 |
10 |
11 | #include "lobject.h"
12 | #include "lstate.h"
13 | #include "lzio.h"
14 |
15 |
16 | #define luaD_checkstack(L,n) \
17 | if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TValue)) \
18 | luaD_growstack(L, n); \
19 | else condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1));
20 |
21 |
22 | #define incr_top(L) {luaD_checkstack(L,1); L->top++;}
23 |
24 | #define savestack(L,p) ((char *)(p) - (char *)L->stack)
25 | #define restorestack(L,n) ((TValue *)((char *)L->stack + (n)))
26 |
27 | #define saveci(L,p) ((char *)(p) - (char *)L->base_ci)
28 | #define restoreci(L,n) ((CallInfo *)((char *)L->base_ci + (n)))
29 |
30 |
31 | /* results from luaD_precall */
32 | #define PCRLUA 0 /* initiated a call to a Lua function */
33 | #define PCRC 1 /* did a call to a C function */
34 | #define PCRYIELD 2 /* C funtion yielded */
35 |
36 |
37 | /* type of protected functions, to be ran by `runprotected' */
38 | typedef void (*Pfunc) (lua_State *L, void *ud);
39 |
40 | LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name);
41 | LUAI_FUNC void luaD_callhook (lua_State *L, int event, int line);
42 | LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults);
43 | LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults);
44 | LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u,
45 | ptrdiff_t oldtop, ptrdiff_t ef);
46 | LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult);
47 | LUAI_FUNC void luaD_reallocCI (lua_State *L, int newsize);
48 | LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize);
49 | LUAI_FUNC void luaD_growstack (lua_State *L, int n);
50 |
51 | LUAI_FUNC void luaD_throw (lua_State *L, int errcode);
52 | LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud);
53 |
54 | LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop);
55 |
56 | #endif
57 |
58 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/src/timer.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | void
4 | timer_start(timedelta_t *timer)
5 | {
6 |
7 | #ifdef _WIN32
8 | GetSystemTimeAsFileTime(&timer->ft0);
9 | #elif JEMALLOC_CLOCK_GETTIME
10 | if (sysconf(_SC_MONOTONIC_CLOCK) <= 0)
11 | timer->clock_id = CLOCK_REALTIME;
12 | else
13 | timer->clock_id = CLOCK_MONOTONIC;
14 | clock_gettime(timer->clock_id, &timer->ts0);
15 | #else
16 | gettimeofday(&timer->tv0, NULL);
17 | #endif
18 | }
19 |
20 | void
21 | timer_stop(timedelta_t *timer)
22 | {
23 |
24 | #ifdef _WIN32
25 | GetSystemTimeAsFileTime(&timer->ft0);
26 | #elif JEMALLOC_CLOCK_GETTIME
27 | clock_gettime(timer->clock_id, &timer->ts1);
28 | #else
29 | gettimeofday(&timer->tv1, NULL);
30 | #endif
31 | }
32 |
33 | uint64_t
34 | timer_usec(const timedelta_t *timer)
35 | {
36 |
37 | #ifdef _WIN32
38 | uint64_t t0, t1;
39 | t0 = (((uint64_t)timer->ft0.dwHighDateTime) << 32) |
40 | timer->ft0.dwLowDateTime;
41 | t1 = (((uint64_t)timer->ft1.dwHighDateTime) << 32) |
42 | timer->ft1.dwLowDateTime;
43 | return ((t1 - t0) / 10);
44 | #elif JEMALLOC_CLOCK_GETTIME
45 | return (((timer->ts1.tv_sec - timer->ts0.tv_sec) * 1000000) +
46 | (timer->ts1.tv_nsec - timer->ts0.tv_nsec) / 1000);
47 | #else
48 | return (((timer->tv1.tv_sec - timer->tv0.tv_sec) * 1000000) +
49 | timer->tv1.tv_usec - timer->tv0.tv_usec);
50 | #endif
51 | }
52 |
53 | void
54 | timer_ratio(timedelta_t *a, timedelta_t *b, char *buf, size_t buflen)
55 | {
56 | uint64_t t0 = timer_usec(a);
57 | uint64_t t1 = timer_usec(b);
58 | uint64_t mult;
59 | unsigned i = 0;
60 | unsigned j;
61 | int n;
62 |
63 | /* Whole. */
64 | n = malloc_snprintf(&buf[i], buflen-i, "%"FMTu64, t0 / t1);
65 | i += n;
66 | if (i >= buflen)
67 | return;
68 | mult = 1;
69 | for (j = 0; j < n; j++)
70 | mult *= 10;
71 |
72 | /* Decimal. */
73 | n = malloc_snprintf(&buf[i], buflen-i, ".");
74 | i += n;
75 |
76 | /* Fraction. */
77 | while (i < buflen-1) {
78 | uint64_t round = (i+1 == buflen-1 && ((t0 * mult * 10 / t1) % 10
79 | >= 5)) ? 1 : 0;
80 | n = malloc_snprintf(&buf[i], buflen-i,
81 | "%"FMTu64, (t0 * mult / t1) % 10 + round);
82 | i += n;
83 | mult *= 10;
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/mq.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define NSENDERS 3
4 | #define NMSGS 100000
5 |
6 | typedef struct mq_msg_s mq_msg_t;
7 | struct mq_msg_s {
8 | mq_msg(mq_msg_t) link;
9 | };
10 | mq_gen(static, mq_, mq_t, mq_msg_t, link)
11 |
12 | TEST_BEGIN(test_mq_basic)
13 | {
14 | mq_t mq;
15 | mq_msg_t msg;
16 |
17 | assert_false(mq_init(&mq), "Unexpected mq_init() failure");
18 | assert_u_eq(mq_count(&mq), 0, "mq should be empty");
19 | assert_ptr_null(mq_tryget(&mq),
20 | "mq_tryget() should fail when the queue is empty");
21 |
22 | mq_put(&mq, &msg);
23 | assert_u_eq(mq_count(&mq), 1, "mq should contain one message");
24 | assert_ptr_eq(mq_tryget(&mq), &msg, "mq_tryget() should return msg");
25 |
26 | mq_put(&mq, &msg);
27 | assert_ptr_eq(mq_get(&mq), &msg, "mq_get() should return msg");
28 |
29 | mq_fini(&mq);
30 | }
31 | TEST_END
32 |
33 | static void *
34 | thd_receiver_start(void *arg)
35 | {
36 | mq_t *mq = (mq_t *)arg;
37 | unsigned i;
38 |
39 | for (i = 0; i < (NSENDERS * NMSGS); i++) {
40 | mq_msg_t *msg = mq_get(mq);
41 | assert_ptr_not_null(msg, "mq_get() should never return NULL");
42 | dallocx(msg, 0);
43 | }
44 | return (NULL);
45 | }
46 |
47 | static void *
48 | thd_sender_start(void *arg)
49 | {
50 | mq_t *mq = (mq_t *)arg;
51 | unsigned i;
52 |
53 | for (i = 0; i < NMSGS; i++) {
54 | mq_msg_t *msg;
55 | void *p;
56 | p = mallocx(sizeof(mq_msg_t), 0);
57 | assert_ptr_not_null(p, "Unexpected mallocx() failure");
58 | msg = (mq_msg_t *)p;
59 | mq_put(mq, msg);
60 | }
61 | return (NULL);
62 | }
63 |
64 | TEST_BEGIN(test_mq_threaded)
65 | {
66 | mq_t mq;
67 | thd_t receiver;
68 | thd_t senders[NSENDERS];
69 | unsigned i;
70 |
71 | assert_false(mq_init(&mq), "Unexpected mq_init() failure");
72 |
73 | thd_create(&receiver, thd_receiver_start, (void *)&mq);
74 | for (i = 0; i < NSENDERS; i++)
75 | thd_create(&senders[i], thd_sender_start, (void *)&mq);
76 |
77 | thd_join(receiver, NULL);
78 | for (i = 0; i < NSENDERS; i++)
79 | thd_join(senders[i], NULL);
80 |
81 | mq_fini(&mq);
82 | }
83 | TEST_END
84 |
85 | int
86 | main(void)
87 | {
88 |
89 | return (test(
90 | test_mq_basic,
91 | test_mq_threaded));
92 | }
93 |
94 |
--------------------------------------------------------------------------------
/redis-4.0/src/sdsalloc.h:
--------------------------------------------------------------------------------
1 | /* SDSLib 2.0 -- A C dynamic strings library
2 | *
3 | * Copyright (c) 2006-2015, Salvatore Sanfilippo
4 | * Copyright (c) 2015, Redis Labs, Inc
5 | * All rights reserved.
6 | *
7 | * Redistribution and use in source and binary forms, with or without
8 | * modification, are permitted provided that the following conditions are met:
9 | *
10 | * * Redistributions of source code must retain the above copyright notice,
11 | * this list of conditions and the following disclaimer.
12 | * * Redistributions in binary form must reproduce the above copyright
13 | * notice, this list of conditions and the following disclaimer in the
14 | * documentation and/or other materials provided with the distribution.
15 | * * Neither the name of Redis nor the names of its contributors may be used
16 | * to endorse or promote products derived from this software without
17 | * specific prior written permission.
18 | *
19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 | * POSSIBILITY OF SUCH DAMAGE.
30 | */
31 |
32 | /* SDS allocator selection.
33 | *
34 | * This file is used in order to change the SDS allocator at compile time.
35 | * Just define the following defines to what you want to use. Also add
36 | * the include of your alternate allocator if needed (not needed in order
37 | * to use the default libc allocator). */
38 |
39 | #include "zmalloc.h"
40 | #define s_malloc zmalloc
41 | #define s_realloc zrealloc
42 | #define s_free zfree
43 |
--------------------------------------------------------------------------------
/redis-4.0/src/rax_malloc.h:
--------------------------------------------------------------------------------
1 | /* Rax -- A radix tree implementation.
2 | *
3 | * Copyright (c) 2017, Salvatore Sanfilippo
4 | * All rights reserved.
5 | *
6 | * Redistribution and use in source and binary forms, with or without
7 | * modification, are permitted provided that the following conditions are met:
8 | *
9 | * * Redistributions of source code must retain the above copyright notice,
10 | * this list of conditions and the following disclaimer.
11 | * * Redistributions in binary form must reproduce the above copyright
12 | * notice, this list of conditions and the following disclaimer in the
13 | * documentation and/or other materials provided with the distribution.
14 | * * Neither the name of Redis nor the names of its contributors may be used
15 | * to endorse or promote products derived from this software without
16 | * specific prior written permission.
17 | *
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 | * POSSIBILITY OF SUCH DAMAGE.
29 | */
30 |
31 | /* Allocator selection.
32 | *
33 | * This file is used in order to change the Rax allocator at compile time.
34 | * Just define the following defines to what you want to use. Also add
35 | * the include of your alternate allocator if needed (not needed in order
36 | * to use the default libc allocator). */
37 |
38 | #ifndef RAX_ALLOC_H
39 | #define RAX_ALLOC_H
40 | #include "zmalloc.h"
41 | #define rax_malloc zmalloc
42 | #define rax_realloc zrealloc
43 | #define rax_free zfree
44 | #endif
45 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/sdsalloc.h:
--------------------------------------------------------------------------------
1 | /* SDSLib 2.0 -- A C dynamic strings library
2 | *
3 | * Copyright (c) 2006-2015, Salvatore Sanfilippo
4 | * Copyright (c) 2015, Oran Agra
5 | * Copyright (c) 2015, Redis Labs, Inc
6 | * All rights reserved.
7 | *
8 | * Redistribution and use in source and binary forms, with or without
9 | * modification, are permitted provided that the following conditions are met:
10 | *
11 | * * Redistributions of source code must retain the above copyright notice,
12 | * this list of conditions and the following disclaimer.
13 | * * Redistributions in binary form must reproduce the above copyright
14 | * notice, this list of conditions and the following disclaimer in the
15 | * documentation and/or other materials provided with the distribution.
16 | * * Neither the name of Redis nor the names of its contributors may be used
17 | * to endorse or promote products derived from this software without
18 | * specific prior written permission.
19 | *
20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 | * POSSIBILITY OF SUCH DAMAGE.
31 | */
32 |
33 | /* SDS allocator selection.
34 | *
35 | * This file is used in order to change the SDS allocator at compile time.
36 | * Just define the following defines to what you want to use. Also add
37 | * the include of your alternate allocator if needed (not needed in order
38 | * to use the default libc allocator). */
39 |
40 | #define s_malloc malloc
41 | #define s_realloc realloc
42 | #define s_free free
43 |
--------------------------------------------------------------------------------
/redis-4.0/src/bio.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | *
8 | * * Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | * * Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | * * Neither the name of Redis nor the names of its contributors may be used
14 | * to endorse or promote products derived from this software without
15 | * specific prior written permission.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | /* Exported API */
31 | void bioInit(void);
32 | void bioCreateBackgroundJob(int type, void *arg1, void *arg2, void *arg3);
33 | unsigned long long bioPendingJobsOfType(int type);
34 | unsigned long long bioWaitStepOfType(int type);
35 | time_t bioOlderJobOfType(int type);
36 | void bioKillThreads(void);
37 |
38 | /* Background job opcodes */
39 | #define BIO_CLOSE_FILE 0 /* Deferred close(2) syscall. */
40 | #define BIO_AOF_FSYNC 1 /* Deferred AOF fsync. */
41 | #define BIO_LAZY_FREE 2 /* Deferred objects freeing. */
42 | #define BIO_NUM_OPS 3
43 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/prng.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************/
2 | #ifdef JEMALLOC_H_TYPES
3 |
4 | /*
5 | * Simple linear congruential pseudo-random number generator:
6 | *
7 | * prng(y) = (a*x + c) % m
8 | *
9 | * where the following constants ensure maximal period:
10 | *
11 | * a == Odd number (relatively prime to 2^n), and (a-1) is a multiple of 4.
12 | * c == Odd number (relatively prime to 2^n).
13 | * m == 2^32
14 | *
15 | * See Knuth's TAOCP 3rd Ed., Vol. 2, pg. 17 for details on these constraints.
16 | *
17 | * This choice of m has the disadvantage that the quality of the bits is
18 | * proportional to bit position. For example, the lowest bit has a cycle of 2,
19 | * the next has a cycle of 4, etc. For this reason, we prefer to use the upper
20 | * bits.
21 | *
22 | * Macro parameters:
23 | * uint32_t r : Result.
24 | * unsigned lg_range : (0..32], number of least significant bits to return.
25 | * uint32_t state : Seed value.
26 | * const uint32_t a, c : See above discussion.
27 | */
28 | #define prng32(r, lg_range, state, a, c) do { \
29 | assert((lg_range) > 0); \
30 | assert((lg_range) <= 32); \
31 | \
32 | r = (state * (a)) + (c); \
33 | state = r; \
34 | r >>= (32 - (lg_range)); \
35 | } while (false)
36 |
37 | /* Same as prng32(), but 64 bits of pseudo-randomness, using uint64_t. */
38 | #define prng64(r, lg_range, state, a, c) do { \
39 | assert((lg_range) > 0); \
40 | assert((lg_range) <= 64); \
41 | \
42 | r = (state * (a)) + (c); \
43 | state = r; \
44 | r >>= (64 - (lg_range)); \
45 | } while (false)
46 |
47 | #endif /* JEMALLOC_H_TYPES */
48 | /******************************************************************************/
49 | #ifdef JEMALLOC_H_STRUCTS
50 |
51 | #endif /* JEMALLOC_H_STRUCTS */
52 | /******************************************************************************/
53 | #ifdef JEMALLOC_H_EXTERNS
54 |
55 | #endif /* JEMALLOC_H_EXTERNS */
56 | /******************************************************************************/
57 | #ifdef JEMALLOC_H_INLINES
58 |
59 | #endif /* JEMALLOC_H_INLINES */
60 | /******************************************************************************/
61 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/prof_accum.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define NTHREADS 4
4 | #define NALLOCS_PER_THREAD 50
5 | #define DUMP_INTERVAL 1
6 | #define BT_COUNT_CHECK_INTERVAL 5
7 |
8 | #ifdef JEMALLOC_PROF
9 | const char *malloc_conf =
10 | "prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0";
11 | #endif
12 |
13 | static int
14 | prof_dump_open_intercept(bool propagate_err, const char *filename)
15 | {
16 | int fd;
17 |
18 | fd = open("/dev/null", O_WRONLY);
19 | assert_d_ne(fd, -1, "Unexpected open() failure");
20 |
21 | return (fd);
22 | }
23 |
24 | static void *
25 | alloc_from_permuted_backtrace(unsigned thd_ind, unsigned iteration)
26 | {
27 |
28 | return (btalloc(1, thd_ind*NALLOCS_PER_THREAD + iteration));
29 | }
30 |
31 | static void *
32 | thd_start(void *varg)
33 | {
34 | unsigned thd_ind = *(unsigned *)varg;
35 | size_t bt_count_prev, bt_count;
36 | unsigned i_prev, i;
37 |
38 | i_prev = 0;
39 | bt_count_prev = 0;
40 | for (i = 0; i < NALLOCS_PER_THREAD; i++) {
41 | void *p = alloc_from_permuted_backtrace(thd_ind, i);
42 | dallocx(p, 0);
43 | if (i % DUMP_INTERVAL == 0) {
44 | assert_d_eq(mallctl("prof.dump", NULL, NULL, NULL, 0),
45 | 0, "Unexpected error while dumping heap profile");
46 | }
47 |
48 | if (i % BT_COUNT_CHECK_INTERVAL == 0 ||
49 | i+1 == NALLOCS_PER_THREAD) {
50 | bt_count = prof_bt_count();
51 | assert_zu_le(bt_count_prev+(i-i_prev), bt_count,
52 | "Expected larger backtrace count increase");
53 | i_prev = i;
54 | bt_count_prev = bt_count;
55 | }
56 | }
57 |
58 | return (NULL);
59 | }
60 |
61 | TEST_BEGIN(test_idump)
62 | {
63 | bool active;
64 | thd_t thds[NTHREADS];
65 | unsigned thd_args[NTHREADS];
66 | unsigned i;
67 |
68 | test_skip_if(!config_prof);
69 |
70 | active = true;
71 | assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
72 | 0, "Unexpected mallctl failure while activating profiling");
73 |
74 | prof_dump_open = prof_dump_open_intercept;
75 |
76 | for (i = 0; i < NTHREADS; i++) {
77 | thd_args[i] = i;
78 | thd_create(&thds[i], thd_start, (void *)&thd_args[i]);
79 | }
80 | for (i = 0; i < NTHREADS; i++)
81 | thd_join(thds[i], NULL);
82 | }
83 | TEST_END
84 |
85 | int
86 | main(void)
87 | {
88 |
89 | return (test(
90 | test_idump));
91 | }
92 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/prof_gdump.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #ifdef JEMALLOC_PROF
4 | const char *malloc_conf = "prof:true,prof_active:false,prof_gdump:true";
5 | #endif
6 |
7 | static bool did_prof_dump_open;
8 |
9 | static int
10 | prof_dump_open_intercept(bool propagate_err, const char *filename)
11 | {
12 | int fd;
13 |
14 | did_prof_dump_open = true;
15 |
16 | fd = open("/dev/null", O_WRONLY);
17 | assert_d_ne(fd, -1, "Unexpected open() failure");
18 |
19 | return (fd);
20 | }
21 |
22 | TEST_BEGIN(test_gdump)
23 | {
24 | bool active, gdump, gdump_old;
25 | void *p, *q, *r, *s;
26 | size_t sz;
27 |
28 | test_skip_if(!config_prof);
29 |
30 | active = true;
31 | assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
32 | 0, "Unexpected mallctl failure while activating profiling");
33 |
34 | prof_dump_open = prof_dump_open_intercept;
35 |
36 | did_prof_dump_open = false;
37 | p = mallocx(chunksize, 0);
38 | assert_ptr_not_null(p, "Unexpected mallocx() failure");
39 | assert_true(did_prof_dump_open, "Expected a profile dump");
40 |
41 | did_prof_dump_open = false;
42 | q = mallocx(chunksize, 0);
43 | assert_ptr_not_null(q, "Unexpected mallocx() failure");
44 | assert_true(did_prof_dump_open, "Expected a profile dump");
45 |
46 | gdump = false;
47 | sz = sizeof(gdump_old);
48 | assert_d_eq(mallctl("prof.gdump", &gdump_old, &sz, &gdump,
49 | sizeof(gdump)), 0,
50 | "Unexpected mallctl failure while disabling prof.gdump");
51 | assert(gdump_old);
52 | did_prof_dump_open = false;
53 | r = mallocx(chunksize, 0);
54 | assert_ptr_not_null(q, "Unexpected mallocx() failure");
55 | assert_false(did_prof_dump_open, "Unexpected profile dump");
56 |
57 | gdump = true;
58 | sz = sizeof(gdump_old);
59 | assert_d_eq(mallctl("prof.gdump", &gdump_old, &sz, &gdump,
60 | sizeof(gdump)), 0,
61 | "Unexpected mallctl failure while enabling prof.gdump");
62 | assert(!gdump_old);
63 | did_prof_dump_open = false;
64 | s = mallocx(chunksize, 0);
65 | assert_ptr_not_null(q, "Unexpected mallocx() failure");
66 | assert_true(did_prof_dump_open, "Expected a profile dump");
67 |
68 | dallocx(p, 0);
69 | dallocx(q, 0);
70 | dallocx(r, 0);
71 | dallocx(s, 0);
72 | }
73 | TEST_END
74 |
75 | int
76 | main(void)
77 | {
78 |
79 | return (test(
80 | test_gdump));
81 | }
82 |
--------------------------------------------------------------------------------
/redis-4.0/src/release.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | *
8 | * * Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | * * Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | * * Neither the name of Redis nor the names of its contributors may be used
14 | * to endorse or promote products derived from this software without
15 | * specific prior written permission.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | /* Every time the Redis Git SHA1 or Dirty status changes only this small
31 | * file is recompiled, as we access this information in all the other
32 | * files using this functions. */
33 |
34 | #include
35 |
36 | #include "release.h"
37 | #include "version.h"
38 | #include "crc64.h"
39 |
40 | char *redisGitSHA1(void) {
41 | return REDIS_GIT_SHA1;
42 | }
43 |
44 | char *redisGitDirty(void) {
45 | return REDIS_GIT_DIRTY;
46 | }
47 |
48 | uint64_t redisBuildId(void) {
49 | char *buildid = REDIS_VERSION REDIS_BUILD_ID REDIS_GIT_DIRTY REDIS_GIT_SHA1;
50 |
51 | return crc64(0,(unsigned char*)buildid,strlen(buildid));
52 | }
53 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/chunk_mmap.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_CHUNK_MMAP_C_
2 | #include "jemalloc/internal/jemalloc_internal.h"
3 |
4 | /******************************************************************************/
5 |
6 | static void *
7 | chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero, bool *commit)
8 | {
9 | void *ret;
10 | size_t alloc_size;
11 |
12 | alloc_size = size + alignment - PAGE;
13 | /* Beware size_t wrap-around. */
14 | if (alloc_size < size)
15 | return (NULL);
16 | do {
17 | void *pages;
18 | size_t leadsize;
19 | pages = pages_map(NULL, alloc_size);
20 | if (pages == NULL)
21 | return (NULL);
22 | leadsize = ALIGNMENT_CEILING((uintptr_t)pages, alignment) -
23 | (uintptr_t)pages;
24 | ret = pages_trim(pages, alloc_size, leadsize, size);
25 | } while (ret == NULL);
26 |
27 | assert(ret != NULL);
28 | *zero = true;
29 | if (!*commit)
30 | *commit = pages_decommit(ret, size);
31 | return (ret);
32 | }
33 |
34 | void *
35 | chunk_alloc_mmap(size_t size, size_t alignment, bool *zero, bool *commit)
36 | {
37 | void *ret;
38 | size_t offset;
39 |
40 | /*
41 | * Ideally, there would be a way to specify alignment to mmap() (like
42 | * NetBSD has), but in the absence of such a feature, we have to work
43 | * hard to efficiently create aligned mappings. The reliable, but
44 | * slow method is to create a mapping that is over-sized, then trim the
45 | * excess. However, that always results in one or two calls to
46 | * pages_unmap().
47 | *
48 | * Optimistically try mapping precisely the right amount before falling
49 | * back to the slow method, with the expectation that the optimistic
50 | * approach works most of the time.
51 | */
52 |
53 | assert(alignment != 0);
54 | assert((alignment & chunksize_mask) == 0);
55 |
56 | ret = pages_map(NULL, size);
57 | if (ret == NULL)
58 | return (NULL);
59 | offset = ALIGNMENT_ADDR2OFFSET(ret, alignment);
60 | if (offset != 0) {
61 | pages_unmap(ret, size);
62 | return (chunk_alloc_mmap_slow(size, alignment, zero, commit));
63 | }
64 |
65 | assert(ret != NULL);
66 | *zero = true;
67 | if (!*commit)
68 | *commit = pages_decommit(ret, size);
69 | return (ret);
70 | }
71 |
72 | bool
73 | chunk_dalloc_mmap(void *chunk, size_t size)
74 | {
75 |
76 | if (config_munmap)
77 | pages_unmap(chunk, size);
78 |
79 | return (!config_munmap);
80 | }
81 |
--------------------------------------------------------------------------------
/redis-4.0/src/fmacros.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | *
8 | * * Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | * * Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | * * Neither the name of Redis nor the names of its contributors may be used
14 | * to endorse or promote products derived from this software without
15 | * specific prior written permission.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | #ifndef _REDIS_FMACRO_H
31 | #define _REDIS_FMACRO_H
32 |
33 | #define _BSD_SOURCE
34 |
35 | #if defined(__linux__)
36 | #define _GNU_SOURCE
37 | #define _DEFAULT_SOURCE
38 | #endif
39 |
40 | #if defined(_AIX)
41 | #define _ALL_SOURCE
42 | #endif
43 |
44 | #if defined(__linux__) || defined(__OpenBSD__)
45 | #define _XOPEN_SOURCE 700
46 | /*
47 | * On NetBSD, _XOPEN_SOURCE undefines _NETBSD_SOURCE and
48 | * thus hides inet_aton etc.
49 | */
50 | #elif !defined(__NetBSD__)
51 | #define _XOPEN_SOURCE
52 | #endif
53 |
54 | #if defined(__sun)
55 | #define _POSIX_C_SOURCE 199506L
56 | #endif
57 |
58 | #define _LARGEFILE_SOURCE
59 | #define _FILE_OFFSET_BITS 64
60 |
61 | #endif
62 |
--------------------------------------------------------------------------------
/redis-4.0/src/solarisfixes.h:
--------------------------------------------------------------------------------
1 | /* Solaris specific fixes.
2 | *
3 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
4 | * All rights reserved.
5 | *
6 | * Redistribution and use in source and binary forms, with or without
7 | * modification, are permitted provided that the following conditions are met:
8 | *
9 | * * Redistributions of source code must retain the above copyright notice,
10 | * this list of conditions and the following disclaimer.
11 | * * Redistributions in binary form must reproduce the above copyright
12 | * notice, this list of conditions and the following disclaimer in the
13 | * documentation and/or other materials provided with the distribution.
14 | * * Neither the name of Redis nor the names of its contributors may be used
15 | * to endorse or promote products derived from this software without
16 | * specific prior written permission.
17 | *
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 | * POSSIBILITY OF SUCH DAMAGE.
29 | */
30 |
31 | #if defined(__sun)
32 |
33 | #if defined(__GNUC__)
34 | #include
35 | #undef isnan
36 | #define isnan(x) \
37 | __extension__({ __typeof (x) __x_a = (x); \
38 | __builtin_expect(__x_a != __x_a, 0); })
39 |
40 | #undef isfinite
41 | #define isfinite(x) \
42 | __extension__ ({ __typeof (x) __x_f = (x); \
43 | __builtin_expect(!isnan(__x_f - __x_f), 1); })
44 |
45 | #undef isinf
46 | #define isinf(x) \
47 | __extension__ ({ __typeof (x) __x_i = (x); \
48 | __builtin_expect(!isnan(__x_i) && !isfinite(__x_i), 0); })
49 |
50 | #define u_int uint
51 | #define u_int32_t uint32_t
52 | #endif /* __GNUC__ */
53 |
54 | #endif /* __sun */
55 |
--------------------------------------------------------------------------------
/redis-4.0/src/slowlog.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | *
8 | * * Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | * * Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | * * Neither the name of Redis nor the names of its contributors may be used
14 | * to endorse or promote products derived from this software without
15 | * specific prior written permission.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | #define SLOWLOG_ENTRY_MAX_ARGC 32
31 | #define SLOWLOG_ENTRY_MAX_STRING 128
32 |
33 | /* This structure defines an entry inside the slow log list */
34 | typedef struct slowlogEntry {
35 | robj **argv;
36 | int argc;
37 | long long id; /* Unique entry identifier. */
38 | long long duration; /* Time spent by the query, in microseconds. */
39 | time_t time; /* Unix time at which the query was executed. */
40 | sds cname; /* Client name. */
41 | sds peerid; /* Client network address. */
42 | } slowlogEntry;
43 |
44 | /* Exported API */
45 | void slowlogInit(void);
46 | void slowlogPushEntryIfNeeded(client *c, robj **argv, int argc, long long duration);
47 |
48 | /* Exported commands */
49 | void slowlogCommand(client *c);
50 |
--------------------------------------------------------------------------------
/redis-4.0/src/debugmacro.h:
--------------------------------------------------------------------------------
1 | /* This file contains debugging macros to be used when investigating issues.
2 | *
3 | * -----------------------------------------------------------------------------
4 | *
5 | * Copyright (c) 2016, Salvatore Sanfilippo
6 | * All rights reserved.
7 | *
8 | * Redistribution and use in source and binary forms, with or without
9 | * modification, are permitted provided that the following conditions are met:
10 | *
11 | * * Redistributions of source code must retain the above copyright notice,
12 | * this list of conditions and the following disclaimer.
13 | * * Redistributions in binary form must reproduce the above copyright
14 | * notice, this list of conditions and the following disclaimer in the
15 | * documentation and/or other materials provided with the distribution.
16 | * * Neither the name of Redis nor the names of its contributors may be used
17 | * to endorse or promote products derived from this software without
18 | * specific prior written permission.
19 | *
20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 | * POSSIBILITY OF SUCH DAMAGE.
31 | */
32 |
33 | #include
34 | #define D(...) \
35 | do { \
36 | FILE *fp = fopen("/tmp/log.txt","a"); \
37 | fprintf(fp,"%s:%s:%d:\t", __FILE__, __func__, __LINE__); \
38 | fprintf(fp,__VA_ARGS__); \
39 | fprintf(fp,"\n"); \
40 | fclose(fp); \
41 | } while (0);
42 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/llex.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: llex.h,v 1.58.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Lexical Analyzer
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef llex_h
8 | #define llex_h
9 |
10 | #include "lobject.h"
11 | #include "lzio.h"
12 |
13 |
14 | #define FIRST_RESERVED 257
15 |
16 | /* maximum length of a reserved word */
17 | #define TOKEN_LEN (sizeof("function")/sizeof(char))
18 |
19 |
20 | /*
21 | * WARNING: if you change the order of this enumeration,
22 | * grep "ORDER RESERVED"
23 | */
24 | enum RESERVED {
25 | /* terminal symbols denoted by reserved words */
26 | TK_AND = FIRST_RESERVED, TK_BREAK,
27 | TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION,
28 | TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT,
29 | TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE,
30 | /* other terminal symbols */
31 | TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER,
32 | TK_NAME, TK_STRING, TK_EOS
33 | };
34 |
35 | /* number of reserved words */
36 | #define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1))
37 |
38 |
39 | /* array with token `names' */
40 | LUAI_DATA const char *const luaX_tokens [];
41 |
42 |
43 | typedef union {
44 | lua_Number r;
45 | TString *ts;
46 | } SemInfo; /* semantics information */
47 |
48 |
49 | typedef struct Token {
50 | int token;
51 | SemInfo seminfo;
52 | } Token;
53 |
54 |
55 | typedef struct LexState {
56 | int current; /* current character (charint) */
57 | int linenumber; /* input line counter */
58 | int lastline; /* line of last token `consumed' */
59 | Token t; /* current token */
60 | Token lookahead; /* look ahead token */
61 | struct FuncState *fs; /* `FuncState' is private to the parser */
62 | struct lua_State *L;
63 | ZIO *z; /* input stream */
64 | Mbuffer *buff; /* buffer for tokens */
65 | TString *source; /* current source name */
66 | char decpoint; /* locale decimal point */
67 | } LexState;
68 |
69 |
70 | LUAI_FUNC void luaX_init (lua_State *L);
71 | LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z,
72 | TString *source);
73 | LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l);
74 | LUAI_FUNC void luaX_next (LexState *ls);
75 | LUAI_FUNC void luaX_lookahead (LexState *ls);
76 | LUAI_FUNC void luaX_lexerror (LexState *ls, const char *msg, int token);
77 | LUAI_FUNC void luaX_syntaxerror (LexState *ls, const char *s);
78 | LUAI_FUNC const char *luaX_token2str (LexState *ls, int token);
79 |
80 |
81 | #endif
82 |
--------------------------------------------------------------------------------
/redis-4.0/src/intset.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Pieter Noordhuis
3 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
4 | * All rights reserved.
5 | *
6 | * Redistribution and use in source and binary forms, with or without
7 | * modification, are permitted provided that the following conditions are met:
8 | *
9 | * * Redistributions of source code must retain the above copyright notice,
10 | * this list of conditions and the following disclaimer.
11 | * * Redistributions in binary form must reproduce the above copyright
12 | * notice, this list of conditions and the following disclaimer in the
13 | * documentation and/or other materials provided with the distribution.
14 | * * Neither the name of Redis nor the names of its contributors may be used
15 | * to endorse or promote products derived from this software without
16 | * specific prior written permission.
17 | *
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 | * POSSIBILITY OF SUCH DAMAGE.
29 | */
30 |
31 | #ifndef __INTSET_H
32 | #define __INTSET_H
33 | #include
34 |
35 | typedef struct intset {
36 | uint32_t encoding; // 编码方式
37 | uint32_t length; // 元素数量
38 | int8_t contents[]; // 保存元素的数组(有序)
39 | } intset;
40 |
41 | intset *intsetNew(void);
42 | intset *intsetAdd(intset *is, int64_t value, uint8_t *success);
43 | intset *intsetRemove(intset *is, int64_t value, int *success);
44 | uint8_t intsetFind(intset *is, int64_t value);
45 | int64_t intsetRandom(intset *is);
46 | uint8_t intsetGet(intset *is, uint32_t pos, int64_t *value);
47 | uint32_t intsetLen(const intset *is);
48 | size_t intsetBlobLen(intset *is);
49 |
50 | #ifdef REDIS_TEST
51 | int intsetTest(int argc, char *argv[]);
52 | #endif
53 |
54 | #endif // __INTSET_H
55 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lmem.c:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lmem.c,v 1.70.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Interface to Memory Manager
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 |
8 | #include
9 |
10 | #define lmem_c
11 | #define LUA_CORE
12 |
13 | #include "lua.h"
14 |
15 | #include "ldebug.h"
16 | #include "ldo.h"
17 | #include "lmem.h"
18 | #include "lobject.h"
19 | #include "lstate.h"
20 |
21 |
22 |
23 | /*
24 | ** About the realloc function:
25 | ** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize);
26 | ** (`osize' is the old size, `nsize' is the new size)
27 | **
28 | ** Lua ensures that (ptr == NULL) iff (osize == 0).
29 | **
30 | ** * frealloc(ud, NULL, 0, x) creates a new block of size `x'
31 | **
32 | ** * frealloc(ud, p, x, 0) frees the block `p'
33 | ** (in this specific case, frealloc must return NULL).
34 | ** particularly, frealloc(ud, NULL, 0, 0) does nothing
35 | ** (which is equivalent to free(NULL) in ANSI C)
36 | **
37 | ** frealloc returns NULL if it cannot create or reallocate the area
38 | ** (any reallocation to an equal or smaller size cannot fail!)
39 | */
40 |
41 |
42 |
43 | #define MINSIZEARRAY 4
44 |
45 |
46 | void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems,
47 | int limit, const char *errormsg) {
48 | void *newblock;
49 | int newsize;
50 | if (*size >= limit/2) { /* cannot double it? */
51 | if (*size >= limit) /* cannot grow even a little? */
52 | luaG_runerror(L, errormsg);
53 | newsize = limit; /* still have at least one free place */
54 | }
55 | else {
56 | newsize = (*size)*2;
57 | if (newsize < MINSIZEARRAY)
58 | newsize = MINSIZEARRAY; /* minimum size */
59 | }
60 | newblock = luaM_reallocv(L, block, *size, newsize, size_elems);
61 | *size = newsize; /* update only when everything else is OK */
62 | return newblock;
63 | }
64 |
65 |
66 | void *luaM_toobig (lua_State *L) {
67 | luaG_runerror(L, "memory allocation error: block too big");
68 | return NULL; /* to avoid warnings */
69 | }
70 |
71 |
72 |
73 | /*
74 | ** generic allocation routine.
75 | */
76 | void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) {
77 | global_State *g = G(L);
78 | lua_assert((osize == 0) == (block == NULL));
79 | block = (*g->frealloc)(g->ud, block, osize, nsize);
80 | if (block == NULL && nsize > 0)
81 | luaD_throw(L, LUA_ERRMEM);
82 | lua_assert((nsize == 0) == (block == NULL));
83 | g->totalbytes = (g->totalbytes - osize) + nsize;
84 | return block;
85 | }
86 |
87 |
--------------------------------------------------------------------------------
/redis-4.0/src/sparkline.h:
--------------------------------------------------------------------------------
1 | /* sparkline.h -- ASCII Sparklines header file
2 | *
3 | * ---------------------------------------------------------------------------
4 | *
5 | * Copyright(C) 2011-2014 Salvatore Sanfilippo
6 | * All rights reserved.
7 | *
8 | * Redistribution and use in source and binary forms, with or without
9 | * modification, are permitted provided that the following conditions are met:
10 | *
11 | * * Redistributions of source code must retain the above copyright notice,
12 | * this list of conditions and the following disclaimer.
13 | * * Redistributions in binary form must reproduce the above copyright
14 | * notice, this list of conditions and the following disclaimer in the
15 | * documentation and/or other materials provided with the distribution.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | #ifndef __SPARKLINE_H
31 | #define __SPARKLINE_H
32 |
33 | /* A sequence is represented of many "samples" */
34 | struct sample {
35 | double value;
36 | char *label;
37 | };
38 |
39 | struct sequence {
40 | int length;
41 | int labels;
42 | struct sample *samples;
43 | double min, max;
44 | };
45 |
46 | #define SPARKLINE_NO_FLAGS 0
47 | #define SPARKLINE_FILL 1 /* Fill the area under the curve. */
48 | #define SPARKLINE_LOG_SCALE 2 /* Use logarithmic scale. */
49 |
50 | struct sequence *createSparklineSequence(void);
51 | void sparklineSequenceAddSample(struct sequence *seq, double value, char *label);
52 | void freeSparklineSequence(struct sequence *seq);
53 | sds sparklineRenderRange(sds output, struct sequence *seq, int rows, int offset, int len, int flags);
54 | sds sparklineRender(sds output, struct sequence *seq, int columns, int rows, int flags);
55 |
56 | #endif /* __SPARKLINE_H */
57 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/qr.h:
--------------------------------------------------------------------------------
1 | /* Ring definitions. */
2 | #define qr(a_type) \
3 | struct { \
4 | a_type *qre_next; \
5 | a_type *qre_prev; \
6 | }
7 |
8 | /* Ring functions. */
9 | #define qr_new(a_qr, a_field) do { \
10 | (a_qr)->a_field.qre_next = (a_qr); \
11 | (a_qr)->a_field.qre_prev = (a_qr); \
12 | } while (0)
13 |
14 | #define qr_next(a_qr, a_field) ((a_qr)->a_field.qre_next)
15 |
16 | #define qr_prev(a_qr, a_field) ((a_qr)->a_field.qre_prev)
17 |
18 | #define qr_before_insert(a_qrelm, a_qr, a_field) do { \
19 | (a_qr)->a_field.qre_prev = (a_qrelm)->a_field.qre_prev; \
20 | (a_qr)->a_field.qre_next = (a_qrelm); \
21 | (a_qr)->a_field.qre_prev->a_field.qre_next = (a_qr); \
22 | (a_qrelm)->a_field.qre_prev = (a_qr); \
23 | } while (0)
24 |
25 | #define qr_after_insert(a_qrelm, a_qr, a_field) \
26 | do \
27 | { \
28 | (a_qr)->a_field.qre_next = (a_qrelm)->a_field.qre_next; \
29 | (a_qr)->a_field.qre_prev = (a_qrelm); \
30 | (a_qr)->a_field.qre_next->a_field.qre_prev = (a_qr); \
31 | (a_qrelm)->a_field.qre_next = (a_qr); \
32 | } while (0)
33 |
34 | #define qr_meld(a_qr_a, a_qr_b, a_field) do { \
35 | void *t; \
36 | (a_qr_a)->a_field.qre_prev->a_field.qre_next = (a_qr_b); \
37 | (a_qr_b)->a_field.qre_prev->a_field.qre_next = (a_qr_a); \
38 | t = (a_qr_a)->a_field.qre_prev; \
39 | (a_qr_a)->a_field.qre_prev = (a_qr_b)->a_field.qre_prev; \
40 | (a_qr_b)->a_field.qre_prev = t; \
41 | } while (0)
42 |
43 | /*
44 | * qr_meld() and qr_split() are functionally equivalent, so there's no need to
45 | * have two copies of the code.
46 | */
47 | #define qr_split(a_qr_a, a_qr_b, a_field) \
48 | qr_meld((a_qr_a), (a_qr_b), a_field)
49 |
50 | #define qr_remove(a_qr, a_field) do { \
51 | (a_qr)->a_field.qre_prev->a_field.qre_next \
52 | = (a_qr)->a_field.qre_next; \
53 | (a_qr)->a_field.qre_next->a_field.qre_prev \
54 | = (a_qr)->a_field.qre_prev; \
55 | (a_qr)->a_field.qre_next = (a_qr); \
56 | (a_qr)->a_field.qre_prev = (a_qr); \
57 | } while (0)
58 |
59 | #define qr_foreach(var, a_qr, a_field) \
60 | for ((var) = (a_qr); \
61 | (var) != NULL; \
62 | (var) = (((var)->a_field.qre_next != (a_qr)) \
63 | ? (var)->a_field.qre_next : NULL))
64 |
65 | #define qr_reverse_foreach(var, a_qr, a_field) \
66 | for ((var) = ((a_qr) != NULL) ? qr_prev(a_qr, a_field) : NULL; \
67 | (var) != NULL; \
68 | (var) = (((var) != (a_qr)) \
69 | ? (var)->a_field.qre_prev : NULL))
70 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/examples/example.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | #include
6 |
7 | int main(int argc, char **argv) {
8 | unsigned int j;
9 | redisContext *c;
10 | redisReply *reply;
11 | const char *hostname = (argc > 1) ? argv[1] : "127.0.0.1";
12 | int port = (argc > 2) ? atoi(argv[2]) : 6379;
13 |
14 | struct timeval timeout = { 1, 500000 }; // 1.5 seconds
15 | c = redisConnectWithTimeout(hostname, port, timeout);
16 | if (c == NULL || c->err) {
17 | if (c) {
18 | printf("Connection error: %s\n", c->errstr);
19 | redisFree(c);
20 | } else {
21 | printf("Connection error: can't allocate redis context\n");
22 | }
23 | exit(1);
24 | }
25 |
26 | /* PING server */
27 | reply = redisCommand(c,"PING");
28 | printf("PING: %s\n", reply->str);
29 | freeReplyObject(reply);
30 |
31 | /* Set a key */
32 | reply = redisCommand(c,"SET %s %s", "foo", "hello world");
33 | printf("SET: %s\n", reply->str);
34 | freeReplyObject(reply);
35 |
36 | /* Set a key using binary safe API */
37 | reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
38 | printf("SET (binary API): %s\n", reply->str);
39 | freeReplyObject(reply);
40 |
41 | /* Try a GET and two INCR */
42 | reply = redisCommand(c,"GET foo");
43 | printf("GET foo: %s\n", reply->str);
44 | freeReplyObject(reply);
45 |
46 | reply = redisCommand(c,"INCR counter");
47 | printf("INCR counter: %lld\n", reply->integer);
48 | freeReplyObject(reply);
49 | /* again ... */
50 | reply = redisCommand(c,"INCR counter");
51 | printf("INCR counter: %lld\n", reply->integer);
52 | freeReplyObject(reply);
53 |
54 | /* Create a list of numbers, from 0 to 9 */
55 | reply = redisCommand(c,"DEL mylist");
56 | freeReplyObject(reply);
57 | for (j = 0; j < 10; j++) {
58 | char buf[64];
59 |
60 | snprintf(buf,64,"%u",j);
61 | reply = redisCommand(c,"LPUSH mylist element-%s", buf);
62 | freeReplyObject(reply);
63 | }
64 |
65 | /* Let's check what we have inside the list */
66 | reply = redisCommand(c,"LRANGE mylist 0 -1");
67 | if (reply->type == REDIS_REPLY_ARRAY) {
68 | for (j = 0; j < reply->elements; j++) {
69 | printf("%u) %s\n", j, reply->element[j]->str);
70 | }
71 | }
72 | freeReplyObject(reply);
73 |
74 | /* Disconnects and frees the context */
75 | redisFree(c);
76 |
77 | return 0;
78 | }
79 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/test/unit/tsd.c:
--------------------------------------------------------------------------------
1 | #include "test/jemalloc_test.h"
2 |
3 | #define THREAD_DATA 0x72b65c10
4 |
5 | typedef unsigned int data_t;
6 |
7 | static bool data_cleanup_executed;
8 |
9 | malloc_tsd_types(data_, data_t)
10 | malloc_tsd_protos(, data_, data_t)
11 |
12 | void
13 | data_cleanup(void *arg)
14 | {
15 | data_t *data = (data_t *)arg;
16 |
17 | if (!data_cleanup_executed) {
18 | assert_x_eq(*data, THREAD_DATA,
19 | "Argument passed into cleanup function should match tsd "
20 | "value");
21 | }
22 | data_cleanup_executed = true;
23 |
24 | /*
25 | * Allocate during cleanup for two rounds, in order to assure that
26 | * jemalloc's internal tsd reinitialization happens.
27 | */
28 | switch (*data) {
29 | case THREAD_DATA:
30 | *data = 1;
31 | data_tsd_set(data);
32 | break;
33 | case 1:
34 | *data = 2;
35 | data_tsd_set(data);
36 | break;
37 | case 2:
38 | return;
39 | default:
40 | not_reached();
41 | }
42 |
43 | {
44 | void *p = mallocx(1, 0);
45 | assert_ptr_not_null(p, "Unexpeced mallocx() failure");
46 | dallocx(p, 0);
47 | }
48 | }
49 |
50 | malloc_tsd_externs(data_, data_t)
51 | #define DATA_INIT 0x12345678
52 | malloc_tsd_data(, data_, data_t, DATA_INIT)
53 | malloc_tsd_funcs(, data_, data_t, DATA_INIT, data_cleanup)
54 |
55 | static void *
56 | thd_start(void *arg)
57 | {
58 | data_t d = (data_t)(uintptr_t)arg;
59 | void *p;
60 |
61 | assert_x_eq(*data_tsd_get(), DATA_INIT,
62 | "Initial tsd get should return initialization value");
63 |
64 | p = malloc(1);
65 | assert_ptr_not_null(p, "Unexpected malloc() failure");
66 |
67 | data_tsd_set(&d);
68 | assert_x_eq(*data_tsd_get(), d,
69 | "After tsd set, tsd get should return value that was set");
70 |
71 | d = 0;
72 | assert_x_eq(*data_tsd_get(), (data_t)(uintptr_t)arg,
73 | "Resetting local data should have no effect on tsd");
74 |
75 | free(p);
76 | return (NULL);
77 | }
78 |
79 | TEST_BEGIN(test_tsd_main_thread)
80 | {
81 |
82 | thd_start((void *) 0xa5f3e329);
83 | }
84 | TEST_END
85 |
86 | TEST_BEGIN(test_tsd_sub_thread)
87 | {
88 | thd_t thd;
89 |
90 | data_cleanup_executed = false;
91 | thd_create(&thd, thd_start, (void *)THREAD_DATA);
92 | thd_join(thd, NULL);
93 | assert_true(data_cleanup_executed,
94 | "Cleanup function should have executed");
95 | }
96 | TEST_END
97 |
98 | int
99 | main(void)
100 | {
101 |
102 | data_tsd_boot();
103 |
104 | return (test(
105 | test_tsd_main_thread,
106 | test_tsd_sub_thread));
107 | }
108 |
--------------------------------------------------------------------------------
/redis-4.0/src/redisassert.h:
--------------------------------------------------------------------------------
1 | /* redisassert.h -- Drop in replacemnet assert.h that prints the stack trace
2 | * in the Redis logs.
3 | *
4 | * This file should be included instead of "assert.h" inside libraries used by
5 | * Redis that are using assertions, so instead of Redis disappearing with
6 | * SIGABORT, we get the details and stack trace inside the log file.
7 | *
8 | * ----------------------------------------------------------------------------
9 | *
10 | * Copyright (c) 2006-2012, Salvatore Sanfilippo
11 | * All rights reserved.
12 | *
13 | * Redistribution and use in source and binary forms, with or without
14 | * modification, are permitted provided that the following conditions are met:
15 | *
16 | * * Redistributions of source code must retain the above copyright notice,
17 | * this list of conditions and the following disclaimer.
18 | * * Redistributions in binary form must reproduce the above copyright
19 | * notice, this list of conditions and the following disclaimer in the
20 | * documentation and/or other materials provided with the distribution.
21 | * * Neither the name of Redis nor the names of its contributors may be used
22 | * to endorse or promote products derived from this software without
23 | * specific prior written permission.
24 | *
25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
29 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 | * POSSIBILITY OF SUCH DAMAGE.
36 | */
37 |
38 | #ifndef __REDIS_ASSERT_H__
39 | #define __REDIS_ASSERT_H__
40 |
41 | #include /* for _exit() */
42 |
43 | #define assert(_e) ((_e)?(void)0 : (_serverAssert(#_e,__FILE__,__LINE__),_exit(1)))
44 | #define panic(...) _serverPanic(__FILE__,__LINE__,__VA_ARGS__),_exit(1)
45 |
46 | void _serverAssert(char *estr, char *file, int line);
47 | void _serverPanic(const char *file, int line, const char *msg, ...);
48 |
49 | #endif
50 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/src/bitmap.c:
--------------------------------------------------------------------------------
1 | #define JEMALLOC_BITMAP_C_
2 | #include "jemalloc/internal/jemalloc_internal.h"
3 |
4 | /******************************************************************************/
5 |
6 | void
7 | bitmap_info_init(bitmap_info_t *binfo, size_t nbits)
8 | {
9 | unsigned i;
10 | size_t group_count;
11 |
12 | assert(nbits > 0);
13 | assert(nbits <= (ZU(1) << LG_BITMAP_MAXBITS));
14 |
15 | /*
16 | * Compute the number of groups necessary to store nbits bits, and
17 | * progressively work upward through the levels until reaching a level
18 | * that requires only one group.
19 | */
20 | binfo->levels[0].group_offset = 0;
21 | group_count = BITMAP_BITS2GROUPS(nbits);
22 | for (i = 1; group_count > 1; i++) {
23 | assert(i < BITMAP_MAX_LEVELS);
24 | binfo->levels[i].group_offset = binfo->levels[i-1].group_offset
25 | + group_count;
26 | group_count = BITMAP_BITS2GROUPS(group_count);
27 | }
28 | binfo->levels[i].group_offset = binfo->levels[i-1].group_offset
29 | + group_count;
30 | assert(binfo->levels[i].group_offset <= BITMAP_GROUPS_MAX);
31 | binfo->nlevels = i;
32 | binfo->nbits = nbits;
33 | }
34 |
35 | size_t
36 | bitmap_info_ngroups(const bitmap_info_t *binfo)
37 | {
38 |
39 | return (binfo->levels[binfo->nlevels].group_offset << LG_SIZEOF_BITMAP);
40 | }
41 |
42 | size_t
43 | bitmap_size(size_t nbits)
44 | {
45 | bitmap_info_t binfo;
46 |
47 | bitmap_info_init(&binfo, nbits);
48 | return (bitmap_info_ngroups(&binfo));
49 | }
50 |
51 | void
52 | bitmap_init(bitmap_t *bitmap, const bitmap_info_t *binfo)
53 | {
54 | size_t extra;
55 | unsigned i;
56 |
57 | /*
58 | * Bits are actually inverted with regard to the external bitmap
59 | * interface, so the bitmap starts out with all 1 bits, except for
60 | * trailing unused bits (if any). Note that each group uses bit 0 to
61 | * correspond to the first logical bit in the group, so extra bits
62 | * are the most significant bits of the last group.
63 | */
64 | memset(bitmap, 0xffU, binfo->levels[binfo->nlevels].group_offset <<
65 | LG_SIZEOF_BITMAP);
66 | extra = (BITMAP_GROUP_NBITS - (binfo->nbits & BITMAP_GROUP_NBITS_MASK))
67 | & BITMAP_GROUP_NBITS_MASK;
68 | if (extra != 0)
69 | bitmap[binfo->levels[1].group_offset - 1] >>= extra;
70 | for (i = 1; i < binfo->nlevels; i++) {
71 | size_t group_count = binfo->levels[i].group_offset -
72 | binfo->levels[i-1].group_offset;
73 | extra = (BITMAP_GROUP_NBITS - (group_count &
74 | BITMAP_GROUP_NBITS_MASK)) & BITMAP_GROUP_NBITS_MASK;
75 | if (extra != 0)
76 | bitmap[binfo->levels[i+1].group_offset - 1] >>= extra;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/redis-4.0/deps/lua/src/lparser.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** $Id: lparser.h,v 1.57.1.1 2007/12/27 13:02:25 roberto Exp $
3 | ** Lua Parser
4 | ** See Copyright Notice in lua.h
5 | */
6 |
7 | #ifndef lparser_h
8 | #define lparser_h
9 |
10 | #include "llimits.h"
11 | #include "lobject.h"
12 | #include "lzio.h"
13 |
14 |
15 | /*
16 | ** Expression descriptor
17 | */
18 |
19 | typedef enum {
20 | VVOID, /* no value */
21 | VNIL,
22 | VTRUE,
23 | VFALSE,
24 | VK, /* info = index of constant in `k' */
25 | VKNUM, /* nval = numerical value */
26 | VLOCAL, /* info = local register */
27 | VUPVAL, /* info = index of upvalue in `upvalues' */
28 | VGLOBAL, /* info = index of table; aux = index of global name in `k' */
29 | VINDEXED, /* info = table register; aux = index register (or `k') */
30 | VJMP, /* info = instruction pc */
31 | VRELOCABLE, /* info = instruction pc */
32 | VNONRELOC, /* info = result register */
33 | VCALL, /* info = instruction pc */
34 | VVARARG /* info = instruction pc */
35 | } expkind;
36 |
37 | typedef struct expdesc {
38 | expkind k;
39 | union {
40 | struct { int info, aux; } s;
41 | lua_Number nval;
42 | } u;
43 | int t; /* patch list of `exit when true' */
44 | int f; /* patch list of `exit when false' */
45 | } expdesc;
46 |
47 |
48 | typedef struct upvaldesc {
49 | lu_byte k;
50 | lu_byte info;
51 | } upvaldesc;
52 |
53 |
54 | struct BlockCnt; /* defined in lparser.c */
55 |
56 |
57 | /* state needed to generate code for a given function */
58 | typedef struct FuncState {
59 | Proto *f; /* current function header */
60 | Table *h; /* table to find (and reuse) elements in `k' */
61 | struct FuncState *prev; /* enclosing function */
62 | struct LexState *ls; /* lexical state */
63 | struct lua_State *L; /* copy of the Lua state */
64 | struct BlockCnt *bl; /* chain of current blocks */
65 | int pc; /* next position to code (equivalent to `ncode') */
66 | int lasttarget; /* `pc' of last `jump target' */
67 | int jpc; /* list of pending jumps to `pc' */
68 | int freereg; /* first free register */
69 | int nk; /* number of elements in `k' */
70 | int np; /* number of elements in `p' */
71 | short nlocvars; /* number of elements in `locvars' */
72 | lu_byte nactvar; /* number of active local variables */
73 | upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */
74 | unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */
75 | } FuncState;
76 |
77 |
78 | LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
79 | const char *name);
80 |
81 |
82 | #endif
83 |
--------------------------------------------------------------------------------
/redis-4.0/deps/hiredis/adapters/ivykis.h:
--------------------------------------------------------------------------------
1 | #ifndef __HIREDIS_IVYKIS_H__
2 | #define __HIREDIS_IVYKIS_H__
3 | #include
4 | #include "../hiredis.h"
5 | #include "../async.h"
6 |
7 | typedef struct redisIvykisEvents {
8 | redisAsyncContext *context;
9 | struct iv_fd fd;
10 | } redisIvykisEvents;
11 |
12 | static void redisIvykisReadEvent(void *arg) {
13 | redisAsyncContext *context = (redisAsyncContext *)arg;
14 | redisAsyncHandleRead(context);
15 | }
16 |
17 | static void redisIvykisWriteEvent(void *arg) {
18 | redisAsyncContext *context = (redisAsyncContext *)arg;
19 | redisAsyncHandleWrite(context);
20 | }
21 |
22 | static void redisIvykisAddRead(void *privdata) {
23 | redisIvykisEvents *e = (redisIvykisEvents*)privdata;
24 | iv_fd_set_handler_in(&e->fd, redisIvykisReadEvent);
25 | }
26 |
27 | static void redisIvykisDelRead(void *privdata) {
28 | redisIvykisEvents *e = (redisIvykisEvents*)privdata;
29 | iv_fd_set_handler_in(&e->fd, NULL);
30 | }
31 |
32 | static void redisIvykisAddWrite(void *privdata) {
33 | redisIvykisEvents *e = (redisIvykisEvents*)privdata;
34 | iv_fd_set_handler_out(&e->fd, redisIvykisWriteEvent);
35 | }
36 |
37 | static void redisIvykisDelWrite(void *privdata) {
38 | redisIvykisEvents *e = (redisIvykisEvents*)privdata;
39 | iv_fd_set_handler_out(&e->fd, NULL);
40 | }
41 |
42 | static void redisIvykisCleanup(void *privdata) {
43 | redisIvykisEvents *e = (redisIvykisEvents*)privdata;
44 |
45 | iv_fd_unregister(&e->fd);
46 | free(e);
47 | }
48 |
49 | static int redisIvykisAttach(redisAsyncContext *ac) {
50 | redisContext *c = &(ac->c);
51 | redisIvykisEvents *e;
52 |
53 | /* Nothing should be attached when something is already attached */
54 | if (ac->ev.data != NULL)
55 | return REDIS_ERR;
56 |
57 | /* Create container for context and r/w events */
58 | e = (redisIvykisEvents*)malloc(sizeof(*e));
59 | e->context = ac;
60 |
61 | /* Register functions to start/stop listening for events */
62 | ac->ev.addRead = redisIvykisAddRead;
63 | ac->ev.delRead = redisIvykisDelRead;
64 | ac->ev.addWrite = redisIvykisAddWrite;
65 | ac->ev.delWrite = redisIvykisDelWrite;
66 | ac->ev.cleanup = redisIvykisCleanup;
67 | ac->ev.data = e;
68 |
69 | /* Initialize and install read/write events */
70 | IV_FD_INIT(&e->fd);
71 | e->fd.fd = c->fd;
72 | e->fd.handler_in = redisIvykisReadEvent;
73 | e->fd.handler_out = redisIvykisWriteEvent;
74 | e->fd.handler_err = NULL;
75 | e->fd.cookie = e->context;
76 |
77 | iv_fd_register(&e->fd);
78 |
79 | return REDIS_OK;
80 | }
81 | #endif
82 |
--------------------------------------------------------------------------------
/redis-4.0/src/util.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2012, Salvatore Sanfilippo
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | *
8 | * * Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | * * Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | * * Neither the name of Redis nor the names of its contributors may be used
14 | * to endorse or promote products derived from this software without
15 | * specific prior written permission.
16 | *
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 | * POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | #ifndef __REDIS_UTIL_H
31 | #define __REDIS_UTIL_H
32 |
33 | #include
34 | #include "sds.h"
35 |
36 | int stringmatchlen(const char *p, int plen, const char *s, int slen, int nocase);
37 | int stringmatch(const char *p, const char *s, int nocase);
38 | long long memtoll(const char *p, int *err);
39 | uint32_t digits10(uint64_t v);
40 | uint32_t sdigits10(int64_t v);
41 | int ll2string(char *s, size_t len, long long value);
42 | int string2ll(const char *s, size_t slen, long long *value);
43 | int string2l(const char *s, size_t slen, long *value);
44 | int string2ld(const char *s, size_t slen, long double *dp);
45 | int d2string(char *buf, size_t len, double value);
46 | int ld2string(char *buf, size_t len, long double value, int humanfriendly);
47 | sds getAbsolutePath(char *filename);
48 | int pathIsBaseName(char *path);
49 |
50 | #ifdef REDIS_TEST
51 | int utilTest(int argc, char **argv);
52 | #endif
53 |
54 | #endif
55 |
--------------------------------------------------------------------------------
/redis-4.0/src/testhelp.h:
--------------------------------------------------------------------------------
1 | /* This is a really minimal testing framework for C.
2 | *
3 | * Example:
4 | *
5 | * test_cond("Check if 1 == 1", 1==1)
6 | * test_cond("Check if 5 > 10", 5 > 10)
7 | * test_report()
8 | *
9 | * ----------------------------------------------------------------------------
10 | *
11 | * Copyright (c) 2010-2012, Salvatore Sanfilippo
12 | * All rights reserved.
13 | *
14 | * Redistribution and use in source and binary forms, with or without
15 | * modification, are permitted provided that the following conditions are met:
16 | *
17 | * * Redistributions of source code must retain the above copyright notice,
18 | * this list of conditions and the following disclaimer.
19 | * * Redistributions in binary form must reproduce the above copyright
20 | * notice, this list of conditions and the following disclaimer in the
21 | * documentation and/or other materials provided with the distribution.
22 | * * Neither the name of Redis nor the names of its contributors may be used
23 | * to endorse or promote products derived from this software without
24 | * specific prior written permission.
25 | *
26 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 | * POSSIBILITY OF SUCH DAMAGE.
37 | */
38 |
39 | #ifndef __TESTHELP_H
40 | #define __TESTHELP_H
41 |
42 | int __failed_tests = 0;
43 | int __test_num = 0;
44 | #define test_cond(descr,_c) do { \
45 | __test_num++; printf("%d - %s: ", __test_num, descr); \
46 | if(_c) printf("PASSED\n"); else {printf("FAILED\n"); __failed_tests++;} \
47 | } while(0);
48 | #define test_report() do { \
49 | printf("%d tests, %d passed, %d failed\n", __test_num, \
50 | __test_num-__failed_tests, __failed_tests); \
51 | if (__failed_tests) { \
52 | printf("=== WARNING === We have failed tests here...\n"); \
53 | exit(1); \
54 | } \
55 | } while(0);
56 |
57 | #endif
58 |
--------------------------------------------------------------------------------
/redis-4.0/deps/jemalloc/include/jemalloc/internal/ql.h:
--------------------------------------------------------------------------------
1 | /* List definitions. */
2 | #define ql_head(a_type) \
3 | struct { \
4 | a_type *qlh_first; \
5 | }
6 |
7 | #define ql_head_initializer(a_head) {NULL}
8 |
9 | #define ql_elm(a_type) qr(a_type)
10 |
11 | /* List functions. */
12 | #define ql_new(a_head) do { \
13 | (a_head)->qlh_first = NULL; \
14 | } while (0)
15 |
16 | #define ql_elm_new(a_elm, a_field) qr_new((a_elm), a_field)
17 |
18 | #define ql_first(a_head) ((a_head)->qlh_first)
19 |
20 | #define ql_last(a_head, a_field) \
21 | ((ql_first(a_head) != NULL) \
22 | ? qr_prev(ql_first(a_head), a_field) : NULL)
23 |
24 | #define ql_next(a_head, a_elm, a_field) \
25 | ((ql_last(a_head, a_field) != (a_elm)) \
26 | ? qr_next((a_elm), a_field) : NULL)
27 |
28 | #define ql_prev(a_head, a_elm, a_field) \
29 | ((ql_first(a_head) != (a_elm)) ? qr_prev((a_elm), a_field) \
30 | : NULL)
31 |
32 | #define ql_before_insert(a_head, a_qlelm, a_elm, a_field) do { \
33 | qr_before_insert((a_qlelm), (a_elm), a_field); \
34 | if (ql_first(a_head) == (a_qlelm)) { \
35 | ql_first(a_head) = (a_elm); \
36 | } \
37 | } while (0)
38 |
39 | #define ql_after_insert(a_qlelm, a_elm, a_field) \
40 | qr_after_insert((a_qlelm), (a_elm), a_field)
41 |
42 | #define ql_head_insert(a_head, a_elm, a_field) do { \
43 | if (ql_first(a_head) != NULL) { \
44 | qr_before_insert(ql_first(a_head), (a_elm), a_field); \
45 | } \
46 | ql_first(a_head) = (a_elm); \
47 | } while (0)
48 |
49 | #define ql_tail_insert(a_head, a_elm, a_field) do { \
50 | if (ql_first(a_head) != NULL) { \
51 | qr_before_insert(ql_first(a_head), (a_elm), a_field); \
52 | } \
53 | ql_first(a_head) = qr_next((a_elm), a_field); \
54 | } while (0)
55 |
56 | #define ql_remove(a_head, a_elm, a_field) do { \
57 | if (ql_first(a_head) == (a_elm)) { \
58 | ql_first(a_head) = qr_next(ql_first(a_head), a_field); \
59 | } \
60 | if (ql_first(a_head) != (a_elm)) { \
61 | qr_remove((a_elm), a_field); \
62 | } else { \
63 | ql_first(a_head) = NULL; \
64 | } \
65 | } while (0)
66 |
67 | #define ql_head_remove(a_head, a_type, a_field) do { \
68 | a_type *t = ql_first(a_head); \
69 | ql_remove((a_head), t, a_field); \
70 | } while (0)
71 |
72 | #define ql_tail_remove(a_head, a_type, a_field) do { \
73 | a_type *t = ql_last(a_head, a_field); \
74 | ql_remove((a_head), t, a_field); \
75 | } while (0)
76 |
77 | #define ql_foreach(a_var, a_head, a_field) \
78 | qr_foreach((a_var), ql_first(a_head), a_field)
79 |
80 | #define ql_reverse_foreach(a_var, a_head, a_field) \
81 | qr_reverse_foreach((a_var), ql_first(a_head), a_field)
82 |
--------------------------------------------------------------------------------
/redis-4.0/deps/linenoise/example.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include "linenoise.h"
5 |
6 |
7 | void completion(const char *buf, linenoiseCompletions *lc) {
8 | if (buf[0] == 'h') {
9 | linenoiseAddCompletion(lc,"hello");
10 | linenoiseAddCompletion(lc,"hello there");
11 | }
12 | }
13 |
14 | char *hints(const char *buf, int *color, int *bold) {
15 | if (!strcasecmp(buf,"hello")) {
16 | *color = 35;
17 | *bold = 0;
18 | return " World";
19 | }
20 | return NULL;
21 | }
22 |
23 | int main(int argc, char **argv) {
24 | char *line;
25 | char *prgname = argv[0];
26 |
27 | /* Parse options, with --multiline we enable multi line editing. */
28 | while(argc > 1) {
29 | argc--;
30 | argv++;
31 | if (!strcmp(*argv,"--multiline")) {
32 | linenoiseSetMultiLine(1);
33 | printf("Multi-line mode enabled.\n");
34 | } else if (!strcmp(*argv,"--keycodes")) {
35 | linenoisePrintKeyCodes();
36 | exit(0);
37 | } else {
38 | fprintf(stderr, "Usage: %s [--multiline] [--keycodes]\n", prgname);
39 | exit(1);
40 | }
41 | }
42 |
43 | /* Set the completion callback. This will be called every time the
44 | * user uses the key. */
45 | linenoiseSetCompletionCallback(completion);
46 | linenoiseSetHintsCallback(hints);
47 |
48 | /* Load history from file. The history file is just a plain text file
49 | * where entries are separated by newlines. */
50 | linenoiseHistoryLoad("history.txt"); /* Load the history at startup */
51 |
52 | /* Now this is the main loop of the typical linenoise-based application.
53 | * The call to linenoise() will block as long as the user types something
54 | * and presses enter.
55 | *
56 | * The typed string is returned as a malloc() allocated string by
57 | * linenoise, so the user needs to free() it. */
58 | while((line = linenoise("hello> ")) != NULL) {
59 | /* Do something with the string. */
60 | if (line[0] != '\0' && line[0] != '/') {
61 | printf("echo: '%s'\n", line);
62 | linenoiseHistoryAdd(line); /* Add to the history. */
63 | linenoiseHistorySave("history.txt"); /* Save the history on disk. */
64 | } else if (!strncmp(line,"/historylen",11)) {
65 | /* The "/historylen" command will change the history len. */
66 | int len = atoi(line+11);
67 | linenoiseHistorySetMaxLen(len);
68 | } else if (line[0] == '/') {
69 | printf("Unreconized command: %s\n", line);
70 | }
71 | free(line);
72 | }
73 | return 0;
74 | }
75 |
--------------------------------------------------------------------------------