summaryrefslogtreecommitdiff
path: root/hurd/fs.defs
diff options
context:
space:
mode:
Diffstat (limited to 'hurd/fs.defs')
-rw-r--r--hurd/fs.defs354
1 files changed, 354 insertions, 0 deletions
diff --git a/hurd/fs.defs b/hurd/fs.defs
new file mode 100644
index 00000000..f6344e1b
--- /dev/null
+++ b/hurd/fs.defs
@@ -0,0 +1,354 @@
+/* Definitions for the filesystem interface.
+ Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+
+This file is part of the GNU Hurd.
+
+The GNU Hurd 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, or (at your option)
+any later version.
+
+The GNU Hurd 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 the GNU Hurd; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+
+/* All these objects also implement the generic IO facilities. */
+
+subsystem fs 20000;
+
+#include <hurd/hurd_types.defs>
+
+#ifdef FILE_IMPORTS
+FILE_IMPORTS
+#endif
+
+/* Operations supported on all files */
+
+INTR_INTERFACE
+
+/* Overlay a task with a file. Necessary initialization, including
+ authentication changes associated with set[ug]id execution must be
+ handled by the filesystem. Filesystems normally implement this by
+ using exec_newtask or exec_loadtask as appropriate. */
+routine file_exec (
+ exec_file: file_t;
+ RPT
+ exec_task: task_t;
+ flags: int;
+ argv: data_t SCP;
+ envp: data_t SCP;
+ fdarray: portarray_t SCP;
+ portarray: portarray_t SCP;
+ intarray: intarray_t SCP;
+ deallocnames: mach_port_name_array_t SCP;
+ destroynames: mach_port_name_array_t SCP);
+
+/* Change owner and/or group */
+routine file_chown (
+ chown_file: file_t;
+ RPT
+ new_owner: uid_t;
+ new_group: gid_t);
+
+/*
+Whan that Aprill with hith thoureth thoote
+The droghte of March hath perthed to the roote,
+And bathed every veyne in thwith licour,
+Of which vertu engendred is the flour;
+Whan Zephiruth eek with hith thweete breeth
+Inthpired hath in every holt and heeth
+The tender croppeth, and the yonge thonne
+Hath in the Ram his halve courth yronne,
+And thmale foweleth maken melodye,
+That thlepen all the nyght with open ye
+(Tho Priketh hem Nature in hir corageth),
+Thanne longen folk to goon on pligrimageth,
+And palmereth for to theken thtraunge thtrondeth,
+To ferne halweth, kowthe in thondry londeth:
+And thpethially, from every thireth ende
+Of Engelond to Cantebury they wende,
+The hooly blithful martyr for to theke,
+That hem hath holpen whan that they were theeke.
+*/
+routine file_chauthor (
+ chauth_file: file_t;
+ RPT
+ new_author: uid_t);
+
+/* Change mode bits */
+routine file_chmod (
+ chmod_file: file_t;
+ RPT
+ new_mode: mode_t);
+
+/* Change file flags */
+routine file_chflags (
+ chflags_file: file_t;
+ RPT
+ new_flags: int);
+
+/* Change access and modify times */
+/* If the microseconds value is -1 (all bits on) then the time should be
+ set to the current time and the remainder of the time_value_t ignored. */
+routine file_utimes (
+ utimes_file: file_t;
+ RPT
+ new_atime: time_value_t;
+ new_mtime: time_value_t);
+
+/* Change the size of the file. If the size increases, new blocks are
+ zero-filled. After successful return, it is safe to reference mapped
+ areas of the file up to NEW_SIZE. */
+routine file_set_size (
+ trunc_file: file_t;
+ RPT
+ new_size: off_t);
+
+/* Apply/manipulate advisory lock */
+routine file_lock (
+ lock_file: file_t;
+ RPT
+ flags: int);
+
+/* Return current lock status. Mystatus tells what kind of lock the
+ caller has; otherstatus tells what kind of lock anyone has
+ (including the caller). */
+routine file_lock_stat (
+ lock_file: file_t;
+ RPT
+ out mystatus: int;
+ out otherstatus: int);
+
+/* Find out what kind of access this file permits the current user
+ (regardless of the current open modes for this port). ALLOWED is a
+ bitwise OR of O_READ, O_WRITE, and O_EXEC. This is not necessarily the
+ same as what an open or exec would allow; O_EXEC is set for root even if
+ no executable bits are on (in which case file_exec should fail) and
+ O_WRITE is set a directory can be modified, even though it can't be
+ written directly. */
+routine file_check_access (
+ file: file_t;
+ RPT
+ out allowed: int);
+
+/* Notice changes to file FILE. Send notification messages (see
+ fs_notify.defs) to PORT as they occur. */
+routine file_notice_changes (
+ file: file_t;
+ RPT
+ port: mach_port_send_t);
+
+/* Return control port for this filesystem */
+routine file_getcontrol (
+ file: file_t;
+ RPT
+ out control: mach_port_send_t);
+
+/* Return filesystem status */
+routine file_statfs (
+ file: file_t;
+ RPT
+ out info: fsys_statfsbuf_t);
+
+/* Sync the individual file. If OMIT_METADATA is set, then it is only
+necessary for the server to updated the actual contents of the file,
+not any associated metadata. */
+routine file_sync (
+ file: file_t;
+ RPT
+ wait: int;
+ omit_metadata: int);
+
+/* Sync the entire filesystem */
+routine file_syncfs (
+ file: file_t;
+ RPT
+ wait: int;
+ do_children: int);
+
+/* Return information on the storage used to hold this file. See the comment
+ for enum file_storage_class in <hurd/hurd_types.h> the details. */
+routine file_get_storage_info (
+ file: file_t;
+ RPT
+ out ports: portarray_t;
+ out ints: intarray_t;
+ out offsets: off_array_t;
+ out data: data_t);
+
+/* Return the node for hard links to this potentially translated file.
+ This returns a potentially unauthenticated node. */
+routine file_getlinknode (
+ file: file_t;
+ RPT
+ out linknode: mach_port_send_t);
+
+/* Return a file handle for this file. This can be used by NFS and such.
+ It is not guaranteed that this call will work...if it doesn't, then this
+ filesystem cannot be NFS mounted. */
+routine file_getfh (
+ file: file_t;
+ RPT
+ out filehandle: data_t, dealloc);
+
+/* Operations supported on directories */
+
+/* Translate a file name, following all symlinks. Upon return, if DO_RETRY
+ is FS_RETRY_MAGICAL then RETRY_NAME specifies what to do, the list
+ of possibilities is documented in <hurd/hurd_types.h>; if
+ FS_RETRY_REAUTH, then RESULT should be reauthenticated before being
+ used. If RETRY_NAME is the empty string and the retry type is
+ FS_RETRY_NORMAL, then no further dir_lookup calls are required;
+ RESULT is the port to use. Otherwise the dir_lookup call should be
+ repeated, sent to RESULT (or the reauthenticated port) with
+ RETRY_NAME passed for FILE_NAME. This call is required to be
+ supported by all files (even non-directories) if the filename is
+ null, and should function in that case as a re-open of the file. */
+routine dir_lookup (
+ start_dir: file_t;
+ RPT
+ file_name: string_t;
+ flags: int;
+ mode: mode_t;
+ out do_retry: retry_type;
+ out retry_name: string_t;
+ out result: mach_port_send_t);
+
+/* Read entries from the directory. Each entry is identified
+ by an index number starting at 0 and running through the file. This
+ call fetches NENTRIES (or any convenient number if NENTRIES is -1)
+ entries starting at ENTRY, returning an array of struct directs in DATA.
+ The number of entries successfully read is returned in AMOUNT. If ENTRY
+ is bigger than the index of the last entry, then 0 is returned in
+ AMOUNT. If BUFSIZE is nonzero, never return more than BUFSIZE bytes of
+ data regardless. */
+routine dir_readdir (
+ dir: file_t;
+ RPT
+ out data: data_t, dealloc[];
+ entry: int;
+ nentries: int;
+ bufsiz: vm_size_t;
+ out amount: int);
+
+/* Create directory */
+routine dir_mkdir (
+ directory: file_t;
+ RPT
+ name: string_t;
+ mode: mode_t);
+
+/* Remove directory */
+routine dir_rmdir (
+ directory: file_t;
+ RPT
+ name: string_t);
+
+/* Remove non-directory */
+routine dir_unlink (
+ directory: file_t;
+ RPT
+ name: string_t);
+
+/* Create a hard link.
+
+ If DIR and FILE are not implemented by the same filesystem,
+ EXDEV should be returned. If the two filesystems, however can
+ inter-operate and guarantee the appropriate Posix semantics, they can
+ communicate by a private protocol and allow hard links between them.
+ If EXCL is set, then fail if NAME already exists in DIR. */
+routine dir_link (
+ dir: file_t;
+ RPT
+ file: file_t;
+ name: string_t;
+ excl: int);
+
+/* Rename file -- comments similar to those for dir_link apply here
+ about EXDEV. If EXCL is set, then fail if NEWNAME already exists in
+ NEWDIRECTORY. */
+routine dir_rename (
+ olddirectory: file_t;
+ RPT
+ oldname: string_t;
+ newdirectory: file_t;
+ newname: string_t;
+ excl: int);
+
+/* Create a new file without linking it into the filesystem. You
+ still must have write permission on the specified directory, even
+ though it will not actually be written. Return in *newnode a port
+ to the file. Flags are the same as for dir_pathtrans, but
+ O_CREAT and O_TRUNC are assumed even if not specified. */
+routine dir_mkfile (
+ directory: file_t;
+ RPT
+ flags: int;
+ mode: mode_t;
+ out newnode: mach_port_send_t);
+
+/* Notice changes to directory DIR. Send directory change notifications
+ (see fs_notify.defs) to PORT as they occur. */
+routine dir_notice_changes (
+ directory: file_t;
+ RPT
+ port: mach_port_send_t);
+
+/* To get or set the translator currently running on a file, use
+ file_set_translator, file_get_translator, or
+ file_get_translator_cntl on a port gotten with the
+ FS_LOOKUP_NOTRANS flag to dir_pathtrans. You can send these RPCs
+ to a port to a translated node (looked up without
+ FS_LOOKUP_NOTRANS) to stack a new translator on top of the existing
+ one. */
+
+/* Set a translator for future lookups to a file.
+
+ PASSIVE is the passive translator;
+ ACTIVE is the active translator.
+
+ The FLAGS are FS_TRANS_*, defined in <hurd/hurd_types.h>.
+ OLDFLAGS are sent in an fsys_goaway to an existing active translator
+ if there is one and it is to be killed. */
+routine file_set_translator (
+ file: file_t;
+ RPT
+ passive_flags: int;
+ active_flags: int;
+ oldtrans_flags: int;
+ passive: data_t SCP;
+ active: mach_port_send_t);
+
+/* Return the stored permanent translator for this file. */
+routine file_get_translator (
+ file: file_t;
+ RPT
+ out translator: data_t, dealloc);
+
+/* Return the translator control port to the
+ active translator (if any) for this file. */
+routine file_get_translator_cntl (
+ file: file_t;
+ RPT
+ out translator_cntl: mach_port_send_t);
+
+/* Return the options describing the way the receiving filesystem is
+ running. (Suitable as an arg for fsys_set_options). */
+routine file_get_fs_options (
+ file: file_t;
+ RPT
+ out options: data_t);
+
+/* Return a new file, NEW_FILE, with the same semantics as FILE, but
+ with lookups of `..' (if FILE is a directory) redirected to PARENT. */
+routine file_reparent (
+ file: file_t;
+ RPT
+ parent: mach_port_t;
+ out new_file: mach_port_send_t);