//NOTE: fmemopen does not exist in OSX // I want fmemopen #define _GNU_SOURCE #include <assert.h> #include <sys/stat.h> #include <errno.h> #include <stdio.h> #include "test.h" const char *expect_errpfx=0; int n_handle_error=0; void handle_error (const DB_ENV *dbenv, const char *errpfx, const char *msg) { assert(errpfx==expect_errpfx); n_handle_error++; } int main (int argc, const char *argv[]) { parse_args(argc, argv); #if defined(OSX) if (verbose) printf("Warning: fmemopen does not exist in OSX!\n"); #else system("rm -rf " DIR); int r=mkdir(DIR, 0777); assert(r==0); { DB_ENV *env; r = db_env_create(&env, 0); assert(r==0); env->set_errfile(env,0); // Turn off those annoying errors r = env->open(env, DIR, -1, 0644); assert(r==EINVAL); assert(n_handle_error==0); r = env->close(env, 0); assert(r==0); } int do_errfile, do_errcall; for (do_errfile=0; do_errfile<2; do_errfile++) { for (do_errcall=0; do_errcall<2; do_errcall++) { DB_ENV *env; char buf[10000]=""; FILE *write_here = fmemopen(buf, sizeof(buf), "w"); n_handle_error=0; r = db_env_create(&env, 0); assert(r==0); env->set_errfile(env,0); // Turn off those annoying errors if (do_errfile) env->set_errfile(env, write_here); if (do_errcall) env->set_errcall(env, handle_error); r = env->open(env, DIR, -1, 0644); assert(r==EINVAL); r = env->close(env, 0); assert(r==0); fclose(write_here); if (do_errfile) { assert(buf[0]!=0); assert(buf[0]!=':'); } else { assert(buf[0]==0); } if (do_errcall) { assert(n_handle_error==1); } else { assert(n_handle_error==0); } } } #endif return 0; }