• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
21 struct hash {
22 	int		num;
23 	const char	*string;
24 };
25 
26 static 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 
e2p_hash2string(int num)33 const 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  */
e2p_string2hash(char * string)49 int 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