Category : Recently Uploaded Files
Archive   : EXT2TOOL.ZIP
Filename : BITMAPS.C

 
Output of file : BITMAPS.C contained in archive : EXT2TOOL.ZIP
/*
* bitmaps.c --- routines to read, write, and manipulate the inode and
* block bitmaps.
*
* Copyright (C) 1993 Theodore Ts'o. This file may be redistributed
* under the terms of the GNU Public License.
*/

#include
#include
#include
#include
#include
#include
#include
#include
#include

#include

#include "ext2fs.h"

errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs,
const char *descr,
ext2fs_inode_bitmap *ret)
{
ext2fs_inode_bitmap bitmap;
int size;

EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);

fs->write_bitmaps = ext2fs_write_bitmaps;

bitmap = malloc(sizeof(struct ext2fs_struct_inode_bitmap));
if (!bitmap)
return ENOMEM;

bitmap->magic = EXT2_ET_MAGIC_INODE_BITMAP;
bitmap->fs = fs;
bitmap->start = 1;
bitmap->end = fs->super->s_inodes_count;
bitmap->real_end = (EXT2_INODES_PER_GROUP(fs->super)
* fs->group_desc_count);
if (descr) {
bitmap->description = malloc(strlen(descr)+1);
if (!bitmap->description) {
free(bitmap);
return ENOMEM;
}
strcpy(bitmap->description, descr);
} else
bitmap->description = 0;

size = ((bitmap->real_end - bitmap->start) / 8) + 1;
bitmap->bitmap = malloc(size);
if (!bitmap->bitmap) {
free(bitmap->description);
free(bitmap);
return ENOMEM;
}

memset(bitmap->bitmap, 0, size);
*ret = bitmap;
return 0;
}

errcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs,
const char *descr,
ext2fs_block_bitmap *ret)
{
ext2fs_block_bitmap bitmap;
int size;

EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);

fs->write_bitmaps = ext2fs_write_bitmaps;

bitmap = malloc(sizeof(struct ext2fs_struct_inode_bitmap));
if (!bitmap)
return ENOMEM;

bitmap->magic = EXT2_ET_MAGIC_BLOCK_BITMAP;
bitmap->fs = fs;
bitmap->start = fs->super->s_first_data_block;
bitmap->end = fs->super->s_blocks_count-1;
bitmap->real_end = (EXT2_BLOCKS_PER_GROUP(fs->super)
* fs->group_desc_count)-1 + bitmap->start;
if (descr) {
bitmap->description = malloc(strlen(descr)+1);
if (!bitmap->description) {
free(bitmap);
return ENOMEM;
}
strcpy(bitmap->description, descr);
} else
bitmap->description = 0;

size = ((bitmap->real_end - bitmap->start) / 8) + 1;
bitmap->bitmap = malloc(size);
if (!bitmap->bitmap) {
free(bitmap->description);
free(bitmap);
return ENOMEM;
}

memset(bitmap->bitmap, 0, size);
*ret = bitmap;
return 0;
}

errcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap,
ino_t end, ino_t *oend)
{
EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_INODE_BITMAP);

if (end > bitmap->real_end)
return EXT2_ET_FUDGE_INODE_BITMAP_END;
if (oend)
*oend = bitmap->end;
bitmap->end = end;
return 0;
}

errcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap,
blk_t end, blk_t *oend)
{
EXT2_CHECK_MAGIC(bitmap, EXT2_ET_MAGIC_BLOCK_BITMAP);

if (end > bitmap->real_end)
return EXT2_ET_FUDGE_BLOCK_BITMAP_END;
if (oend)
*oend = bitmap->end;
bitmap->end = end;
return 0;
}

void ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap)
{
if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP))
return;

memset(bitmap->bitmap, 0,
((bitmap->real_end - bitmap->start) / 8) + 1);
}

void ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap)
{
if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP))
return;

memset(bitmap->bitmap, 0,
((bitmap->real_end - bitmap->start) / 8) + 1);
}

void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap)
{
if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP))
return;

bitmap->magic = 0;
if (bitmap->description) {
free(bitmap->description);
bitmap->description = 0;
}
if (bitmap->bitmap) {
free(bitmap->bitmap);
bitmap->bitmap = 0;
}
free(bitmap);
}

void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap)
{
if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP))
return;

bitmap->magic = 0;
if (bitmap->description) {
free(bitmap->description);
bitmap->description = 0;
}
if (bitmap->bitmap) {
free(bitmap->bitmap);
bitmap->bitmap = 0;
}
free(bitmap);
}



  3 Responses to “Category : Recently Uploaded Files
Archive   : EXT2TOOL.ZIP
Filename : BITMAPS.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/