/*-
 * See the file LICENSE for redistribution information.
 *
 * Copyright (c) 2001-2002
 *	Sleepycat Software.  All rights reserved.
 *
 * $Id: fileops.src,v 1.8 2002/04/06 18:25:55 bostic Exp $
 */

PREFIX	__fop
DBPRIVATE

INCLUDE	#include "db_config.h"
INCLUDE
INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
INCLUDE #include <ctype.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
INCLUDE #include "dbinc/db_dispatch.h"
INCLUDE #include "dbinc/db_am.h"
INCLUDE #include "dbinc/log.h"
INCLUDE #include "dbinc/rep.h"
INCLUDE #include "dbinc/txn.h"
INCLUDE #include "dbinc/fop.h"
INCLUDE

/*
 * create -- create a file system object.
 *
 * name: name in the file system
 * appname: indicates if the name needs to go through __db_appname
 * mode: file system mode
 */
BEGIN create		143
DBT	name		DBT		s
ARG	appname		u_int32_t	lu
ARG	mode		u_int32_t	o
END

/*
 * remove -- remove a file system object.
 *
 * name: name in the file system
 * appname: indicates if the name needs to go through __db_appname
 */
BEGIN remove		144
DBT	name		DBT		s
DBT	fid		DBT		s
ARG	appname		u_int32_t	lu
END

/*
 * write: log the writing of data into an object.
 *
 * name: file containing the page.
 * appname: indicates if the name needs to go through __db_appname
 * offset: offset in the file.
 * page: the actual meta-data page.
 * flag: non-0 indicates that this is a tempfile, so we needn't undo
 *	these modifications (we'll toss the file).
 */
BEGIN write	145
DBT	name		DBT		s
ARG	appname		u_int32_t	lu
ARG	offset		u_int32_t	lu
PGDBT	page		DBT		s
ARG	flag		u_int32_t	lu
END

/*
 * rename: move a file from one name to another.
 * The appname value indicates if this is a path name that should be used
 * directly (i.e., no interpretation) or if it is a pathname that should
 * be interpreted via calls to __db_appname.  The fileid is the 20-byte
 * DB fileid of the file being renamed.  We need to check it on recovery
 * so that we don't inadvertently overwrite good files.
 */
BEGIN rename	146
DBT	oldname		DBT		s
DBT	newname		DBT		s
DBT	fileid		DBT		s
ARG	appname		u_int32_t	lu
END

/*
 * File removal record.  This is a DB-level log record that indicates
 * we've just completed some form of file removal.  The purpose of this
 * log record is to logically identify the particular instance of the
 * named file so that during recovery, in deciding if we should roll-forward
 * a remove or a rename, we can make sure that we don't roll one forward and
 * delete or overwrite the wrong file.
 * real_fid:	The 20-byte unique file identifier of the original file being
 *		removed.
 * tmp_fid:	The unique fid of the tmp file that is removed.
 * name:	The pre- __db_appname name of the file
 * child:	The transaction that removed or renamed the file.
 */
 */
BEGIN file_remove	141
DBT	real_fid	DBT	s
DBT	tmp_fid		DBT	s
DBT	name		DBT	s
ARG	appname		u_int32_t	lu
ARG	child		u_int32_t	lx
END
