hashstr.c revision efc6f628e15de95bcd13e4f0ee223cb42115d520
1c3aae25116e66c177579b0b79182b09340b19753Chris Lattner/*
2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman * feature.c --- convert between features and strings
36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell *
46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner *
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner * This file can be redistributed under the terms of the GNU Library General
7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman * Public License
86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell *
9ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman */
10c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
11c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include <stdio.h>
12ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman#include <stdlib.h>
13cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include <string.h>
14cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include <ctype.h>
15cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include <errno.h>
16cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner
17cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "e2p.h"
18fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
19c5e7e8d87d4a3b10edd5ac93ba1f3cdb4d1b449aDavid Greenestruct hash {
20583bd47f777fe3eb8305872fa0eadab31e833dffJim Laskey	int		num;
214b84086e89d86fb16f562166d9fea8df37db6be7Dan Gohman	const char	*string;
22583bd47f777fe3eb8305872fa0eadab31e833dffJim Laskey};
2398a366d547772010e94609e4584489b3e5ce0043Bill Wendling
24acaf09dbe4a6781163857db1321bbd5795e7d410Dan Gohmanstatic struct hash hash_list[] = {
255892d47a625638a90afeb31dd4f6f80a2f9bacdeChris Lattner	{	EXT2_HASH_LEGACY, 	"legacy" },
26322812e603705e1c2037313633e72f689524b163Evan Cheng	{	EXT2_HASH_HALF_MD4, 	"half_md4" },
27eb19e40efbd3cae80c908a30cdf4d33450733c45Chris Lattner	{	EXT2_HASH_TEA, 		"tea" },
28d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke	{	0, 0 },
29d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke};
30fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
31fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanconst char *e2p_hash2string(int num)
32fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman{
33fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman	struct hash  *p;
346e7a1617ac4a34792d9097b8d3644b72f57a45f7Devang Patel	static char buf[20];
35fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
36fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman	for (p = hash_list; p->string; p++) {
37fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman		if (num == p->num)
38fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman			return p->string;
398e4018e2de52c534405d7155c7009d0b35afb861Cedric Venet	}
408e4018e2de52c534405d7155c7009d0b35afb861Cedric Venet	sprintf(buf, "HASHALG_%d", num);
419c01f2dd0b20e09f4edef832620a188eda62ff5aDan Gohman	return buf;
42fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman}
43fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
44c7f6b8c5d40e17bf43fd3a1549d7d89c9da735e1Gabor Greif/*
45fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman * Returns the hash algorithm, or -1 on error
46fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman */
47fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanint e2p_string2hash(char *string)
48c23b8719ef9d6b1220e854b37d40e9e1c48a82bcGabor Greif{
49c23b8719ef9d6b1220e854b37d40e9e1c48a82bcGabor Greif	struct hash	*p;
50f3841fcbd587c31aa9842b3f33bd57de40c9f443Gabor Greif	char		*eptr;
51c23b8719ef9d6b1220e854b37d40e9e1c48a82bcGabor Greif	int		num;
52fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman
53fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman	for (p = hash_list; p->string; p++) {
54fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman		if (!strcasecmp(string, p->string)) {
55fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman			return p->num;
56fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman		}
57fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman	}
58c3aae25116e66c177579b0b79182b09340b19753Chris Lattner	if (strncasecmp(string, "HASHALG_", 8))
5925cf2275ff7de3de3bc0e508abaf457413d74725Duncan Sands		return -1;
6025cf2275ff7de3de3bc0e508abaf457413d74725Duncan Sands
6125cf2275ff7de3de3bc0e508abaf457413d74725Duncan Sands	if (string[8] == 0)
6225cf2275ff7de3de3bc0e508abaf457413d74725Duncan Sands		return -1;
6325cf2275ff7de3de3bc0e508abaf457413d74725Duncan Sands	num = strtol(string+8, &eptr, 10);
6425cf2275ff7de3de3bc0e508abaf457413d74725Duncan Sands	if (num > 255 || num < 0)
65c3aae25116e66c177579b0b79182b09340b19753Chris Lattner		return -1;
66c3aae25116e66c177579b0b79182b09340b19753Chris Lattner	if (*eptr)
67c3aae25116e66c177579b0b79182b09340b19753Chris Lattner		return -1;
68c3aae25116e66c177579b0b79182b09340b19753Chris Lattner	return num;
69c3aae25116e66c177579b0b79182b09340b19753Chris Lattner}
70c3aae25116e66c177579b0b79182b09340b19753Chris Lattner
71c3aae25116e66c177579b0b79182b09340b19753Chris Lattner