/*
 * percent.c		- Take percentage of a number
 *
 * Copyright (C) 2006  Theodore Ts'o <tytso@mit.edu>
 *
 * %Begin-Header%
 * This file may be redistributed under the terms of the GNU Library
 * General Public License, version 2.
 * %End-Header%
 */

#include "e2p.h"

#include <stdlib.h>

/*
 * We work really hard to calculate this accurately, while avoiding
 * an overflow.  "Is there a hyphen in anal-retentive?"  :-)
 */
unsigned int e2p_percent(int percent, unsigned int base)
{
	unsigned int mask = ~((1 << (sizeof(unsigned int) - 1) * 8) - 1);

	if (!percent)
		return 0;
	if (100 % percent == 0)
		return base / (100 / percent);
	if (mask & base)
		return (base / 100) * percent;
	return base * percent / 100;
}

#ifdef DEBUG
#include <unistd.h>
#include <stdio.h>

main(int argc, char **argv)
{
	unsigned int base;
	int percent;
	char *p;
	int log_block_size = 0;

	if (argc != 3) {
		fprintf(stderr, "Usage: %s percent base\n", argv[0]);
		exit(1);
	}

	percent = strtoul(argv[1], &p, 0);
	if (p[0] && p[1]) {
		fprintf(stderr, "Bad percent: %s\n", argv[1]);
		exit(1);
	}

	base = strtoul(argv[2], &p, 0);
	if (p[0] && p[1]) {
		fprintf(stderr, "Bad base: %s\n", argv[2]);
		exit(1);
	}

	printf("%d percent of %u is %u.\n", percent, base,
	       e2p_percent(percent, base));

	exit(0);
}
#endif
