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