|
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 |
}
|