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 <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include <ctype.h>
16 #include <errno.h>
17 
18 #include "e2p.h"
19 
20 struct hash {
21 	int		num;
22 	const char	*string;
23 };
24 
25 static struct hash hash_list[] = {
26 	{	EXT2_HASH_LEGACY, 	"legacy" },
27 	{	EXT2_HASH_HALF_MD4, 	"half_md4" },
28 	{	EXT2_HASH_TEA, 		"tea" },
29 	{	0, 0 },
30 };
31 
e2p_hash2string(int num)32 const char *e2p_hash2string(int num)
33 {
34 	struct hash  *p;
35 	static char buf[20];
36 
37 	for (p = hash_list; p->string; p++) {
38 		if (num == p->num)
39 			return p->string;
40 	}
41 	sprintf(buf, "HASHALG_%d", num);
42 	return buf;
43 }
44 
45 /*
46  * Returns the hash algorithm, or -1 on error
47  */
e2p_string2hash(char * string)48 int e2p_string2hash(char *string)
49 {
50 	struct hash	*p;
51 	char		*eptr;
52 	int		num;
53 
54 	for (p = hash_list; p->string; p++) {
55 		if (!strcasecmp(string, p->string)) {
56 			return p->num;
57 		}
58 	}
59 	if (strncasecmp(string, "HASHALG_", 8))
60 		return -1;
61 
62 	if (string[8] == 0)
63 		return -1;
64 	num = strtol(string+8, &eptr, 10);
65 	if (num > 255 || num < 0)
66 		return -1;
67 	if (*eptr)
68 		return -1;
69 	return num;
70 }
71 
72