summaryrefslogtreecommitdiff
path: root/filter.h
diff options
context:
space:
mode:
Diffstat (limited to 'filter.h')
-rw-r--r--filter.h348
1 files changed, 348 insertions, 0 deletions
diff --git a/filter.h b/filter.h
new file mode 100644
index 000000000..6dc9a69dc
--- /dev/null
+++ b/filter.h
@@ -0,0 +1,348 @@
+/*----------------------------------------------------------------------------*/
+/*filter.h*/
+/*----------------------------------------------------------------------------*/
+/*The definitions for the filtering translator*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005, 2008 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __FILTER_H__
+#define __FILTER_H__
+/*----------------------------------------------------------------------------*/
+#include <stddef.h>
+#include <stdlib.h>
+#include <cthreads.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <sys/time.h>
+#include <hurd/ihash.h>
+#include <hurd/iohelp.h>
+/*----------------------------------------------------------------------------*/
+#include "node.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*The inode for the root node*/
+#define FILTER_ROOT_INODE 1
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*A mapped time value*/
+/*Required for a very fast access to time*/
+extern volatile struct mapped_time_value * maptime;
+/*----------------------------------------------------------------------------*/
+/*A port to the underlying node*/
+extern mach_port_t underlying_node;
+/*----------------------------------------------------------------------------*/
+/*The stat information about the underlying node*/
+extern io_statbuf_t underlying_node_stat;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Attempts to create a file named `name` in `dir` for `user` with mode `mode`*/
+error_t
+netfs_attempt_create_file
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode,
+ struct node ** node
+ );
+/*----------------------------------------------------------------------------*/
+/*Returns an error if the process of opening a file should not be allowed
+ to complete because of insufficient permissions*/
+error_t
+netfs_check_open_permissions
+ (
+ struct iouser * user,
+ struct node * np,
+ int flags,
+ int newnode
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts an utimes call for the user `cred` on node `node`*/
+error_t
+netfs_attempt_utimes
+ (
+ struct iouser * cred,
+ struct node * node,
+ struct timespec * atime,
+ struct timespec * mtime
+ );
+/*----------------------------------------------------------------------------*/
+/*Returns the valid access types for file `node` and user `cred`*/
+error_t
+netfs_report_access
+ (
+ struct iouser * cred,
+ struct node * np,
+ int * types
+ );
+/*----------------------------------------------------------------------------*/
+/*Validates the stat data for the node*/
+error_t
+netfs_validate_stat
+ (
+ struct node * np,
+ struct iouser * cred
+ );
+/*----------------------------------------------------------------------------*/
+/*Syncs `node` completely to disk*/
+error_t
+netfs_attempt_sync
+ (
+ struct iouser * cred,
+ struct node * node,
+ int wait
+ );
+/*----------------------------------------------------------------------------*/
+/*Fetches a directory*/
+error_t
+netfs_get_dirents
+ (
+ struct iouser * cred,
+ struct node * dir,
+ int first_entry,
+ int num_entries,
+ char ** data,
+ mach_msg_type_number_t * data_len,
+ vm_size_t max_data_len,
+ int * data_entries
+ );
+/*----------------------------------------------------------------------------*/
+/*Looks up `name` under `dir` for `user`*/
+error_t
+netfs_attempt_lookup
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ struct node ** node
+ );
+/*----------------------------------------------------------------------------*/
+/*Deletes `name` in `dir` for `user`*/
+error_t
+netfs_attempt_unlink
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to rename `fromdir`/`fromname` to `todir`/`toname`*/
+error_t
+netfs_attempt_rename
+ (
+ struct iouser * user,
+ struct node * fromdir,
+ char * fromname,
+ struct node * todir,
+ char * toname,
+ int excl
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to create a new directory*/
+error_t
+netfs_attempt_mkdir
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to remove directory `name` in `dir` for `user`*/
+error_t
+netfs_attempt_rmdir
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the owner of `node` for user `cred` to `uid`:`gid`*/
+error_t
+netfs_attempt_chown
+ (
+ struct iouser * cred,
+ struct node * node,
+ uid_t uid,
+ uid_t gid
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the author of `node` to `author`*/
+error_t
+netfs_attempt_chauthor
+ (
+ struct iouser * cred,
+ struct node * node,
+ uid_t author
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the mode of `node` to `mode` for `cred`*/
+error_t
+netfs_attempt_chmod
+ (
+ struct iouser * user,
+ struct node * node,
+ mode_t mode
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a symlink targetting `name`*/
+error_t
+netfs_attempt_mksymlink
+ (
+ struct iouser * cred,
+ struct node * node,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a device; type can be either S_IFBLK or S_IFCHR*/
+error_t
+netfs_attempt_mkdev
+ (
+ struct iouser * cred,
+ struct node * node,
+ mode_t type,
+ dev_t indexes
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the passive translator record for `file` passing `argz`*/
+error_t
+netfs_set_translator
+ (
+ struct iouser * cred,
+ struct node * node,
+ char * argz,
+ size_t arglen
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to call chflags for `node`*/
+error_t
+netfs_attempt_chflags
+ (
+ struct iouser * cred,
+ struct node * node,
+ int flags
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the size of file `node`*/
+error_t
+netfs_attempt_set_size
+ (
+ struct iouser * cred,
+ struct node * node,
+ loff_t size
+ );
+/*----------------------------------------------------------------------------*/
+/*Fetches the filesystem status information*/
+error_t
+netfs_attempt_statfs
+ (
+ struct iouser * cred,
+ struct node * node,
+ fsys_statfsbuf_t * st
+ );
+/*----------------------------------------------------------------------------*/
+/*Syncs the filesystem*/
+error_t
+netfs_attempt_syncfs
+ (
+ struct iouser * cred,
+ int wait
+ );
+/*----------------------------------------------------------------------------*/
+/*Creates a link in `dir` with `name` to `file`*/
+error_t
+netfs_attempt_link
+ (
+ struct iouser * user,
+ struct node * dir,
+ struct node * file,
+ char * name,
+ int excl
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to create an anonymous file related to `dir` with `mode`*/
+error_t
+netfs_attempt_mkfile
+ (
+ struct iouser * user,
+ struct node * dir,
+ mode_t mode,
+ struct node ** node
+ );
+/*----------------------------------------------------------------------------*/
+/*Reads the contents of symlink `node` into `buf`*/
+error_t
+netfs_attempt_readlink
+ (
+ struct iouser * user,
+ struct node * node,
+ char * buf
+ );
+/*----------------------------------------------------------------------------*/
+/*Reads from file `node` up to `len` bytes from `offset` into `data`*/
+error_t
+netfs_attempt_read
+ (
+ struct iouser * cred,
+ struct node * np,
+ loff_t offset,
+ size_t * len,
+ void * data
+ );
+/*----------------------------------------------------------------------------*/
+/*Writes to file `node` up to `len` bytes from offset from `data`*/
+error_t
+netfs_attempt_write
+ (
+ struct iouser * cred,
+ struct node * node,
+ loff_t offset,
+ size_t * len,
+ void * data
+ );
+/*----------------------------------------------------------------------------*/
+/*Frees all storage associated with the node*/
+void
+netfs_node_norefs
+ (
+ struct node * np
+ );
+/*----------------------------------------------------------------------------*/
+/*Implements file_get_translator_cntl as described in <hurd/fs.defs>
+ (according to diskfs_S_file_get_translator_cntl)*/
+kern_return_t
+netfs_S_file_get_translator_cntl
+ (
+ struct protid * user,
+ mach_port_t * cntl,
+ mach_msg_type_name_t * cntltype
+ );
+/*----------------------------------------------------------------------------*/
+#endif /*__FILTER_H__*/