Mon Jan 30 16:44:09 2012 UTC ()
Add quota_getrestrictions() to report the semantic restrictions
associated with a particular quotahandle.


(dholland)
diff -r1.3 -r1.4 src/include/quota.h
diff -r1.8 -r1.9 src/lib/libquota/quota_proplib.c
diff -r1.4 -r1.5 src/lib/libquota/quota_schema.c
diff -r1.10 -r1.11 src/lib/libquota/quotapvt.h

cvs diff -r1.3 -r1.4 src/include/quota.h (expand / switch to unified diff)

--- src/include/quota.h 2012/01/29 06:40:57 1.3
+++ src/include/quota.h 2012/01/30 16:44:08 1.4
@@ -36,26 +36,27 @@ @@ -36,26 +36,27 @@
36struct quotahandle; /* Opaque. */ 36struct quotahandle; /* Opaque. */
37struct quotacursor; /* Opaque. */ 37struct quotacursor; /* Opaque. */
38 38
39 39
40void quotaval_clear(struct quotaval *); 40void quotaval_clear(struct quotaval *);
41 41
42struct quotahandle *quota_open(const char *); 42struct quotahandle *quota_open(const char *);
43void quota_close(struct quotahandle *); 43void quota_close(struct quotahandle *);
44 44
45const char *quota_getmountpoint(struct quotahandle *); 45const char *quota_getmountpoint(struct quotahandle *);
46const char *quota_getmountdevice(struct quotahandle *); 46const char *quota_getmountdevice(struct quotahandle *);
47 47
48const char *quota_getimplname(struct quotahandle *); 48const char *quota_getimplname(struct quotahandle *);
 49unsigned quota_getrestrictions(struct quotahandle *);
49 50
50unsigned quota_getnumidtypes(struct quotahandle *); 51unsigned quota_getnumidtypes(struct quotahandle *);
51const char *quota_idtype_getname(struct quotahandle *, int /*idtype*/); 52const char *quota_idtype_getname(struct quotahandle *, int /*idtype*/);
52 53
53unsigned quota_getnumobjtypes(struct quotahandle *); 54unsigned quota_getnumobjtypes(struct quotahandle *);
54const char *quota_objtype_getname(struct quotahandle *, int /*objtype*/); 55const char *quota_objtype_getname(struct quotahandle *, int /*objtype*/);
55int quota_objtype_isbytes(struct quotahandle *, int /*objtype*/); 56int quota_objtype_isbytes(struct quotahandle *, int /*objtype*/);
56 57
57int quota_get(struct quotahandle *, const struct quotakey *, 58int quota_get(struct quotahandle *, const struct quotakey *,
58 struct quotaval *); 59 struct quotaval *);
59 60
60int quota_put(struct quotahandle *, const struct quotakey *, 61int quota_put(struct quotahandle *, const struct quotakey *,
61 const struct quotaval *); 62 const struct quotaval *);

cvs diff -r1.8 -r1.9 src/lib/libquota/Attic/quota_proplib.c (expand / switch to unified diff)

