1 /*- 2 * Copyright (c) 2011 The NetBSD Foundation, Inc. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to The NetBSD Foundation 6 * by David A. Holland. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 * POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef _QUOTA_H_ 31 #define _QUOTA_H_ 32 33 #include <sys/types.h> 34 #include <sys/quota.h> 35 36 struct quotahandle; /* Opaque. */ 37 struct quotacursor; /* Opaque. */ 38 39 /* quota id types (entities being billed) */ 40 #define QUOTA_IDTYPE_USER 0 41 #define QUOTA_IDTYPE_GROUP 1 42 43 /* quota object types (things being limited) */ 44 #define QUOTA_OBJTYPE_BLOCKS 0 45 #define QUOTA_OBJTYPE_FILES 1 46 47 /* id value for "default" */ 48 #define QUOTA_DEFAULTID ((id_t)-1) 49 50 /* limit value for "no limit" */ 51 #define QUOTA_NOLIMIT ((uint64_t)0xffffffffffffffffULL) 52 53 /* time value for "no time" */ 54 #define QUOTA_NOTIME ((time_t)-1) 55 56 57 struct quotakey { 58 int qk_idtype; 59 id_t qk_id; 60 int qk_objtype; 61 }; 62 63 void quotaval_clear(struct quotaval *); 64 65 struct quotahandle *quota_open(const char *); 66 void quota_close(struct quotahandle *); 67 68 const char *quota_getmountpoint(struct quotahandle *); 69 const char *quota_getmountdevice(struct quotahandle *); 70 71 const char *quota_getimplname(struct quotahandle *); 72 73 unsigned quota_getnumidtypes(struct quotahandle *); 74 const char *quota_idtype_getname(struct quotahandle *, int /*idtype*/); 75 76 unsigned quota_getnumobjtypes(struct quotahandle *); 77 const char *quota_objtype_getname(struct quotahandle *, int /*objtype*/); 78 int quota_objtype_isbytes(struct quotahandle *, int /*objtype*/); 79 80 int quota_get(struct quotahandle *, const struct quotakey *, 81 struct quotaval *); 82 83 int quota_put(struct quotahandle *, const struct quotakey *, 84 const struct quotaval *); 85 86 int quota_delete(struct quotahandle *, const struct quotakey *); 87 88 struct quotacursor *quota_opencursor(struct quotahandle *); 89 void quotacursor_close(struct quotacursor *); 90 91 int quotacursor_skipidtype(struct quotacursor *, unsigned /*idtype*/); 92 93 int quotacursor_get(struct quotacursor *, struct quotakey *, 94 struct quotaval *); 95 96 int quotacursor_getn(struct quotacursor *, struct quotakey *, 97 struct quotaval *, unsigned /*maxnum*/); 98 99 int quotacursor_atend(struct quotacursor *); 100 int quotacursor_rewind(struct quotacursor *); 101 102 #endif /* _QUOTA_H_ */ 103