--- /dev/null
+/** The columns of the id table. */
+enum user_table_columns {
+ /** The numer of the directory. */
+ UT_DIR_NUM,
+ /** The number of bytes of all regular files in this dir owned by this id. */
+ UT_BYTES,
+ /** The number of files in this dir owned by this id. */
+ UT_FILES,
+ /** Number of columns in this table. */
+ NUM_UT_COLUMNS
+};
+
+/** Information about one admissible user. */
+struct user_info {
+ /** User ID. */
+ uint32_t uid;
+ /** \sa enum uid_info_flags. */
+ uint32_t flags;
+ /** The user name. */
+ char *pw_name;
+ /** The user table of this user.*/
+ struct osl_table *table;
+ /** Total number of files owned by this user. */
+ uint64_t files;
+ /** Total number of bytes owned by this user. */
+ uint64_t bytes;
+ /** Total number of directories that contain at least one file */
+ uint64_t dirs;
+ /** The description of the user table. */
+ struct osl_table_description *desc;
+};
+
+/** An opaque struct that contains info about which users are admissible. */
+struct uid_range;
+
+enum search_uid_flags {
+ OPEN_USER_TABLE = 1,
+ CREATE_USER_TABLE = 2,
+};
+int search_uid(uint32_t uid, struct uid_range *urs,
+ enum search_uid_flags flags, struct user_info **ui_ptr);
+
+int read_uid_file(struct uid_range *admissible_uids);
+int write_uid_file(void);
+
+void create_hash_table(unsigned bits);
+void sort_hash_table(int (*comp)(const void *, const void *));
+void free_hash_table(void);
+
+int for_each_admissible_user(int (*func)(struct user_info *, void *),
+ void *data);
+int parse_uid_arg(const char *orig_arg, struct uid_range **ur);
+void close_user_tables(void);