--- src/lib/libquota/Attic/quota_proplib.c 2012/01/30 06:00:49 1.8
+++ src/lib/libquota/Attic/quota_proplib.c 2012/01/30 16:44:08 1.9
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: quota_proplib.c,v 1.8 2012/01/30 06:00:49 dholland Exp $ */ 1/* $NetBSD: quota_proplib.c,v 1.9 2012/01/30 16:44:08 dholland Exp $ */
2/*- 2/*-
3 * Copyright (c) 2011 Manuel Bouyer 3 * Copyright (c) 2011 Manuel Bouyer
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the 12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution. 13 * documentation and/or other materials provided with the distribution.
14 * 14 *
@@ -16,27 +16,27 @@ @@ -16,27 +16,27 @@
16 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 16 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE. 25 * POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28#include <sys/cdefs.h> 28#include <sys/cdefs.h>
29__RCSID("$NetBSD: quota_proplib.c,v 1.8 2012/01/30 06:00:49 dholland Exp $"); 29__RCSID("$NetBSD: quota_proplib.c,v 1.9 2012/01/30 16:44:08 dholland Exp $");
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32#include <string.h> 32#include <string.h>
33#include <limits.h> 33#include <limits.h>
34#include <errno.h> 34#include <errno.h>
35#include <err.h> 35#include <err.h>
36 36
37#include <quota.h> 37#include <quota.h>
38#include "quotapvt.h" 38#include "quotapvt.h"
39 39
40#include <quota/quotaprop.h> 40#include <quota/quotaprop.h>
41#include <quota/quota.h> 41#include <quota/quota.h>
42 42
@@ -171,26 +171,44 @@ __quota_proplib_getimplname(struct quota @@ -171,26 +171,44 @@ __quota_proplib_getimplname(struct quota
171 171
172 if (__quota_proplib_getversion(qh, &version) < 0) { 172 if (__quota_proplib_getversion(qh, &version) < 0) {
173 return NULL; 173 return NULL;
174 } 174 }
175 switch (version) { 175 switch (version) {
176 case 1: return "ffs quota1"; 176 case 1: return "ffs quota1";
177 case 2: return "ffs quota2"; 177 case 2: return "ffs quota2";
178 default: break; 178 default: break;
179 } 179 }
180 return "unknown"; 180 return "unknown";
181} 181}
182 182
183unsigned 183unsigned
 184__quota_proplib_getrestrictions(struct quotahandle *qh)
 185{
 186 int8_t version;
 187
 188 if (__quota_proplib_getversion(qh, &version) < 0) {
 189 /* XXX no decent way to report an error here */
 190 return 0;
 191 }
 192 switch (version) {
 193 case 1: return QUOTA_RESTRICT_NEEDSQUOTACHECK |
 194 QUOTA_RESTRICT_UNIFORMGRACE |
 195 QUOTA_RESTRICT_32BIT;
 196 default: break;
 197 }
 198 return 0;
 199}
 200
 201unsigned
184__quota_proplib_getnumidtypes(void) 202__quota_proplib_getnumidtypes(void)
185{ 203{
186 return QUOTA_NCLASS; 204 return QUOTA_NCLASS;
187} 205}
188 206
189const char * 207const char *
190__quota_proplib_idtype_getname(int idtype) 208__quota_proplib_idtype_getname(int idtype)
191{ 209{
192 if (idtype < 0 || idtype >= QUOTA_NCLASS) { 210 if (idtype < 0 || idtype >= QUOTA_NCLASS) {
193 return NULL; 211 return NULL;
194 } 212 }
195 return ufs_quota_class_names[idtype]; 213 return ufs_quota_class_names[idtype];
196} 214}

cvs diff -r1.4 -r1.5 src/lib/libquota/quota_schema.c (expand / switch to unified diff)

