/** * Initializes the nffs memory and data structures. This must be called before * any nffs operations are attempted. * * @return 0 on success; nonzero on error. */ int nffs_init(void) { int rc; nffs_config_init(); nffs_cache_clear(); rc = os_mutex_init(&nffs_mutex); if (rc != 0) { return NFFS_EOS; } free(nffs_file_mem); nffs_file_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_files, sizeof (struct nffs_file))); if (nffs_file_mem == NULL) { return NFFS_ENOMEM; } free(nffs_inode_mem); nffs_inode_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_inodes, sizeof (struct nffs_inode_entry))); if (nffs_inode_mem == NULL) { return NFFS_ENOMEM; } free(nffs_block_entry_mem); nffs_block_entry_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_blocks, sizeof (struct nffs_hash_entry))); if (nffs_block_entry_mem == NULL) { return NFFS_ENOMEM; } free(nffs_cache_inode_mem); nffs_cache_inode_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_cache_inodes, sizeof (struct nffs_cache_inode))); if (nffs_cache_inode_mem == NULL) { return NFFS_ENOMEM; } free(nffs_cache_block_mem); nffs_cache_block_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_cache_blocks, sizeof (struct nffs_cache_block))); if (nffs_cache_block_mem == NULL) { return NFFS_ENOMEM; } rc = nffs_misc_reset(); if (rc != 0) { return rc; } return 0; }
/** * Initializes internal nffs memory and data structures. This must be called * before any nffs operations are attempted. * * @return 0 on success; nonzero on error. */ int nffs_init(void) { int rc; nffs_config_init(); nffs_cache_clear(); rc = os_mutex_init(&nffs_mutex); if (rc != 0) { return FS_EOS; } free(nffs_file_mem); nffs_file_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_files, sizeof (struct nffs_file))); if (nffs_file_mem == NULL) { return FS_ENOMEM; } free(nffs_inode_mem); nffs_inode_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_inodes, sizeof (struct nffs_inode_entry))); if (nffs_inode_mem == NULL) { return FS_ENOMEM; } free(nffs_block_entry_mem); nffs_block_entry_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_blocks, sizeof (struct nffs_hash_entry))); if (nffs_block_entry_mem == NULL) { return FS_ENOMEM; } free(nffs_cache_inode_mem); nffs_cache_inode_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_cache_inodes, sizeof (struct nffs_cache_inode))); if (nffs_cache_inode_mem == NULL) { return FS_ENOMEM; } free(nffs_cache_block_mem); nffs_cache_block_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_cache_blocks, sizeof (struct nffs_cache_block))); if (nffs_cache_block_mem == NULL) { return FS_ENOMEM; } free(nffs_dir_mem); nffs_dir_mem = malloc( OS_MEMPOOL_BYTES(nffs_config.nc_num_dirs, sizeof (struct nffs_dir))); if (nffs_dir_mem == NULL) { return FS_ENOMEM; } log_init(); log_console_handler_init(&nffs_log_console_handler); log_register("nffs", &nffs_log, &nffs_log_console_handler); rc = nffs_misc_reset(); if (rc != 0) { return rc; } fs_register(&nffs_ops); return 0; }