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
19 struct hash {
20 int num;
21 const char *string;
22 };
23
24 static 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
e2p_hash2string(int num)31 const 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 */
e2p_string2hash(char * string)47 int 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