--- src/lib/libquota/quota_schema.c 2012/01/25 17:43:37 1.4
+++ src/lib/libquota/quota_schema.c 2012/01/30 16:44:09 1.5
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: quota_schema.c,v 1.4 2012/01/25 17:43:37 dholland Exp $ */ 1/* $NetBSD: quota_schema.c,v 1.5 2012/01/30 16:44:09 dholland Exp $ */
2/*- 2/*-
3 * Copyright (c) 2011 The NetBSD Foundation, Inc. 3 * Copyright (c) 2011 The NetBSD Foundation, Inc.
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * This code is derived from software contributed to The NetBSD Foundation 6 * This code is derived from software contributed to The NetBSD Foundation
7 * by David A. Holland. 7 * by David A. Holland.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
11 * are met: 11 * are met:
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright 14 * 2. Redistributions in binary form must reproduce the above copyright
@@ -19,27 +19,27 @@ @@ -19,27 +19,27 @@
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE. 28 * POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31#include <sys/cdefs.h> 31#include <sys/cdefs.h>
32__RCSID("$NetBSD: quota_schema.c,v 1.4 2012/01/25 17:43:37 dholland Exp $"); 32__RCSID("$NetBSD: quota_schema.c,v 1.5 2012/01/30 16:44:09 dholland Exp $");
33 33
34#include <sys/types.h> 34#include <sys/types.h>
35#include <sys/statvfs.h> 35#include <sys/statvfs.h>
36#include <stdlib.h> 36#include <stdlib.h>
37#include <string.h> 37#include <string.h>
38#include <errno.h> 38#include <errno.h>
39 39
40#include <quota.h> 40#include <quota.h>
41#include "quotapvt.h" 41#include "quotapvt.h"
42 42
43/* 43/*
44 * Functions for getting information about idtypes and such. 44 * Functions for getting information about idtypes and such.
45 */ 45 */
@@ -55,114 +55,131 @@ quota_getimplname(struct quotahandle *qh @@ -55,114 +55,131 @@ quota_getimplname(struct quotahandle *qh
55 case QUOTA_MODE_PROPLIB: 55 case QUOTA_MODE_PROPLIB:
56 return __quota_proplib_getimplname(qh); 56 return __quota_proplib_getimplname(qh);
57 57
58 case QUOTA_MODE_OLDFILES: 58 case QUOTA_MODE_OLDFILES:
59 return __quota_proplib_getimplname(qh); 59 return __quota_proplib_getimplname(qh);
60 60
61 default: 61 default:
62 break; 62 break;
63 } 63 }
64 errno = EINVAL; 64 errno = EINVAL;
65 return NULL; 65 return NULL;
66} 66}
67 67
68/* ARGSUSED */ 68unsigned
 69quota_getrestrictions(struct quotahandle *qh)
 70{
 71 switch (qh->qh_mode) {
 72 case QUOTA_MODE_NFS:
 73 /* XXX this should maybe report the rquotad protocol version */
 74 return QUOTA_RESTRICT_32BIT | QUOTA_RESTRICT_READONLY;
 75
 76 case QUOTA_MODE_PROPLIB:
 77 return __quota_proplib_getrestrictions(qh);
 78
 79 case QUOTA_MODE_OLDFILES:
 80 return QUOTA_RESTRICT_NEEDSQUOTACHECK |
 81 QUOTA_RESTRICT_UNIFORMGRACE |
 82 QUOTA_RESTRICT_32BIT;
 83 default:
 84 break;
 85 }
 86 errno = EINVAL;
 87 return 0;
 88}
 89
