/*
 * logio_Postin_recover --
 *	Recovery function for Postin.
 *
 * PUBLIC: int logio_Postin_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postin_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postin_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postin_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postin_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Pretrans_recover --
 *	Recovery function for Pretrans.
 *
 * PUBLIC: int logio_Pretrans_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Pretrans_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Pretrans_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Pretrans_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Pretrans_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPretrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Pretrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Postin_recover --
 *	Recovery function for Postin.
 *
 * PUBLIC: int logio_Postin_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postin_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postin_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postin_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postin_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Prein_recover --
 *	Recovery function for Prein.
 *
 * PUBLIC: int logio_Prein_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Prein_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Prein_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Prein_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Prein_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPrein(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Prein(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Preun_recover --
 *	Recovery function for Preun.
 *
 * PUBLIC: int logio_Preun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Preun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Preun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Preun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Preun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPreun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Preun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Preun_recover --
 *	Recovery function for Preun.
 *
 * PUBLIC: int logio_Preun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Preun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Preun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Preun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Preun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPreun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Preun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

#include "system.h"

#include <db.h>

/*
 * logio_Postin_recover --
 *	Recovery function for Postin.
 *
 * PUBLIC: int logio_Postin_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postin_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postin_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postin_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postin_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Postun_recover --
 *	Recovery function for Postun.
 *
 * PUBLIC: int logio_Postun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Postun_recover --
 *	Recovery function for Postun.
 *
 * PUBLIC: int logio_Postun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Creat_recover --
 *	Recovery function for Creat.
 *
 * PUBLIC: int logio_Creat_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Creat_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Creat_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Creat_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Creat_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNCreat(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Creat: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Creat(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Creat: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Creat: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Creat: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Preun_recover --
 *	Recovery function for Preun.
 *
 * PUBLIC: int logio_Preun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Preun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Preun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Preun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Preun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPreun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Preun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Posttrans_recover --
 *	Recovery function for Posttrans.
 *
 * PUBLIC: int logio_Posttrans_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Posttrans_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Posttrans_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Posttrans_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Posttrans_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPosttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Posttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Posttrans_recover --
 *	Recovery function for Posttrans.
 *
 * PUBLIC: int logio_Posttrans_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Posttrans_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Posttrans_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Posttrans_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Posttrans_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPosttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Posttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Unlink_recover --
 *	Recovery function for Unlink.
 *
 * PUBLIC: int logio_Unlink_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Unlink_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Unlink_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Unlink_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Unlink_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNUnlink(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Unlink: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Unlink(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Unlink: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Unlink: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Unlink: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Postun_recover --
 *	Recovery function for Postun.
 *
 * PUBLIC: int logio_Postun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Rename_recover --
 *	Recovery function for Rename.
 *
 * PUBLIC: int logio_Rename_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Rename_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Rename_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Rename_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Rename_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNRename(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rename: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Rename(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rename: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rename: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rename: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Posttrans_recover --
 *	Recovery function for Posttrans.
 *
 * PUBLIC: int logio_Posttrans_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Posttrans_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Posttrans_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Posttrans_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Posttrans_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPosttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Posttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Mkdir_recover --
 *	Recovery function for Mkdir.
 *
 * PUBLIC: int logio_Mkdir_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Mkdir_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Mkdir_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Mkdir_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Mkdir_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNMkdir(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkdir: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Mkdir(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkdir: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkdir: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkdir: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Rmdir_recover --
 *	Recovery function for Rmdir.
 *
 * PUBLIC: int logio_Rmdir_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Rmdir_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Rmdir_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Rmdir_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Rmdir_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNRmdir(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rmdir: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Rmdir(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rmdir: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rmdir: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Rmdir: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Lsetfilecon_recover --
 *	Recovery function for Lsetfilecon.
 *
 * PUBLIC: int logio_Lsetfilecon_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Lsetfilecon_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Lsetfilecon_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Lsetfilecon_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Lsetfilecon_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNLsetfilecon(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lsetfilecon: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Lsetfilecon(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lsetfilecon: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lsetfilecon: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lsetfilecon: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Chown_recover --
 *	Recovery function for Chown.
 *
 * PUBLIC: int logio_Chown_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Chown_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Chown_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Chown_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Chown_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNChown(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chown: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Chown(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chown: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chown: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chown: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Lchown_recover --
 *	Recovery function for Lchown.
 *
 * PUBLIC: int logio_Lchown_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Lchown_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Lchown_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Lchown_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Lchown_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNLchown(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lchown: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Lchown(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lchown: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lchown: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Lchown: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Chmod_recover --
 *	Recovery function for Chmod.
 *
 * PUBLIC: int logio_Chmod_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Chmod_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Chmod_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Chmod_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Chmod_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNChmod(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chmod: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Chmod(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chmod: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chmod: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Chmod: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Utime_recover --
 *	Recovery function for Utime.
 *
 * PUBLIC: int logio_Utime_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Utime_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Utime_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Utime_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Utime_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNUtime(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Utime: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Utime(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Utime: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Utime: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Utime: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Symlink_recover --
 *	Recovery function for Symlink.
 *
 * PUBLIC: int logio_Symlink_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Symlink_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Symlink_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Symlink_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Symlink_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNSymlink(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Symlink: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Symlink(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Symlink: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Symlink: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Symlink: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Link_recover --
 *	Recovery function for Link.
 *
 * PUBLIC: int logio_Link_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Link_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Link_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Link_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Link_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNLink(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Link: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Link(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Link: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Link: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Link: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Mknod_recover --
 *	Recovery function for Mknod.
 *
 * PUBLIC: int logio_Mknod_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Mknod_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Mknod_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Mknod_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Mknod_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNMknod(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mknod: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Mknod(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mknod: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mknod: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mknod: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Mkfifo_recover --
 *	Recovery function for Mkfifo.
 *
 * PUBLIC: int logio_Mkfifo_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Mkfifo_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Mkfifo_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Mkfifo_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Mkfifo_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNMkfifo(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkfifo: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Mkfifo(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkfifo: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkfifo: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Mkfifo: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Pretrans_recover --
 *	Recovery function for Pretrans.
 *
 * PUBLIC: int logio_Pretrans_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Pretrans_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Pretrans_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Pretrans_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Pretrans_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPretrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Pretrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Pretrans: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Prein_recover --
 *	Recovery function for Prein.
 *
 * PUBLIC: int logio_Prein_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Prein_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Prein_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Prein_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Prein_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPrein(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Prein(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Prein: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Postin_recover --
 *	Recovery function for Postin.
 *
 * PUBLIC: int logio_Postin_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postin_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postin_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postin_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postin_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postin(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postin: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Preun_recover --
 *	Recovery function for Preun.
 *
 * PUBLIC: int logio_Preun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Preun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Preun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Preun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Preun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPreun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Preun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Preun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Postun_recover --
 *	Recovery function for Postun.
 *
 * PUBLIC: int logio_Postun_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Postun_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Postun_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Postun_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Postun_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPostun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Postun(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Postun: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

/*
 * logio_Posttrans_recover --
 *	Recovery function for Posttrans.
 *
 * PUBLIC: int logio_Posttrans_recover
 * PUBLIC:   __P((dbenv *, DBT *, DB_LSN *, db_recops));
 */
