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