Blame src/panicenv.c

Packit e8bc57
/** \file panicenv.c - Set Berkeley DB environment's PANIC state
Packit e8bc57
 * \author Matthias Andree
Packit e8bc57
 * \date 2005
Packit e8bc57
 *
Packit e8bc57
 * GNU General Public License v2 */
Packit e8bc57
Packit e8bc57
#include <db.h>
Packit e8bc57
#include <stdio.h>
Packit e8bc57
#include <stdlib.h>
Packit e8bc57
#include <string.h>
Packit e8bc57
Packit e8bc57
__attribute__((noreturn))
Packit e8bc57
static void barf(const char *tag, const int e)
Packit e8bc57
{
Packit e8bc57
    fprintf(stderr, "%s: %s\n", tag, db_strerror(e));
Packit e8bc57
    exit(EXIT_FAILURE);
Packit e8bc57
}
Packit e8bc57
Packit e8bc57
__attribute__((noreturn))
Packit e8bc57
static void usage(int code)
Packit e8bc57
{
Packit e8bc57
    fprintf(stderr, "Usage: panicenv <ENVDIR>\n");
Packit e8bc57
    exit(code);
Packit e8bc57
}
Packit e8bc57
Packit e8bc57
int main(int argc, char **argv)
Packit e8bc57
{
Packit e8bc57
    DB_ENV *env;
Packit e8bc57
    int e;
Packit e8bc57
Packit e8bc57
    if (argc != 2)
Packit e8bc57
	usage(EXIT_FAILURE);
Packit e8bc57
Packit e8bc57
    e = db_env_create(&env, 0);
Packit e8bc57
    if (e) barf("db_env_create", e);
Packit e8bc57
Packit e8bc57
    e = env->set_flags(env, DB_NOPANIC, 1);
Packit e8bc57
    if (e) barf("DB_ENV->set_flags/DB_NOPANIC", e);
Packit e8bc57
Packit e8bc57
    e = env->set_flags(env, DB_NOMMAP, 1);
Packit e8bc57
    if (e) barf("DB_ENV->set_flags/DB_NOMMAP", e);
Packit e8bc57
Packit e8bc57
    e = env->open(env, argv[1], DB_JOINENV, 0);
Packit e8bc57
    if (e) barf("DB_ENV->open", e);
Packit e8bc57
Packit e8bc57
    e = env->set_flags(env, DB_PANIC_ENVIRONMENT, 1);
Packit e8bc57
    if (e) barf("DB_ENV->set_flags/DB_PANIC_ENVIRONMENT", e);
Packit e8bc57
Packit e8bc57
    e = env->close(env, 0);
Packit e8bc57
    if (e) barf("DB_ENV->close", e);
Packit e8bc57
Packit e8bc57
    return EXIT_SUCCESS;
Packit e8bc57
}