This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/main by this push:
new 42599cd9f No cfile support for 32bit systems
42599cd9f is described below
commit 42599cd9f9baabbfc9f0c9d8d85b3f95cd149c27
Author: Nick Vatamaniuc <[email protected]>
AuthorDate: Tue May 6 11:55:01 2025 -0400
No cfile support for 32bit systems
In principle we could support it with a few more extra macros to figure out
if
we should use `enif_get_int64()` vs `enif_get_int()` for `size_t` values,
but
since we don't have a way to test it (no CI machine for armhf), we'll just
opt
to not support it for now. This doesn't mean we'd crash the build: we still
support 32bit systems just with a default file module, like we do on
Windows.
---
src/couch/priv/couch_cfile/couch_cfile.c | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/src/couch/priv/couch_cfile/couch_cfile.c
b/src/couch/priv/couch_cfile/couch_cfile.c
index 06328b069..c7e6f16f0 100644
--- a/src/couch/priv/couch_cfile/couch_cfile.c
+++ b/src/couch/priv/couch_cfile/couch_cfile.c
@@ -11,7 +11,15 @@
// the License.
-#ifndef _WIN32
+// Not supported on Windows or 32 bit architectures. When not supported the NIF
+// will still build, but the API functions will return {error, einval}, and
+// we'd fallback to the regular file API then
+//
+#if !defined(_WIN32) && defined(__LP64__)
+#define COUCH_CFILE_SUPPORTED 1
+#endif
+
+#ifdef COUCH_CFILE_SUPPORTED
#include <errno.h>
#include <limits.h>
@@ -225,7 +233,7 @@ int efile_datasync(int fd, posix_errno_t* res_errno) {
//
static ERL_NIF_TERM dup_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM
argv[])
{
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
int fd, newfd;
handle_t* hdl;
ErlNifRWLock *lock;
@@ -293,7 +301,7 @@ static ERL_NIF_TERM dup_nif(ErlNifEnv *env, int argc, const
ERL_NIF_TERM argv[])
static ERL_NIF_TERM close_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM
argv[])
{
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
if (argc != 1 || !get_handle(env, argv[0], &hdl)) {
@@ -326,7 +334,7 @@ static ERL_NIF_TERM close_nif(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[
//
static ERL_NIF_TERM close_fd_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM
argv[])
{
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
int fd;
if (argc != 1 || !enif_is_number(env, argv[0])) {
@@ -351,7 +359,7 @@ static ERL_NIF_TERM close_fd_nif(ErlNifEnv *env, int argc,
const ERL_NIF_TERM ar
//
static ERL_NIF_TERM pread_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
argv[])
{
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
long offset, block_size, bytes_read;
SysIOVec io_vec[1];
@@ -413,7 +421,7 @@ static ERL_NIF_TERM pread_nif(ErlNifEnv* env, int argc,
const ERL_NIF_TERM argv[
// Follows implementation from prim_file_nif.c
//
static ERL_NIF_TERM write_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
argv[]) {
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
ErlNifIOVec vec, *input = &vec;
posix_errno_t res_errno = 0;
@@ -452,7 +460,7 @@ static ERL_NIF_TERM write_nif(ErlNifEnv* env, int argc,
const ERL_NIF_TERM argv[
}
static ERL_NIF_TERM seek_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM
argv[]) {
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
long result, offset;
int whence;
@@ -502,7 +510,7 @@ static ERL_NIF_TERM seek_nif(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]
}
static ERL_NIF_TERM datasync_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM
argv[]) {
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
posix_errno_t res_errno = 0;
@@ -530,7 +538,7 @@ static ERL_NIF_TERM datasync_nif(ErlNifEnv *env, int argc,
const ERL_NIF_TERM ar
}
static ERL_NIF_TERM truncate_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM
argv[]) {
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
off_t offset;
@@ -568,7 +576,7 @@ static ERL_NIF_TERM truncate_nif(ErlNifEnv *env, int argc,
const ERL_NIF_TERM ar
//
static ERL_NIF_TERM info_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
argv[])
{
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
int fd, old_fd;
@@ -601,7 +609,7 @@ static ERL_NIF_TERM info_nif(ErlNifEnv* env, int argc,
const ERL_NIF_TERM argv[]
//
static ERL_NIF_TERM eof_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
argv[])
{
-#ifndef _WIN32
+#ifdef COUCH_CFILE_SUPPORTED
handle_t* hdl;
struct stat data;