/* IRCfs - IRC FileServ for *nix. * Copyright (C) 2002 Nick 'Zaf' Clifford * For licensing details, refer to the LICENSE file in the source * code directory. */ #include "module.h" #include "file.h" #include "str_hash.h" /* A guess at the maximum number of handlers. * Doesn't need to be right. its for the hash bucket size */ #define GUESS_NUM_HANDLERS 10 MODULE_NAME("file"); MODULE_INIT(file_init); MODULE_DESTROY(file_destroy); MODULE_DEPENDS(); MODULE_REGISTER(file); struct str_hash_table *file_handlers; struct str_hash_table *dir_handlers; POOL pool; int register_file_handler(struct file_handler *fh) { ASSERT_MODULE_LOADED(); str_hash_add(file_handlers, fh->name,fh); return 0; } int register_dir_handler(struct dir_handler *dh) { ASSERT_MODULE_LOADED(); str_hash_add(dir_handlers, dh->name,dh); return 0; } struct file_handler *find_file_handler(const char *name) { struct file_handler *fh; ASSERT_MODULE_LOADED(); fh = str_hash_get(file_handlers, name); return fh; } struct dir_handler *find_dir_handler(const char *name) { struct dir_handler *dh; ASSERT_MODULE_LOADED(); dh = str_hash_get(dir_handlers, name); return dh; } int file_init() { pool = pool_new(NULL); file_handlers = str_hash_create_n(pool,GUESS_NUM_HANDLERS); dir_handlers = str_hash_create_n(pool,GUESS_NUM_HANDLERS); return 0; } int file_destroy() { return 0; } void file_set_app_data(struct file *f, void *appdata) { f->appdata = appdata; } void *file_get_app_data(struct file *f) { return f->appdata; } void dir_set_app_data(struct dir *d, void *appdata) { d->appdata = appdata; } void *dir_get_app_data(struct dir *d) { return d->appdata; }