Example #1
0
int main() {
  sample_buffer_init(sb, 3);
  assert(sample_buffer_avg(sb) == 0);
  sample_buffer_write(sb, 10);
  sample_buffer_write(sb, 10);
  sample_buffer_write(sb, 10);
  sample_buffer_write(sb, 10);
  sample_buffer_write(sb, 1000);
  sample_buffer_write(sb, 2000);
  sample_buffer_write(sb, 4000);
  dump_sb(sb);
  assert(sample_buffer_avg(sb) == 2333);

  sample_buffer_init(sb, 8);
  assert(sample_buffer_avg(sb) == 0);
  sample_buffer_write(sb,  100);
  sample_buffer_write(sb,  200);
  sample_buffer_write(sb,  150);
  sample_buffer_write(sb, 6000);
  sample_buffer_write(sb, 8000);
  dump_sb(sb);
  assert(sample_buffer_avg_recent(sb,  4000) == 8000);
  assert(sample_buffer_avg_recent(sb,  8000) == 8000);
  assert(sample_buffer_avg_recent(sb,  8001) == 7000);
  assert(sample_buffer_avg_recent(sb, 14010) == 4716);

  return 0;
}
Example #2
0
File: main.c Project: draekko/exfat
int main(int argc, char* argv[])
{
	int opt;
	const char* spec = NULL;
	bool sb_only = false;
	bool used_sectors = false;

	printf("dumpexfat %s\n", VERSION);

	while ((opt = getopt(argc, argv, "suV")) != -1)
	{
		switch (opt)
		{
		case 's':
			sb_only = true;
			break;
		case 'u':
			used_sectors = true;
			break;
		case 'V':
			puts("Copyright (C) 2011-2016  Andrew Nayenko");
			return 0;
		default:
			usage(argv[0]);
		}
	}
	if (argc - optind != 1)
		usage(argv[0]);
	spec = argv[optind];

	if (sb_only)
		return dump_sb(spec);

	return dump_full(spec, used_sectors);
}
Example #3
0
// Mount an e2fs filesystem on the given partition.
// Return 0 if successful.
//
static int
e2fs_mount(partition_t *part, e2fs_desc_t *e2fs)
{
    int sb_block = 1;
    cyg_uint32  sb_buf[E2FS_MIN_BLOCK_SIZE/sizeof(cyg_uint32)];
    struct e2fs_super_block *sb = (struct e2fs_super_block *)sb_buf;

    e2fs->part = part;

    if (!PARTITION_READ(part, sb_block*(E2FS_MIN_BLOCK_SIZE/SECTOR_SIZE),
			(cyg_uint32 *)sb, E2FS_MIN_BLOCK_SIZE/SECTOR_SIZE))
	return -1;

    if (SWAB_LE16(sb->magic) != E2FS_SUPER_MAGIC) {
	diag_printf("ext2_mount: bad magic 0x%x\n", SWAB_LE16(sb->magic));
	return -1;
    }

    // save some stuff for easy access
    e2fs->blocksize = E2FS_BLOCK_SIZE(sb);
    e2fs->nr_ind_blocks = (e2fs)->blocksize / sizeof(cyg_uint32);
    e2fs->nr_dind_blocks = e2fs->nr_ind_blocks * ((e2fs)->blocksize / sizeof(cyg_uint32));
    e2fs->nr_tind_blocks = e2fs->nr_dind_blocks * ((e2fs)->blocksize / sizeof(cyg_uint32));
    e2fs->blocks_per_group = SWAB_LE32(sb->blocks_per_group);
    e2fs->ngroups = (SWAB_LE32(sb->blocks_count) + e2fs->blocks_per_group - 1) /
	             e2fs->blocks_per_group;
    e2fs->inodes_per_group = SWAB_LE32(sb->inodes_per_group);

    // Find the group descriptors which follow superblock
    e2fs->gdesc_block = ((sb_block * E2FS_MIN_BLOCK_SIZE) / e2fs->blocksize) + 1;
    e2fs->gdesc_first = 0; // cache group 0 initially

    if (!PARTITION_READ(part, E2FS_BLOCK_TO_SECTOR(e2fs,e2fs->gdesc_block),
			(cyg_uint32 *)e2fs->gdesc_cache, 1))
	return -1;

#if DEBUG_E2FS > 1
    diag_printf("E2FS superblock:\n");
    diag_printf("   [%d] inodes\n", SWAB_LE32(sb->inodes_count));
    diag_printf("   [%d] blocks\n", SWAB_LE32(sb->blocks_count));
    diag_printf("   [%d] blocksize\n", e2fs->blocksize);
    diag_printf("   [%d] blocks per group\n", e2fs->blocks_per_group);
    diag_printf("   [%d] ngroups\n", e2fs->ngroups);
#endif

#if DEBUG_E2FS > 4
    dump_sb(sb);
#endif

    return 0;
}