From 4335fed52bc306486c5124a2e6f8ffce95b4d858 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Tue, 5 Sep 1995 22:26:42 +0000 Subject: Initial revision --- libfshelp/delegate.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 libfshelp/delegate.c (limited to 'libfshelp') diff --git a/libfshelp/delegate.c b/libfshelp/delegate.c new file mode 100644 index 00000000..95e5c296 --- /dev/null +++ b/libfshelp/delegate.c @@ -0,0 +1,62 @@ +/* fshelp_delegate_translation + + Copyright (C) 1995 Free Software Foundation, Inc. + + Written by Miles Bader + + 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 +#include +#include +#include +#include +#include + +/* Try to hand off responsibility from a translator to the server located on + the node SERVER_NAME. REQUESTOR is the translator's bootstrap port, and + ARGV is the command line. If SERVER_NAME is NULL, then a name is + concocted by appending ARGV[0] to _SERVERS. */ +error_t +fshelp_delegate_translation (char *server_name, + mach_port_t requestor, char **argv) +{ + error_t err; + file_t server; + + if (! server_name) + { + char *buf = alloca (strlen (argv[0]) + sizeof (_SERVERS)); + strcpy (buf, _SERVERS); + strcat (buf, argv[0]); + server_name = buf; + } + + server = file_name_lookup (server_name, 0, 0); + if (server != MACH_PORT_NULL) + { + char *argz; + int argz_len; + err = argz_create (argv, &argz, &argz_len); + if (!err) + err = fsys_forward (server, + requestor, MACH_MSG_TYPE_COPY_SEND, + argz, argz_len); + } + else + err = errno; + + return err; +} -- cgit v1.2.3