int
logio_Posttrans_recover(DB_ENV * dbenv, DBT * dbtp, DB_LSN * lsnp, db_recops op)
{
    logio_Posttrans_args *argp = NULL;
    int ret = EINVAL;

#ifdef DEBUG_RECOVER
    (void)logio_Posttrans_print(dbenv, dbtp, lsnp, op);
#endif
    if ((ret = logio_Posttrans_read(dbenv, dbtp->data, &argp)) != 0)
	goto exit;

    switch (op) {
    case DB_TXN_ABORT:
    case DB_TXN_BACKWARD_ROLL:
	ret = UNPosttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_BACKWARD_ROLL");
	else
	    ret = 0;
	break;
    case DB_TXN_APPLY:
    case DB_TXN_FORWARD_ROLL:
	ret = Posttrans(argp->path.data);
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_FORWARD_ROLL");
	else
	    ret = 0;
    case DB_TXN_PRINT:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: DB_TXN_PRINT");
	else
	    ret = 0;
	break;
    default:
	if (ret != 0)
	    dbenv->err(dbenv, ret, "Posttrans: UNKNOWN");
	else
	    ret = 0;
	break;
    }

    /* Allow for following LSN pointers through a transaction. */
    *lsnp = argp->prev_lsn;

exit:
    if (argp != NULL)
	free(argp);
    return ret;
}

