hashstr.c revision d1154eb460efe588eaed3d439c1caaca149fa362
1/*
2 * feature.c --- convert between features and strings
3 *
4 * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
5 *
6 * %Begin-Header%
7 * This file may be redistributed under the terms of the GNU Library
8 * General Public License, version 2.
9 * %End-Header%
10 */
11
12#include "config.h"
13#include <stdio.h>
14#include <stdlib.h>
15#include <string.h>
16#include <ctype.h>
17#include <errno.h>
18
19#include "e2p.h"
20
21struct hash {
22	int		num;
23	const char	*string;
24};
25
26static struct hash hash_list[] = {
27	{	EXT2_HASH_LEGACY, 	"legacy" },
28	{	EXT2_HASH_HALF_MD4, 	"half_md4" },
29	{	EXT2_HASH_TEA, 		"tea" },
30	{	0, 0 },
31};
32
33const char *e2p_hash2string(int num)
34{
35	struct hash  *p;
36	static char buf[20];
37
38	for (p = hash_list; p->string; p++) {
39		if (num == p->num)
40			return p->string;
41	}
42	sprintf(buf, "HASHALG_%d", num);
43	return buf;
44}
45
46/*
47 * Returns the hash algorithm, or -1 on error
48 */
49int e2p_string2hash(char *string)
50{
51	struct hash	*p;
52	char		*eptr;
53	int		num;
54
55	for (p = hash_list; p->string; p++) {
56		if (!strcasecmp(string, p->string)) {
57			return p->num;
58		}
59	}
60	if (strncasecmp(string, "HASHALG_", 8))
61		return -1;
62
63	if (string[8] == 0)
64		return -1;
65	num = strtol(string+8, &eptr, 10);
66	if (num > 255 || num < 0)
67		return -1;
68	if (*eptr)
69		return -1;
70	return num;
71}
72
73