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