usr/src/lib/libc/port/sys/sharefs.c
author th199096
Mon, 02 Apr 2007 21:38:04 -0700
changeset 3957 86c9dda5df37
child 4995 3e3d6de427e8
permissions -rw-r--r--
PSARC/2007/052 In-kernel Sharetab 6371468 /etc/dfs/sharetab should be a mntfs style file
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3957
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     1
/*
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     2
 * CDDL HEADER START
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     3
 *
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     7
 *
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    11
 * and limitations under the License.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    12
 *
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    18
 *
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    19
 * CDDL HEADER END
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    20
 */
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    21
/*
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    23
 * Use is subject to license terms.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    24
 */
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    25
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    26
#pragma ident	"%Z%%M%	%I%	%E% SMI"
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    27
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    28
#pragma weak sharefs = _sharefs
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    29
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    30
#include "synonyms.h"
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    31
#include <sys/types.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    32
#include <sys/types32.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    33
#include <rpc/types.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    34
#include <sys/vfs.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    35
#include <strings.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    36
#include <sharefs/share.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    37
#include <sys/syscall.h>
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    38
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    39
#include "libc.h"
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    40
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    41
#define	SMAX(i, j)		\
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    42
	if ((j) > (i)) {	\
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    43
		(i) = (j);	\
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    44
	}
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    45
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    46
int
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    47
sharefs(enum sharefs_sys_op opcode, struct share *sh)
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    48
{
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    49
	uint32_t		i, j;
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    50
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    51
	/*
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    52
	 * We need to know the total size of the share
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    53
	 * and also the largest element size. This is to
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    54
	 * get enough buffer space to transfer from
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    55
	 * userland to kernel.
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    56
	 */
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    57
	i = (sh->sh_path ? strlen(sh->sh_path) : 0);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    58
	sh->sh_size = i;
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    59
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    60
	j = (sh->sh_res ? strlen(sh->sh_res) : 0);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    61
	sh->sh_size += j;
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    62
	SMAX(i, j);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    63
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    64
	j = (sh->sh_fstype ? strlen(sh->sh_fstype) : 0);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    65
	sh->sh_size += j;
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    66
	SMAX(i, j);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    67
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    68
	j = (sh->sh_opts ? strlen(sh->sh_opts) : 0);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    69
	sh->sh_size += j;
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    70
	SMAX(i, j);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    71
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    72
	j = (sh->sh_descr ? strlen(sh->sh_descr) : 0);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    73
	sh->sh_size += j;
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    74
	SMAX(i, j);
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    75
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    76
	return (syscall(SYS_sharefs, opcode, sh, i));
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents:
diff changeset
    77
}