From fbdb58363aae50984d8670f4ef3f68ddc96b32e9 Mon Sep 17 00:00:00 2001
From: "Michael I. Bushnell" <mib@gnu.org>
Date: Fri, 10 May 1996 21:21:19 +0000
Subject: Initial revision

---
 libdiskfs/io-identity.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 libdiskfs/io-identity.c

(limited to 'libdiskfs/io-identity.c')

diff --git a/libdiskfs/io-identity.c b/libdiskfs/io-identity.c
new file mode 100644
index 00000000..6bc6f86c
--- /dev/null
+++ b/libdiskfs/io-identity.c
@@ -0,0 +1,61 @@
+/* libdiskfs implementation of io_identity RPC
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   Written by Michael I. Bushnell, p/BSG.
+
+   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 this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. */
+
+#include "priv.h"
+#include "io_S.h"
+
+/* Implement io_identity as described in <hurd/io.defs>. */
+error_t
+diskfs_S_io_identity (struct protid *cred,
+		      mach_port_t *id,
+		      mach_msg_type_name_t *idtype,
+		      mach_port_t *fsys,
+		      mach_msg_type_name_t *fsystype,
+		      int *fileno)
+{
+  struct node *np;
+  error_t err;
+
+  if (!cred)
+    return EOPNOTSUPP;
+  
+  np = cred->po->np;
+  mutex_lock (&np->lock);
+  
+  if (np->identity == MACH_PORT_NULL)
+    {
+      err = mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
+				&np->identity);
+      if (err)
+	{
+	  mutex_unlock (&np->lock);
+	  return err;
+	}
+    }
+  
+  *id = np->identity;
+  *idtype = MACH_MSG_TYPE_MAKE_SEND;
+  *fsys = diskfs_fsys_identity;
+  *fsystype = MACH_MSG_TYPE_MAKE_SEND;
+  *fileno = np->dn_stat.st_ino;
+  
+  mutex_unlock (&np->lock);
+  return 0;
+}
-- 
cgit v1.2.3