summaryrefslogtreecommitdiff
path: root/trans/magic.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>1995-03-30 00:29:36 +0000
committerMiles Bader <miles@gnu.org>1995-03-30 00:29:36 +0000
commitb37949f4b90d6aa0cd066e03011d2885f88a312e (patch)
treef390c7bd8174d2f83a4a7ad040a9dc3a77e56940 /trans/magic.c
parent5b3603495a3b4f6721f66a3115391412e750847c (diff)
Initial revision
Diffstat (limited to 'trans/magic.c')
-rw-r--r--trans/magic.c142
1 files changed, 142 insertions, 0 deletions
diff --git a/trans/magic.c b/trans/magic.c
new file mode 100644
index 00000000..1bc4fe9a
--- /dev/null
+++ b/trans/magic.c
@@ -0,0 +1,142 @@
+/* A translator for returning FS_RETRY_MAGIC strings.
+
+ Copyright (C) 1995 Free Software Foundation, Inc.
+
+ Written by Miles Bader <miles@gnu.ai.mit.edu>
+
+ 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include <hurd.h>
+#include <stdio.h>
+#include <error.h>
+#include <hurd/fsys.h>
+#include "fsys_S.h"
+
+/* ---------------------------------------------------------------- */
+
+extern int fsys_server (mach_msg_header_t *, mach_msg_header_t *);
+
+/* The magic string we return for lookups. */
+static char *magic = NULL;
+
+void
+main (int argc, char **argv)
+{
+ error_t err;
+ mach_port_t bootstrap, control, realnode;
+
+ task_get_bootstrap_port (mach_task_self (), &bootstrap);
+ if (bootstrap == MACH_PORT_NULL)
+ error(3, 0, "Must be started as a translator");
+
+ if (argc != 2 || *argv[1] == '-')
+ {
+ fprintf(stderr, "Usage: %s MAGIC", program_invocation_name);
+ exit(-1);
+ }
+
+ magic = argv[1];
+
+ /* Reply to our parent */
+ mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE, &control);
+ err = fsys_startup (bootstrap, control, MACH_MSG_TYPE_MAKE_SEND, &realnode);
+ if (err)
+ error(1, err, "starting translator");
+
+ mach_port_deallocate (mach_task_self (), realnode);
+
+ /* Launch */
+ while (1)
+ {
+ /* The timeout here is 10 minutes */
+ err = mach_msg_server_timeout (fsys_server, 0, control,
+ MACH_RCV_TIMEOUT, 1000 * 60 * 10);
+ if (err == MACH_RCV_TIMED_OUT)
+ exit (0);
+ }
+}
+
+/* ---------------------------------------------------------------- */
+
+error_t
+S_fsys_getroot (mach_port_t fsys_t,
+ mach_port_t dotdotnode,
+ uid_t *uids, u_int nuids, uid_t *gids, u_int ngids,
+ int flags,
+ retry_type *do_retry, char *retry_name,
+ mach_port_t *ret, mach_msg_type_name_t *rettype)
+{
+ strcpy(retry_name, magic);
+ *do_retry = FS_RETRY_MAGICAL;
+ *ret = MACH_PORT_NULL;
+ *rettype = MACH_MSG_TYPE_COPY_SEND;
+ return 0;
+}
+
+error_t
+S_fsys_startup (mach_port_t bootstrap,
+ mach_port_t control,
+ mach_port_t *real,
+ mach_msg_type_name_t *realtype)
+{
+ return EOPNOTSUPP;
+}
+
+error_t
+S_fsys_goaway (mach_port_t control,
+ int flags)
+{
+ exit (0);
+}
+
+error_t
+S_fsys_syncfs (mach_port_t control,
+ int wait,
+ int recurse)
+{
+ return 0;
+}
+
+error_t
+S_fsys_mod_readonly (mach_port_t control,
+ int val,
+ int force)
+{
+ return EOPNOTSUPP;
+}
+
+error_t
+S_fsys_getfile (mach_port_t control,
+ uid_t *uids, u_int nuids, uid_t *gids, u_int ngids,
+ char *handle, u_int handllen,
+ mach_port_t *pt, mach_msg_type_name_t *pttype)
+{
+ return EOPNOTSUPP;
+}
+
+error_t
+S_fsys_getpriv (mach_port_t control,
+ mach_port_t *hostpriv, mach_port_t *devmaster, task_t *fstask)
+{
+ return EOPNOTSUPP;
+}
+
+error_t
+S_fsys_init (mach_port_t control,
+ mach_port_t reply, mach_msg_type_name_t replytype,
+ mach_port_t proc, auth_t auth)
+{
+ return EOPNOTSUPP;
+}