69unsigned 90unsigned
70quota_getnumidtypes(struct quotahandle *qh) 91quota_getnumidtypes(struct quotahandle *qh)
71{ 92{
72 switch (qh->qh_mode) { 93 switch (qh->qh_mode) {
73 case QUOTA_MODE_NFS: 94 case QUOTA_MODE_NFS:
74 /* XXX for old rquotad versions this should be 1... */ 95 /* XXX for old rquotad versions this should be 1... */
75 return 2; 96 return 2;
76 97
77 case QUOTA_MODE_PROPLIB: 98 case QUOTA_MODE_PROPLIB:
78 return __quota_proplib_getnumidtypes(); 99 return __quota_proplib_getnumidtypes();
79 100
80 case QUOTA_MODE_OLDFILES: 101 case QUOTA_MODE_OLDFILES:
81 default: 102 default:
82 break; 103 break;
83 } 104 }
84 return 2; 105 return 2;
85} 106}
86 107
87/* ARGSUSED */ 
88const char * 108const char *
89quota_idtype_getname(struct quotahandle *qh, int idtype) 109quota_idtype_getname(struct quotahandle *qh, int idtype)
90{ 110{
91 switch (qh->qh_mode) { 111 switch (qh->qh_mode) {
92 case QUOTA_MODE_PROPLIB: 112 case QUOTA_MODE_PROPLIB:
93 return __quota_proplib_idtype_getname(idtype); 113 return __quota_proplib_idtype_getname(idtype);
94 114
95 case QUOTA_MODE_NFS: 115 case QUOTA_MODE_NFS:
96 case QUOTA_MODE_OLDFILES: 116 case QUOTA_MODE_OLDFILES:
97 break; 117 break;
98 } 118 }
99 119
100 switch (idtype) { 120 switch (idtype) {
101 case QUOTA_IDTYPE_USER: 121 case QUOTA_IDTYPE_USER:
102 return "user"; 122 return "user";
103 123
104 case QUOTA_IDTYPE_GROUP: 124 case QUOTA_IDTYPE_GROUP:
105 return "group"; 125 return "group";
106 126
107 default: 127 default:
108 break; 128 break;
109 } 129 }
110 errno = EINVAL; 130 errno = EINVAL;
111 return "???"; 131 return "???";
112} 132}
113 133
114/* ARGSUSED */ 
115unsigned 134unsigned
116quota_getnumobjtypes(struct quotahandle *qh) 135quota_getnumobjtypes(struct quotahandle *qh)
117{ 136{
118 switch (qh->qh_mode) { 137 switch (qh->qh_mode) {
119 case QUOTA_MODE_PROPLIB: 138 case QUOTA_MODE_PROPLIB:
120 return __quota_proplib_getnumobjtypes(); 139 return __quota_proplib_getnumobjtypes();
121 140
122 case QUOTA_MODE_NFS: 141 case QUOTA_MODE_NFS:
123 case QUOTA_MODE_OLDFILES: 142 case QUOTA_MODE_OLDFILES:
124 default: 143 default:
125 break; 144 break;
126 } 145 }
127 return 2; 146 return 2;
128} 147}
129 148
130/* ARGSUSED */ 
131const char * 149const char *
132quota_objtype_getname(struct quotahandle *qh, int objtype) 150quota_objtype_getname(struct quotahandle *qh, int objtype)
133{ 151{
134 switch (qh->qh_mode) { 152 switch (qh->qh_mode) {
135 case QUOTA_MODE_PROPLIB: 153 case QUOTA_MODE_PROPLIB:
136 return __quota_proplib_objtype_getname(objtype); 154 return __quota_proplib_objtype_getname(objtype);
137 case QUOTA_MODE_NFS: 155 case QUOTA_MODE_NFS:
138 case QUOTA_MODE_OLDFILES: 156 case QUOTA_MODE_OLDFILES:
139 default: 157 default:
140 break; 158 break;
141 } 159 }
142 160
143 switch (objtype) { 161 switch (objtype) {
144 case QUOTA_OBJTYPE_BLOCKS: 162 case QUOTA_OBJTYPE_BLOCKS:
145 return "block"; 163 return "block";
146 case QUOTA_OBJTYPE_FILES: 164 case QUOTA_OBJTYPE_FILES:
147 return "file"; 165 return "file";
148 default: 166 default:
149 break; 167 break;
150 } 168 }
151 errno = EINVAL; 169 errno = EINVAL;
152 return "???"; /* ? */ 170 return "???"; /* ? */
153} 171}
154 172
155/* ARGSUSED */ 
156int 173int
157quota_objtype_isbytes(struct quotahandle *qh, int objtype) 174quota_objtype_isbytes(struct quotahandle *qh, int objtype)
158{ 175{
159 switch (qh->qh_mode) { 176 switch (qh->qh_mode) {
160 case QUOTA_MODE_PROPLIB: 177 case QUOTA_MODE_PROPLIB:
161 return __quota_proplib_objtype_isbytes(objtype); 178 return __quota_proplib_objtype_isbytes(objtype);
162 case QUOTA_MODE_NFS: 179 case QUOTA_MODE_NFS:
163 case QUOTA_MODE_OLDFILES: 180 case QUOTA_MODE_OLDFILES:
164 default: 181 default:
165 break; 182 break;
166 } 183 }
167 184
168 switch (objtype) { 185 switch (objtype) {

cvs diff -r1.10 -r1.11 src/lib/libquota/quotapvt.h (expand / switch to unified diff)

--- src/lib/libquota/quotapvt.h 2012/01/25 17:43:37 1.10
+++ src/lib/libquota/quotapvt.h 2012/01/30 16:44:09 1.11
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: quotapvt.h,v 1.10 2012/01/25 17:43:37 dholland Exp $ */ 1/* $NetBSD: quotapvt.h,v 1.11 2012/01/30 16:44:09 dholland Exp $ */
2/*- 2/*-
3 * Copyright (c) 2011 The NetBSD Foundation, Inc. 3 * Copyright (c) 2011 The NetBSD Foundation, Inc.
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * This code is derived from software contributed to The NetBSD Foundation 6 * This code is derived from software contributed to The NetBSD Foundation
7 * by David A. Holland. 7 * by David A. Holland.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
11 * are met: 11 * are met:
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright 14 * 2. Redistributions in binary form must reproduce the above copyright
@@ -48,26 +48,27 @@ struct quotahandle { @@ -48,26 +48,27 @@ struct quotahandle {
48struct quotacursor { 48struct quotacursor {
49 struct quotahandle *qc_qh; 49 struct quotahandle *qc_qh;
50 enum { QC_PROPLIB, QC_OLDFILES } qc_type; 50 enum { QC_PROPLIB, QC_OLDFILES } qc_type;
51 union { 51 union {
52 struct proplib_quotacursor *qc_proplib; 52 struct proplib_quotacursor *qc_proplib;
53 struct oldfiles_quotacursor *qc_oldfiles; 53 struct oldfiles_quotacursor *qc_oldfiles;
54 } u; 54 } u;
55}; 55};
56 56
57 57
58/* proplib kernel interface */ 58/* proplib kernel interface */
59int __quota_proplib_getversion(struct quotahandle *qh, int8_t *version_ret); 59int __quota_proplib_getversion(struct quotahandle *qh, int8_t *version_ret);
60const char *__quota_proplib_getimplname(struct quotahandle *); 60const char *__quota_proplib_getimplname(struct quotahandle *);
 61unsigned __quota_proplib_getrestrictions(struct quotahandle *);
61unsigned __quota_proplib_getnumidtypes(void); 62unsigned __quota_proplib_getnumidtypes(void);
62const char *__quota_proplib_idtype_getname(int idtype); 63const char *__quota_proplib_idtype_getname(int idtype);
63unsigned __quota_proplib_getnumobjtypes(void); 64unsigned __quota_proplib_getnumobjtypes(void);
64const char *__quota_proplib_objtype_getname(int objtype); 65const char *__quota_proplib_objtype_getname(int objtype);
65int __quota_proplib_objtype_isbytes(int objtype); 66int __quota_proplib_objtype_isbytes(int objtype);
66int __quota_proplib_get(struct quotahandle *qh, const struct quotakey *qk, 67int __quota_proplib_get(struct quotahandle *qh, const struct quotakey *qk,
67 struct quotaval *qv); 68 struct quotaval *qv);
68int __quota_proplib_put(struct quotahandle *qh, const struct quotakey *qk, 69int __quota_proplib_put(struct quotahandle *qh, const struct quotakey *qk,
69 const struct quotaval *qv); 70 const struct quotaval *qv);
70int __quota_proplib_delete(struct quotahandle *qh, const struct quotakey *qk); 71int __quota_proplib_delete(struct quotahandle *qh, const struct quotakey *qk);
71struct proplib_quotacursor *__quota_proplib_cursor_create(void); 72struct proplib_quotacursor *__quota_proplib_cursor_create(void);
72void __quota_proplib_cursor_destroy(struct proplib_quotacursor *); 73void __quota_proplib_cursor_destroy(struct proplib_quotacursor *);
73int __quota_proplib_cursor_skipidtype(struct proplib_quotacursor *, 74int __quota_proplib_cursor_skipidtype(struct proplib_quotacursor *,