obsd44-pass1-20090123
[openafs.git] / src / afs / OBSD / osi_misc.c
1 /* 
2  * osi_misc.c
3  *
4  * $Id$
5  */
6
7 /*
8 copyright 2002
9 the regents of the university of michigan
10 all rights reserved
11
12 permission is granted to use, copy, create derivative works 
13 and redistribute this software and such derivative works 
14 for any purpose, so long as the name of the university of 
15 michigan is not used in any advertising or publicity 
16 pertaining to the use or distribution of this software 
17 without specific, written prior authorization.  if the 
18 above copyright notice or any other identification of the 
19 university of michigan is included in any copy of any 
20 portion of this software, then the disclaimer below must 
21 also be included.
22
23 this software is provided as is, without representation 
24 from the university of michigan as to its fitness for any 
25 purpose, and without warranty by the university of 
26 michigan of any kind, either express or implied, including 
27 without limitation the implied warranties of 
28 merchantability and fitness for a particular purpose. the 
29 regents of the university of michigan shall not be liable 
30 for any damages, including special, indirect, incidental, or 
31 consequential damages, with respect to any claim arising 
32 out of or in connection with the use of the software, even 
33 if it has been or is hereafter advised of the possibility of 
34 such damages.
35 */
36
37 /*
38  * Copyright 2000, International Business Machines Corporation and others.
39  * All Rights Reserved.
40  * 
41  * This software has been released under the terms of the IBM Public
42  * License.  For details, see the LICENSE file in the top-level source
43  * directory or online at http://www.openafs.org/dl/license10.html
44  */
45
46 #include <afsconfig.h>
47 #include "afs/param.h"
48
49 RCSID
50     ("$Header$");
51
52 #include "afs/sysincludes.h"    /* Standard vendor system headers */
53 #include "afs/afsincludes.h"    /* Afs-based standard headers */
54 #include <sys/types.h>
55 #include <sys/malloc.h>
56
57 /*
58  * afs_suser() returns true if the caller is superuser, false otherwise.
59  *
60  * Note that it must NOT set errno.
61  */
62
63 /* 
64  * OpenBSD version of afs_osi_suser() by Jim Rees.
65  * See osi_machdep.h for afs_suser macro. It simply calls afs_osi_suser()
66  * with the creds of the current process.
67  */
68
69 int
70 afs_osi_suser(void *credp)
71 {
72 #ifdef AFS_OBSD35_ENV
73     return (suser_ucred((struct ucred *)credp) ? 0 : 1);
74 #else
75     return (suser((struct ucred *)credp, &curproc->p_acflag) ? 0 : 1);
76 #endif
77 }
78
79 /*
80  * reworked for netbsd and openbsd at 4.0/4.4
81  */
82
83 #if defined(AFS_OBSD42_ENV)
84 /* ripped out MALLOC/FREE */
85
86 void *
87 osi_obsd_Alloc(size_t asize, int cansleep)
88 {
89   void *p;
90   int glocked;
91
92   if (cansleep) {
93     glocked = ISAFS_GLOCK();
94     if (glocked)
95       AFS_GUNLOCK();
96     p = malloc(asize, M_AFSGENERIC, M_WAITOK);
97     if (glocked)
98       AFS_GLOCK();
99   } else {
100     p = malloc(asize, M_AFSGENERIC, M_NOWAIT);
101   }
102
103   return (p);
104 }
105
106 void
107 osi_obsd_Free(void *p, size_t asize)
108 {
109   free(p, M_AFSGENERIC);
110 }
111
112 #else
113 void *
114 osi_obsd_Alloc(size_t asize, int cansleep)
115 {
116   void *p;
117   int glocked;
118
119   if (cansleep) {
120     glocked = ISAFS_GLOCK();
121     if (glocked)
122       AFS_GUNLOCK();
123     MALLOC(p, void *, asize, M_AFSGENERIC, M_WAITOK);
124     if (glocked)
125       AFS_GLOCK();
126   } else {
127     MALLOC(p, void *, asize, M_AFSGENERIC, M_NOWAIT);
128   }
129
130   return (p);
131 }
132
133 void
134 osi_obsd_Free(void *p, size_t asize)
135 {
136   FREE(p, M_AFSGENERIC);
137 }
138 #endif
139
140 #if 0 /* XXX */
141 /* I speculate this usage may be more correct than definitions
142  * in afs_osi_alloc.c, which I discarded successfully for FreeBSD 7+,
143  * and am trying to discard for NetBSD 4.x, but until tested, I'm
144  * not rocking the boat.  Matt.
145  */
146    
147 void
148 osi_FreeLargeSpace(void *p)
149 {
150   osi_obsd_Free(p, 0);
151 }
152
153 void
154 osi_FreeSmallSpace(void *p)
155 {
156   osi_obsd_Free(p, 0);
157 }
158
159 void *
160 osi_AllocLargeSpace(size_t size)
161 {
162   AFS_ASSERT_GLOCK();
163   AFS_STATCNT(osi_AllocLargeSpace);
164   return (osi_obsd_Alloc(size, 1));
165 }
166 #endif
167
168 int
169 afs_syscall_icreate(dev, near_inode, param1, param2, param3, param4, retval)
170      long *retval;
171      long dev, near_inode, param1, param2, param3, param4;
172 {
173     return EINVAL;
174 }
175
176 int
177 afs_syscall_iopen(dev, inode, usrmod, retval)
178      long *retval;
179      int dev, inode, usrmod;
180 {
181     return EINVAL;
182 }
183
184 int
185 afs_syscall_iincdec(dev, inode, inode_p1, amount)
186      int dev, inode, inode_p1, amount;
187 {
188     return EINVAL;
189 }