The installation path for openssl may vary depending on the way
used for its installation and the macOS version.
This commit attempts to find the correct path for openssl to use.
* Write a version file for the CMake package
> If no VERSION is given, the PROJECT_VERSION variable is used.
Since we set the project version to `${VERSION}`, we can safely skip
passing it to `write_basic_package_version_file` as well.
* Build CMake generated makefiles
* Simplify and update checkout
* Update CI workflow 'C/C++ CI'
* Some corrections of spelling and naming.
* Remove running on branch dev since not officially available.
- Upgrade to actions/checkout@v3 as node 12 is being phased out.
- Perform a manual dnf refresh on RockyLinux during setup.
- Switch to official cygwin/cygwin-install-action
Improve coverage (#734)
* Remove duplicate tests
- double covered by:
"Can parse RESP3 doubles"
- bool covered via:
"Can parse RESP3 bool"
* Make (connect) timeout in test config general
* Set error string in Unix connect with invalid timeout
Restructure testcase since redisConnectWithTimeout() and
redisConnectUnixWithTimeout() now behaves similar.
* Use quiet flag in lcov/genhtml instead of piping to /dev/null
* Fixup of redisCommandArgv test case
* Update test case to match what it covers
Use new test case info text since the previous one seemed copy&pasted.
The sought coverage was the handling of the parent-chaining
for a double object, which the test case now focuses on.
Co-authored-by: Ariel <ashtul@gmail.com>
* Replace use of newer CMake builtins than in v3.0.0
Visual Studio generator will replace -D with /D.
* Only use /Z7 flag on a Visual Studio compilator
Flag is not available on a GNU compilator running on windows,
like in a mingw64 setup.
* Remove attempt to install .pdb file for windows static lib
From ff57c18b (#1054) the debug information was embedded in the
windows static lib rather than creating a .pdb file.
Removing the installation step of this file in CMake when building
with buildtype Debug or RelWithDebInfo.
* Embed debug information in windows hiredis_ssl_static lib
See ff57c18b (#1054) for same change in library hiredis_static.
* Update include example in README
* Update pkg-config installed via CMake
Gives the include directory to enable the use of:
#include <hiredis/hiredis.h>
but keeps the existing include dir. for backwards compatibility.
Example:
> pkg-config hiredis --cflags
-D_FILE_OFFSET_BITS=64 -I/usr/local/include/hiredis -I/usr/local/include
* Update pkg-config installed via Make
Gives the include directory to enable the use of:
#include <hiredis/hiredis.h>
but keeps the existing include path for backwards compatibility.
Example:
> pkg-config hiredis --cflags
-D_FILE_OFFSET_BITS=64 -I/usr/local/include/hiredis -I/usr/local/include
Since clang supports __attribute__ we can avoid disabling
it and use packed sdshdr structs. This also make sure we dont
affect subsequent header files that require __attribute__.
Note:
Clang attempts to be compatible with MSVC and defines _MSC_VER
Respect an overridden libdir when installing using CMake.
CMake now generates the hiredis_ssl.pc file with the correct
result in `libdir` and `Libs`.
See #767 and CMakes `CMAKE_INSTALL_LIBDIR`
Fix ProtocolError
This commit attempts to fix hiredis such that a recoverable write error
will be retried rather than throwing a hard error.
Since our read/write functions are now behind function pointers, we
specify semantically that a return value of < 0 is a hard error, 0 a
recoverable error, and > 0 a success.
Our default `redisNetRead` function was already doing something similar
so this also improves code consistency.
Resolves#961
Co-authored-by: Maksim Tuleika <maksim.tuleika@appcast.io>
Use a windows specific keepalive function.
While it is possible to toggle `TCP_KEEPALIVE` in windows via
setsockopt, you have to use `WSAIoctl` to set the interval.
Since `WSAIoctl` can actually do all of this in one call (toggle the
option, and set the corresponding interval), just use that in Windows
and avoid the call to `setsockopt` alltogether.
Fixes: #1100
Currently, hiredis supports TCP/SSL/Unix, all of the connection types
use a single FD(int), close() is enough to close a connection. For the
further step, introduce .close method for redisContextFuncs, this
allows to close a complex connection context, for example RDMA.
Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
Prevent incrementing passed a `\0` in our format string.
Co-authored-by: Michael Grunder <michael.grunder@gmail.com>
Co-authored-by: Kristján Valur Jónsson <sweskman@gmail.com>
Internally uv_poll_start iterates over all
attached event handlers to update event mask. It's
quite expensive operation if there many event handlers attached
to a loop.
As redisLibuvEvents.events is a copy of what libuv should see,
we can rely on it to avoid event mask updates.
Signed-off-by: Anton Tiurin <noxiouz@yandex.ru>
CMake config files were installed to `/usr/local/share/hiredis`, which is not recognizable by `find_package()`.
I'm not sure why it was set that way.
Given the commit introducing it is for Windows, I keep that behavior consistent there, but fix the rest.
A command with a faulty formatting string that lacks the
conversion specifier results in a ASAN heap-buffer-overflow.
This was due to that strchr() matches on null-termination,
which triggers a continuation of the string parsing.
Commit c6b8bd77c0 to make all functions in dict.c static. If a CMake project set warning unused functions, and include hiredis using add_subdirectory , this cause warnings / errors.
* Add docker support to test.sh
specifying a REDIS_DOCKER env var will run this as a server.
* Add initial test workflow
* Add workflow test to test 32 bit build
* Add ARM x compilation tests
* Add tests for windows platform
* Test with valgrind